Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 10.02.2019
Сообщений: 36

stm32f103c8t6 spi max7219

14.01.2022, 01:07. Показов 906. Ответов 13

Студворк — интернет-сервис помощи студентам
Приветствую всем.
Долгое время не могу решить проблему касательно связки MAX7219 и stm32

Помогите, пожалуйста, решить проблему..
Не заводится микросхема, нет никакой информации на семисегментнике. Ранее думал, что вольтаж(3.3 на МК, 4+ В на DIN читается) не соответствует. Конвертером уровней поднял до 5В сигналы, но все равно не получается. Буду очень признателен, спасибо!

Фотокарточки диаграмм:
Кликните здесь для просмотра всего текста


Код отправки:
C++
1
2
3
4
LED_I::send_command(0xC, 0x1);          //выход из сна(normal mode)
LED_I::send_command(0xA, 0xB);          //яркость 23/32
LED_I::send_command(0xB, 0x3);          //количество разрядов (4 - 1 = 0x3)
LED_I::send_command(0xF, 0x1);          //дисплей-тест
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void LED_I::send_command(const uint8_t address, const uint8_t command)
{
    GPIOB->BRR |= GPIO_BRR_BR11;
 
    SPI1->DR = (address << 8) | command; // отслыем первым байтом адрес регистра, втором - команду для регистра
 
    while (!(SPI1->SR & SPI_SR_TXE));
    while(SPI1->SR & SPI_SR_BSY);
 
    GPIOB->BSRR |= GPIO_BSRR_BS11;
 
    __delay(1);
}
Код инициализации SPI:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
void LED_I::init()
{
    //тактирование порта B уже включено таймером
    //RCC->APB2ENR = RCC_APB2ENR_IOPBEN;
    SysTick_Config(72000000 / 1000);
    AFIO->MAPR = AFIO_MAPR_SPI1_REMAP | AFIO_MAPR_SWJ_CFG_JTAGDISABLE;
 
    RCC->APB2ENR |= RCC_APB2ENR_SPI1EN | RCC_APB2ENR_IOPBEN | RCC_APB2ENR_IOPAEN; // запускаем тактирование SPI, PB
    
 
    SPI1->CR1 |= (1 << SPI_CR1_DFF_Pos)         // 16-битная передача
                | (1 << SPI_CR1_SSM_Pos)        // программный SS
                | (1 << SPI_CR1_SSI_Pos)        // программный SS
                | (1 << SPI_CR1_BIDIMODE_Pos)   // transmit-only
                | (1 << SPI_CR1_BIDIOE_Pos)
                | (0 << SPI_CR1_LSBFIRST_Pos)   // старший бит вперед
                | SPI_CR1_BR                    // F_CPU/64
                | (1 << SPI_CR1_MSTR_Pos)       // master mode
                | (0 << SPI_CR1_CPHA_Pos)       // SPI 0:0
                | (0 << SPI_CR1_CPOL_Pos);
    //SPI1->CR2 |= SPI_CR2_SSOE;
    SPI1->CR1 |= (1 << SPI_CR1_SPE_Pos);        // запуск SPI
 
    //SCK
    GPIOB->CRL |= (0b10 << GPIO_CRL_CNF3_Pos) | (0b11 << GPIO_CRL_MODE3_Pos);
  
    //CS
    GPIOB->CRH |= (0b00 <<GPIO_CRH_CNF11_Pos) | (0b11 << GPIO_CRH_MODE11_Pos);
    GPIOB->BSRR |= GPIO_BSRR_BS11;
 
    //MOSI
    GPIOB->CRL |= (0b10 << GPIO_CRL_CNF5_Pos) | (0b11 << GPIO_CRL_MODE5_Pos);
    while(SPI1->SR & SPI_SR_MODF);
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.01.2022, 01:07
Ответы с готовыми решениями:

stm32f103c8t6 spi max7219
Приветствую! При подключении микрухи MAX7219 столкнулся с проблемой, что она некорректно реагирует на отсылаемые ей данные. Я уже...

Stm32 max7219 SPI
День добрый! Никак не могу настроить работу МК для управления 7 сегментным индикатором. Вроде все настроил, но индикация молчит. /**...

проблема с SPI на stm32f103c8t6
Здравствуйте, недавно возникла необходимость начать разбираться с стм, и сразу возникла проблема. При передаче хоть какого значения в...

13
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
14.01.2022, 07:13
Цитата Сообщение от Browze_Shooz Посмотреть сообщение
//SCK
    GPIOB->CRL |= (0b10 << GPIO_CRL_CNF3_Pos) | (0b11 << GPIO_CRL_MODE3_Pos);
в какой режим хочешь включить ножку SCK, кстати какая она?
0
0 / 0 / 1
Регистрация: 10.02.2019
Сообщений: 36
14.01.2022, 15:08  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
в какой режим хочешь включить ножку SCK
Режим:
CNF - 10 - AFO, push-pull
Mode - 11 - 50 MHz

Цитата Сообщение от ValeryS Посмотреть сообщение
кстати какая она?
Нога SPI1_SCK - PB3
0
0 / 0 / 1
Регистрация: 10.02.2019
Сообщений: 36
14.01.2022, 15:20  [ТС]
Добавлю, что купил сейчас новый драйвер. На ноге MISO отображаются данные, которые уже были приняты микросхемой.
Значит, микросхема работает. Может быть, я путаю команды?

0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
14.01.2022, 15:26
Цитата Сообщение от Browze_Shooz Посмотреть сообщение
CNF - 10 - AFO, push-pull
а будет ли?
после сброса регистр имеет значение
01: Floating input — вход с отключенными подтягивающими резисторами (значение после сброса)
после вот этих манипуляций
Цитата Сообщение от Browze_Shooz Посмотреть сообщение
GPIOB->CRL |= (0b10 << GPIO_CRL_CNF3_Pos)
имеем значение 011
11: Reserved — не используется
Добавлено через 2 минуты
Цитата Сообщение от Browze_Shooz Посмотреть сообщение
На ноге MISO отображаются данные, которые уже были приняты микросхемой.
MISO Master Input Slave Output - мастер вход ведомый выход
1
0 / 0 / 1
Регистрация: 10.02.2019
Сообщений: 36
14.01.2022, 15:32  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
MISO Master Input Slave Output - мастер вход ведомый выход
да, верно
Serial-Data Output. The data into DIN is valid at DOUT 16.5 clock cycles later. This pin is used
to daisy-chain several MAX7219/MAX7221’s and is never high-impedance.
т.е данные на MOSI(DIN) повторяются через N тактов на DOUT.

Цитата Сообщение от ValeryS Посмотреть сообщение
после сброса регистр имеет значение
01: Floating input — вход с отключенными подтягивающими резисторами (значение после сброса)
после вот этих манипуляций

GPIOB->CRL |= (0b10 << GPIO_CRL_CNF3_Pos)
имеем значение 011
Это все же для режима на вход?
А я же ногу конфигурирую на выход
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
14.01.2022, 16:16
Цитата Сообщение от Browze_Shooz Посмотреть сообщение
А я же ногу конфигурирую на выход
как ты её конфигурируешь? через операцию "ИЛИ" и получаешь неразрешённую комбинацию
01 | 10 =11

Добавлено через 3 минуты
сгенери КУБом код, проверь работоспособность
потом в отдатчике посмотри регистры и после уже пиши свой код оглядываясь на эти регистры
1
0 / 0 / 1
Регистрация: 10.02.2019
Сообщений: 36
14.01.2022, 21:14  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
как ты её конфигурируешь? через операцию "ИЛИ" и получаешь неразрешённую комбинацию
01 | 10 =11
Спасибо! Сглупил.
Да, предварительно занулил все значения, а уже после инициализирую нужными значениями

Цитата Сообщение от ValeryS Посмотреть сообщение
сгенери КУБом код, проверь работоспособность
потом в отдатчике посмотри регистры и после уже пиши свой код оглядываясь на эти регистры
К сожалению, кубом возможности нет воспользоваться(
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
14.01.2022, 21:23
Цитата Сообщение от Browze_Shooz Посмотреть сообщение
Да, предварительно занулил все значения, а уже после инициализирую нужными значениями
все -это 8 ножек? этак ты далеко пойдешь все ножки в режим аналогово входа
обнулить нужно конкретную ножку использовать И
примерно так
C
1
GPIOB->CRL &= ~(0b10 << GPIO_CRL_CNF3_Pos);
0
0 / 0 / 1
Регистрация: 10.02.2019
Сообщений: 36
14.01.2022, 21:25  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
все -это 8 ножек? этак ты далеко пойдешь
Да, конечно, конкретную. Просто выразился не так
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
14.01.2022, 21:29
Цитата Сообщение от Browze_Shooz Посмотреть сообщение
GPIO_CRL_CNF3_Pos
посмотри макросы, где то рядом там уже маски набиты, не надо мучатся со сдвигами
конкретно не вспомню, искать нужно а компилятора нет под рукой
0
0 / 0 / 1
Регистрация: 10.02.2019
Сообщений: 36
14.01.2022, 21:30  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
конкретно не вспомню, искать нужно а компилятора нет под рукой
C++
1
GPIOB->CRL &= ~(GPIO_CRL_CNF3 | GPIO_CRL_MODE3);    // обнуление
0
Windows must die
672 / 851 / 103
Регистрация: 23.11.2021
Сообщений: 5,000
Записей в блоге: 17
14.01.2022, 23:39
Чтобы не мучиться с magick numbers, лучше накатать макросы:
C
1
2
3
4
5
6
7
8
9
10
#define CNF_ANALOG      (0 << 2)
#define CNF_PPOUTPUT    (0 << 2)
#define CNF_FLINPUT     (1 << 2)
#define CNF_ODOUTPUT    (1 << 2)
#define CNF_PUDINPUT    (2 << 2)
#define CNF_AFPP        (2 << 2)
#define CNF_AFOD        (3 << 2)
 
#define CRL(pin, cnfmode)  ((cnfmode) << (pin*4))
#define CRH(pin, cnfmode)  ((cnfmode) << ((pin-8)*4))
В этом случае инициализация выглядит достаточно наглядно:
C
1
2
    GPIOA->CRL = CRL(0, CNF_PPOUTPUT|MODE_FAST) | CRL(1, CNF_PPOUTPUT|MODE_FAST) | CRL(2, CNF_PPOUTPUT|MODE_FAST) |
                 CRL(3, CNF_PPOUTPUT|MODE_FAST) | CRL(4, CNF_PPOUTPUT|MODE_FAST) | CRL(5, CNF_PPOUTPUT|MODE_FAST);
1
0 / 0 / 1
Регистрация: 10.02.2019
Сообщений: 36
15.01.2022, 00:33  [ТС]
Цитата Сообщение от Eddy_Em Посмотреть сообщение
В этом случае инициализация выглядит достаточно наглядно:
Да, спасибо за совет



И, может, есть догадки, почему отображения нет на индикаторе?
В какую сторону копать-то хоть?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.01.2022, 00:33
Помогаю со студенческими работами здесь

STM32F103C8T6, работа с SPI
Возникло желание использовать в своем проекте Si4463, МК(STM32F103C8T6), для готовности трансивера необходимо его опросить и понять что он...

STM32F103C8t6 SPI управление ногой NSS
Вообщем настраиваю я SPI на STM32F103C8t6. Ногу NSS настраиваю на software управление: #define CS_LOW GPIOB-&gt;BRR=GPIO_BRR_BR12; ...

ILI9341 SPI DMA, SPI, UART библиотеки
Доброго времени, форумчане... Посоветуйте библиотек плиз... 0) Либа для работы с контроллером по типу HAL (чисто ваше мнение какая вам...

STM32F103C8T6: HAL+SPI+SD-карта
Интересует тема работы с флеш-картами на НАL через SPI. Имеются: STM32F103C8T6 и ардуиновский модуль для sd-карт (выходы: GND, VCC,...

SPI Flash 25q128 как SD в SPI mode ?
ну задача использовать spi флешки вместо sd карт. Как это зделать? Будет ли работать если spi флеху просто припаять и вставить в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru