Соответствие ног (портов) в скетче и на плате! STM32 совсем не понятно. Как работает??

walera_kur
Offline
Зарегистрирован: 19.03.2019

Уважаемые! Учусь использовать СТМки.  Подключил дисплей ST7565 только после того как слепо повторил чей то опубликованный проект. В этом проекте ноги дисплея подключались  и заработали со странной нумерацией. Плата F401CCU6

//ноги дисплея сверху вниз,слева . Справа - ноги STM32 
// pin 1 - 4
// pin 2 - 3
// pin 3 - 2
// pin 4 - 1
// pin 5 - 0

U8G2_ST7565_ERC12864_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 1, /* data=*/ 0, /* cs=*/ 4, /* dc=*/ 2, /* reset=*/ 3);

В скетче написано ноги 0,1,2,3,4,5.

В документации на плату это ноги  РА0 -РА5 -  если порты, и  если ноги процессора то  10,11,12-15.

https://www.mischianti.org/2022/06/06/weact-stm32f401ccu6-black-pill-high-resolution-pinout-and-specs/

Если в скетче написать РА0 -РА5 то компелируется и не работает.  С энкодером тоже самое

// ноги энкоднра
#define CLK 7
#define DT 6

Это же порт РА6, РА7, но работает только в таком виде (6,7).

Хочу подключить другие устройства  к другим портам. Как узнать эту мудрую нумерацию???   Что я не понимаю?? 

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

1. На stm32 принято обозначать ноги как PA0...PA15, PB0...PB15... Цифры как-то употреблять не принято, тем более, что соответствие мнемоник цифрам может быть разное для разных кристаллов. 

2. Если что-то, что заведомо должно работать, не работает, проверьте, правильно ли Вы выбрали тип контроллера. (ну и не мешает еще раз проверить всю схему).

3. Ну и на всякий случай: номера ножек корпуса никак не соотносятся с нумерацией этих ножек в скетче.

nik182
Offline
Зарегистрирован: 04.05.2015

В STM ядре ардуино есть файл pins_arduino.h в котором есть формула пересчёта нумерации пинов STM в нотацию ардуино. А можно посмотреть файл с описанием, например  https://github.com/stm32duino/Arduino_Core_STM32/blob/main/variants/STM32F4xx/F401V(B-C-D-E)T/variant_generic.h Там вокруг есть папки с вариантами раскладок для других процессоров STM. Что интересно - нет обозначений типа D3 для цифровых ног, только 3. Для аналоговых A3 есть. 

//                  | DIGITAL | ANALOG | USART     | TWI                  | SPI                            | SPECIAL   |
//                  |---------|--------|-----------|----------------------|--------------------------------|-----------|
#define PA0  A0  // | 0       | A0     |           |                      |                                |           |
#define PA1  A1  // | 1       | A1     |           |                      | SPI4_MOSI                      |           |
#define PA2  A2  // | 2       | A2     | USART2_TX |                      |                                |           |
#define PA3  A3  // | 3       | A3     | USART2_RX |                      |                                |           |
#define PA4  A4  // | 4       | A4     |           |                      | SPI1_SS, (SPI3_SS)             |           |
#define PA5  A5  // | 5       | A5     |           |                      | SPI1_SCK                       |           |
#define PA6  A6  // | 6       | A6     |           |                      | SPI1_MISO                      |           |
#define PA7  A7  // | 7       | A7     |           |                      | SPI1_MOSI                      |           |
#define PA8  8   // | 8       |        |           | TWI3_SCL             |                                |           |
#define PA9  9   // | 9       |        | USART1_TX |                      |                                |           |
#define PA10 10  // | 10      |        | USART1_RX |                      | SPI5_MOSI                      |           |
#define PA11 11  // | 11      |        | USART6_TX |                      | SPI4_MISO                      |           |
#define PA12 12  // | 12      |        | USART6_RX |                      | SPI5_MISO                      |           |
#define PA13 13  // | 13      |        |           |                      |                                | SWD_SWDIO |
#define PA14 14  // | 14      |        |           |                      |                                | SWD_SWCLK |
#define PA15 15  // | 15      |        | USART1_TX |                      | SPI3_SS, (SPI1_SS)             |           |
//                  |---------|--------|-----------|----------------------|--------------------------------|-----------|
#define PB0  A8  // | 16      | A8     |           |                      | SPI5_SCK                       |           |
#define PB1  A9  // | 17      | A9     |           |                      | SPI5_SS                        |           |
#define PB2  18  // | 18      |        |           |                      |                                | BOOT1     |
#define PB3  19  // | 19      |        | USART1_RX | TWI2_SDA             | SPI3_SCK,  (SPI1_SCK)          |           |
#define PB4  20  // | 20      |        |           | TWI3_SDA             | SPI3_MISO, (SPI1_MISO)         |           |
#define PB5  21  // | 21      |        |           |                      | SPI3_MOSI, (SPI1_MOSI)         |           |
#define PB6  22  // | 22      |        | USART1_TX | TWI1_SCL             |                                |           |
#define PB7  23  // | 23      |        | USART1_RX | TWI1_SDA             |                                |           |
#define PB8  24  // | 24      |        |           | TWI1_SCL, (TWI3_SDA) | SPI5_MOSI                      |           |
#define PB9  25  // | 25      |        |           | TWI1_SDA, (TWI2_SDA) | SPI2_SS                        |           |
#define PB10 26  // | 26      |        |           | TWI2_SCL             | SPI2_SCK                       |           |
#define PB12 27  // | 27      |        |           |                      | SPI3_SCK, (SPI2_SS), (SPI4_SS) |           |
#define PB13 28  // | 28      |        |           |                      | SPI4_SCK, (SPI2_SCK)           |           |
#define PB14 29  // | 29      |        |           |                      | SPI2_MISO                      |           |
#define PB15 30  // | 30      |        |           |                      | SPI2_MOSI                      |           |
//                  |---------|--------|-----------|----------------------|--------------------------------|-----------|
#define PC13 31  // | 31      |        |           |                      |                                |           |
#define PC14 32  // | 32      |        |           |                      |                                | OSC32_IN  |
#define PC15 33  // | 33      |        |           |                      |                                | OSC32_OUT |
//                  |---------|--------|-----------|----------------------|--------------------------------|-----------|
#define PH0  34  // | 34      |        |           |                      |                                | OSC_IN    |
#define PH1  35  // | 35      |        |           |                      |                                | OSC_OUT   |
//                  |---------|--------|-----------|----------------------|--------------------------------|-----------|

 

walera_kur
Offline
Зарегистрирован: 19.03.2019

Спасибо!  nik182 .

Пол ночи вчера искал соответствие ног.   Сейчас пазл сошелся. Не понятно почему на просторах инета не удаётся найти.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Все проще, это ж Cortex ядро
32 разрядные порты gpio, pa0 это 0 порт, pa31 это 31 порт, pb0 это 32,pb31 это 63 и так далее по алфавиту.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

andycat пишет:
Все проще, это ж Cortex ядро 32 разрядные порты gpio, pa0 это 0 порт, pa31 это 31 порт, pb0 это 32,pb31 это 63 и так далее по алфавиту.

Ядро и GPIO никак не связаны.

Каждый разработчик делает периферию так, как ему удобнее. В частности, в stm32 используются в основном не 32-, а 16-разрядные порты. Т.е. PA0-PA15, PB0-PB15 и т.д. А вот в SAM3 (Arduino Due) - там как раз 32-разрядные внешние порты.

walera_kur
Offline
Зарегистрирован: 19.03.2019

Парни! Кто ни будь  внешний  RTC  подключал к СТМ32  в Ардуино?? На Библиотеку ругается.

Хочу на дачу управление теплым полом, надо тариф второй оследить. У встроенного как то мудро все ,выходные опять же надо  вылавливать. И что то полно жалоб на часовой кварц на платах.

Про ноги!  все сошлось. НО!?  примеры мигания !!!!  везде пишется PC13 , а не нога 31.

И ведь работает. Это меня наверно в ступор вводило с этими номерами

 

b707
Offline
Зарегистрирован: 26.05.2017

walera_kur пишет:

везде пишется PC13 , а не нога 31.

И ведь работает. Это меня наверно в ступор вводило с этими номерами

если тебя это удивляет - видимо тебе стоит еще раз изучить, что такое макросы в Си.