0 / 0 / 1
Регистрация: 10.02.2019
Сообщений: 36
1

stm32f103c8t6 spi max7219

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

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

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

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

stm32f103c8t6 spi max7219
stm32f103c8t6 spi max7219



Код отправки:
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2022, 01:07
Ответы с готовыми решениями:

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

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

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

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

STM32F103C8t6 SPI управление ногой NSS
Вообщем настраиваю я SPI на STM32F103C8t6. Ногу NSS настраиваю на software управление: #define...

13
Модератор
Эксперт по электронике
8567 / 6383 / 859
Регистрация: 14.02.2011
Сообщений: 22,208
14.01.2022, 07:13 2
Цитата Сообщение от 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  [ТС] 3
Цитата Сообщение от 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  [ТС] 4
Добавлю, что купил сейчас новый драйвер. На ноге MISO отображаются данные, которые уже были приняты микросхемой.
Значит, микросхема работает. Может быть, я путаю команды?

stm32f103c8t6 spi max7219
0
Модератор
Эксперт по электронике
8567 / 6383 / 859
Регистрация: 14.02.2011
Сообщений: 22,208
14.01.2022, 15:26 5
Цитата Сообщение от 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  [ТС] 6
Цитата Сообщение от 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
Это все же для режима на вход?
А я же ногу конфигурирую на выход
stm32f103c8t6 spi max7219
0
Модератор
Эксперт по электронике
8567 / 6383 / 859
Регистрация: 14.02.2011
Сообщений: 22,208
14.01.2022, 16:16 7
Цитата Сообщение от Browze_Shooz Посмотреть сообщение
А я же ногу конфигурирую на выход
как ты её конфигурируешь? через операцию "ИЛИ" и получаешь неразрешённую комбинацию
01 | 10 =11

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

Цитата Сообщение от ValeryS Посмотреть сообщение
сгенери КУБом код, проверь работоспособность
потом в отдатчике посмотри регистры и после уже пиши свой код оглядываясь на эти регистры
К сожалению, кубом возможности нет воспользоваться(
0
Модератор
Эксперт по электронике
8567 / 6383 / 859
Регистрация: 14.02.2011
Сообщений: 22,208
14.01.2022, 21:23 9
Цитата Сообщение от 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  [ТС] 10
Цитата Сообщение от ValeryS Посмотреть сообщение
все -это 8 ножек? этак ты далеко пойдешь
Да, конечно, конкретную. Просто выразился не так
0
Модератор
Эксперт по электронике
8567 / 6383 / 859
Регистрация: 14.02.2011
Сообщений: 22,208
14.01.2022, 21:29 11
Цитата Сообщение от Browze_Shooz Посмотреть сообщение
GPIO_CRL_CNF3_Pos
посмотри макросы, где то рядом там уже маски набиты, не надо мучатся со сдвигами
конкретно не вспомню, искать нужно а компилятора нет под рукой
0
0 / 0 / 1
Регистрация: 10.02.2019
Сообщений: 36
14.01.2022, 21:30  [ТС] 12
Цитата Сообщение от ValeryS Посмотреть сообщение
конкретно не вспомню, искать нужно а компилятора нет под рукой
C++
1
GPIOB->CRL &= ~(GPIO_CRL_CNF3 | GPIO_CRL_MODE3);    // обнуление
0
Нарушитель
105 / 194 / 22
Регистрация: 23.11.2021
Сообщений: 921
14.01.2022, 23:39 13
Чтобы не мучиться с 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  [ТС] 14
Цитата Сообщение от Eddy_Em Посмотреть сообщение
В этом случае инициализация выглядит достаточно наглядно:
Да, спасибо за совет



И, может, есть догадки, почему отображения нет на индикаторе?
В какую сторону копать-то хоть?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2022, 00:33

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

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

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

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

STM32 MAX7219
Приветствую. Пытаюсь подключить светодиодную матрицу 8 на 8 через микросхемку MAX7219. В результате...

MAX7219 и STM32F100
Здравствуйте, уважаемые форумчане! Воюю с подключением этой микросхемы к STM32F100C4 через SPI1....


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru