Stm32 с чего начать изучение...

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
linux_rulezz
Вымогатель припоя
Сообщения: 583
Зарегистрирован: Пн сен 15, 2025 08:43:23
Откуда: Маленький СССР посреди шариатской республики

Re: Stm32 с чего начать изучение...

Сообщение linux_rulezz »

С интом - как у людей:

Код: Выделить всё

int endPosition;
if(GetPosition() == 50) endPosition = TRUE;
else endPosition = FALSE;
А с булом - как у б..й!
Windows must die!
Rapra
Грызет канифоль
Сообщения: 259
Зарегистрирован: Пн фев 16, 2026 17:30:02

Re: Stm32 с чего начать изучение...

Сообщение Rapra »

То есть, вы многих из нас назвали бл@дями? Хм, не очень то вы вежливы, гражданин. За такие слова в реале то можно и в хлеборезку отхватить :)) Эх, это поколение молодых интернетчиков, которые общаются исключительно через чаты и мессенджеры, потому и за базаром не следят.

В общем, bool - вещь правильная, достойная. Для тех, кто понимает, как и зачем им пользоваться. Остальных же просим не напрягаться.
Аватара пользователя
linux_rulezz
Вымогатель припоя
Сообщения: 583
Зарегистрирован: Пн сен 15, 2025 08:43:23
Откуда: Маленький СССР посреди шариатской республики

Re: Stm32 с чего начать изучение...

Сообщение linux_rulezz »

Не надо красивый, простой и логичный С превращать в убогий С++!
Windows must die!
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Stm32 с чего начать изучение...

Сообщение VladislavS »

Убогий

Код: Выделить всё

bool a;
printf("%d", ++a);
ошибкой считает. В отличии от логичного.
Rapra
Грызет канифоль
Сообщения: 259
Зарегистрирован: Пн фев 16, 2026 17:30:02

Re: Stm32 с чего начать изучение...

Сообщение Rapra »

Так никто же не заставляет насильно! Не надо просто гнать пургу и обзывать бл@дями тех, кто использует другие инструменты! Каждый волен делать свой выбор, у нас свободное общество. Но, плиз, избавьте нас от своих оскорблений. Вы наверно очень молоды и кроме чатов и мессенджеров ничего более не видели и нигде в обществе не были.
А мы тут уж сами разберемся, нужен bool или не нужен, и на каком языке писать программы.

Добавлено after 3 minutes 9 seconds:
Не нравится версия C23 - никто не заставляет насильно, оставайтесь на С11 или даже С99. Не нравится bool - пишите int и не парьтесь. Но зачем так истерить то? int или char ведь не отменили.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Stm32 с чего начать изучение...

Сообщение ARV »

[uquote="linux_rulezz",url="/forum/viewtopic.php?p=4790788#p4790788"]Нет. Если бы это было так, то uint8_t[10] занимала бы не 10 (12) байт, а 40![/uquote]а давеча мне доказали, что всё зависит от того, как линкер всё распихает... выходит, и 40 может?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
linux_rulezz
Вымогатель припоя
Сообщения: 583
Зарегистрирован: Пн сен 15, 2025 08:43:23
Откуда: Маленький СССР посреди шариатской республики

Re: Stm32 с чего начать изучение...

Сообщение linux_rulezz »

ARV, не может! Массив из uint8_t не будет разбрасываться почленно по uint32_t!
А вот границу массива компилятор выравняет, если не указано иное. Как и границу структуры.
Поля внутри структуры тоже будут выравниваться, если не указать packed. Но, если указать packed, скажем, на STM32F0, легко нарваться на хардфолт.
Windows must die!
tonyk
Это не хвост, это антенна
Сообщения: 1305
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Re: Stm32 с чего начать изучение...

Сообщение tonyk »

ARV писал(а):а давеча мне доказали
Никто ничего вам не доказывал. До вас пытаются донести, что в программировании как и в сексе результат зависит от усилий двоих, в данном случае от компилятора и линковщика.
ARV писал(а):всё зависит от того, как линкер всё распихает...
Пихают бездумно молодые и глупые, а линковщик размещает в памяти объекты данных, созданные компилятором, с указаниями, написанными в его скрипте. Если для сегмента включено выравнивание на 4 байта и ваш массив на 10 байт единственный объект, размещаемый в этом сегменте, то размер сегмента будет 12 байт. Если же будут ещё данные, то они будут размещаться за этим массивом без зазоров, но итоговый размер сегмента будет выровнен до int32. Если вы включите выравнивание сегмента на 40 байт, то полезными в нём будут только первые 10 байт, а 30 байт просто не будут использоваться.
Разберитесь уже, кто и что делает, а то вы не понимаете, что такое размер данных, что такое выравнивание, и что сколько в итоге занимает места.
Rapra
Грызет канифоль
Сообщения: 259
Зарегистрирован: Пн фев 16, 2026 17:30:02

Re: Stm32 с чего начать изучение...

Сообщение Rapra »

Насколько мне известно, нельзя в массиве, объявленном как uint8_t array[10] сделать "дырки". Атрибутом aligned(n) можно задать выравнивание начала массива по границе n байт, но сам массив будет непрерывным из элементов uint8_t. Если нужны дырки в массиве, сделайте массив из структуры, в которой одно поле - данные, а остальные поля создают этот самый промежуток. Хотя на практике вряд ли кому этот вариант нужен. Чисто академическая задачка
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Stm32 с чего начать изучение...

Сообщение Adrift »

[uquote="linux_rulezz",url="/forum/viewtopic.php?p=4790861#p4790861"]Не надо красивый, простой и логичный С превращать в убогий С++![/uquote]
Поздно, на C теперь даже трейты можно эмулировать )

Код: Выделить всё

#define is_bool(x) _Generic((typeof(x)){0}, bool: 1, default: 0)

bool a;
static_assert(is_bool(a));
В целом тенденция такова, что в C сейчас массово перетаскивают фичи из C++, хотя бывает и наоборот, #embed, например, перекочевал в обратном направлении.
Rapra
Грызет канифоль
Сообщения: 259
Зарегистрирован: Пн фев 16, 2026 17:30:02

Re: Stm32 с чего начать изучение...

Сообщение Rapra »

Как бы вот давно назрела необходимость модифицировать язык Си. Хотя, как самый простой, он в целом вполне норм, не требует больших знаний и легко осваивается.
С другой стороны, лично мне в нем не хватало namespace и того самого bool, а так же перегрузки функции по различию её параметров.
Аватара пользователя
JackSmith
Потрогал лапой паяльник
Сообщения: 332
Зарегистрирован: Ср мар 09, 2016 08:07:41

Re: Stm32 с чего начать изучение...

Сообщение JackSmith »

[uquote="Rapra",url="/forum/viewtopic.php?p=4791022#p4791022"]мне в нем не хватало перегрузки функции по различию её параметров.[/uquote]

Код: Выделить всё

#include <stdbool.h>

void send_int(int val)   { /* реализация для int */ }
void send_float(float val) { /* реализация для float */ }
void send_bool(bool val)  { /* реализация для bool */ }

#define usb_send(x) _Generic((x), \
    int:   send_int,              \
    float: send_float,            \
    bool:  send_bool,             \
    default: send_int             \
)(x)

int the_send() {
    int   a = 10;
    float b = 3.14f;
    bool  c = true;

    usb_send(a); // Вызовет send_int
    usb_send(b); // Вызовет send_float
    usb_send(c); // Вызовет send_bool
    
    return 0;
}
Rapra
Грызет канифоль
Сообщения: 259
Зарегистрирован: Пн фев 16, 2026 17:30:02

Re: Stm32 с чего начать изучение...

Сообщение Rapra »

Сделали в С? Как-то кривовато конечно, через макросы чтоль? Впрочем, уже поздняк метаться, давно перешел и возвращаться обратно на С уже бессмысленно.
Аватара пользователя
JackSmith
Потрогал лапой паяльник
Сообщения: 332
Зарегистрирован: Ср мар 09, 2016 08:07:41

Re: Stm32 с чего начать изучение...

Сообщение JackSmith »

[uquote="Rapra",url="/forum/viewtopic.php?p=4791127#p4791127"]Как-то кривовато конечно[/uquote]
где-то видите ошибки?
через макросы чтоль
предложите вариант без макросов.
Rapra
Грызет канифоль
Сообщения: 259
Зарегистрирован: Пн фев 16, 2026 17:30:02

Re: Stm32 с чего начать изучение...

Сообщение Rapra »

Имею ввиду не ошибки, а общую концепцию в С. Чето она как-то не особо, судя по этому вашему примеру.

Без макросов и прочих телодвижений есть в С++:
void Foo(int a);
void Foo(uint8_t a);

И вообще даже так:
template<typename T> void Foo(T a);
где T - вообще любой тип, в том числе и пользовательский (структура, класс)

и можно задать отдельные реализации для разных типов:
template<> void Foo(uint16_t a);
template<> void Foo(MyClass a);
Аватара пользователя
linux_rulezz
Вымогатель припоя
Сообщения: 583
Зарегистрирован: Пн сен 15, 2025 08:43:23
Откуда: Маленький СССР посреди шариатской республики

Re: Stm32 с чего начать изучение...

Сообщение linux_rulezz »

Rapra, вот еще не хватало подобную дичь в С тащить! И дженериков достаточно!
А для микроконтроллерщиков-лентяев даже #embed добавили. Чтобы куски чужих бинарников втыкать в свои ☺
Как я уже говорил, этот "комитет" явно в сторону ЛГБТ разворачивается… Нет бы constexpr добавить в С, они всякую муть мутят!
Да и черт с этим комитетом: полным-полно "гццзмов", которыми многие пользуются, а в стандарт они не входят. Ну, хоть бы разработчики gcc включили этот констэкспр в компилятор С! Сколько можно куски кода для МК генерировать каждый раз, как в протокол что-то добавляешь?
Windows must die!
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Stm32 с чего начать изучение...

Сообщение Adrift »

[uquote="linux_rulezz",url="/forum/viewtopic.php?p=4791138#p4791138"]Нет бы constexpr добавить в С, они всякую муть мутят![/uquote]
Так добавили уже, но не для функций пока )
Rapra
Грызет канифоль
Сообщения: 259
Зарегистрирован: Пн фев 16, 2026 17:30:02

Re: Stm32 с чего начать изучение...

Сообщение Rapra »

Ну не знаю, че они туда добавляют и по каким причинам. Я как-то не шибко то слежу за новинками моды - просто не когда это делать.

Добавлено after 7 minutes 23 seconds:
Про втыкание бинарников. Это не обязательно исполняемый код. Это могут быть какие-то константные данные, которые либо не могут быть представлены в текстовом виде, либо их удобнее загрузить именно в бинарном виде, чтобы не тратить время на компиляцию.
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Stm32 с чего начать изучение...

Сообщение Adrift »

[uquote="Rapra",url="/forum/viewtopic.php?p=4791147#p4791147"]Про втыкание бинарников. Это не обязательно исполняемый код. Это могут быть какие-то константные данные, которые либо не могут быть представлены в текстовом виде, либо их удобнее загрузить именно в бинарном виде, чтобы не тратить время на компиляцию.[/uquote]
У меня #embed такие текстовые файлы грузит:
Спойлер

Код: Выделить всё

PA0  TIM2_CH1:1 TIM5_CH1:2 TIM8_ETR:3 TIM15_BKIN:4 SPI6_NSS:5 SPI3_RDY:6 USART2_CTS/USART2_NSS:7 UART4_TX:8 SAI2_SD_B:A ETH_CRS:B TIM2_ETR:E EVENTOUT:F
PA1  TIM2_CH2:1 TIM5_CH2:2 TIM15_CH1N:4 LPTIM1_IN1:5 OCTOSPI1_DQS:6 USART2_DE/USART2_RTS:7 UART4_RX:8 OCTOSPI1_IO3:9 SAI2_MCLK_B:A ETH_REF_CLK/ETH_RX_CLK:B EVENTOUT:F
PA2  TIM2_CH3:1 TIM5_CH3:2 TIM15_CH1:4 LPTIM1_IN2:5 USART2_TX:7 SAI2_SCK_B:8 ETH_MDIO:B EVENTOUT:F
PA3  TIM2_CH4:1 TIM5_CH4:2 OCTOSPI1_CLK:3 TIM15_CH2:4 I2S2_WS/SPI2_NSS:5 SAI1_SD_B:6 USART2_RX:7 ETH_COL:B EVENTOUT:F
PA4  TIM5_ETR:2 LPTIM2_CH1:3 I2S1_WS/SPI1_NSS:5 I2S3_WS/SPI3_NSS:6 USART2_CK:7 SPI6_NSS:8 DCMI_HSYNC/PSSI_DE:D EVENTOUT:F
PA5  TIM2_CH1:1 TIM8_CH1N:3 I2S1_CK/SPI1_SCK:5 SPI6_SCK:8 ETH_TX_EN:B PSSI_D14:D TIM2_ETR:E EVENTOUT:F
PA6  TIM1_BKIN:1 TIM3_CH1:2 TIM8_BKIN:3 I2S1_SDI/SPI1_MISO:5 OCTOSPI1_IO3:6 USART11_TX:7 SPI6_MISO:8 TIM13_CH1:9 DCMI_PIXCLK/PSSI_PDCK:D EVENTOUT:F
PA7  TIM1_CH1N:1 TIM3_CH2:2 TIM8_CH1N:3 I2S1_SDO/SPI1_MOSI:5 USART11_RX:7 SPI6_MOSI:8 TIM14_CH1:9 OCTOSPI1_IO2:A ETH_CRS_DV/ETH_RX_DV:B FMC_SDNWE:C FMC_NWE:D EVENTOUT:F
PA8  RCC_MCO_1:0 TIM1_CH1:1 TIM8_BKIN2:3 I2C3_SCL:4 SPI1_RDY:5 USART1_CK:7 USB_SOF:A UART7_RX:B FMC_NOE:C DCMI_D3/PSSI_D3:D EVENTOUT:F
PA9  TIM1_CH2:1 LPUART1_TX:3 I2C3_SMBA:4 I2S2_CK/SPI2_SCK:5 USART1_TX:7 ETH_TX_ER:B FMC_NWE:C DCMI_D0/PSSI_D0:D EVENTOUT:F
PA10 TIM1_CH3:1 LPUART1_RX:3 LPTIM2_IN2:4 UCPD1_FRSTX:6 USART1_RX:7 FDCAN2_TX:9 SDMMC1_D0:C DCMI_D1/PSSI_D1:D EVENTOUT:F
PA11 TIM1_CH4:1 LPUART1_CTS:3 I2S2_WS/SPI2_NSS:5 UART4_RX:6 USART1_CTS/USART1_NSS:7 FDCAN1_RX:9 USB_DM:A EVENTOUT:F
PA12 TIM1_ETR:1 LPUART1_DE/LPUART1_RTS:3 I2S2_CK/SPI2_SCK:5 UART4_TX:6 USART1_DE/USART1_RTS:7 SAI2_FS_B:8 FDCAN1_TX:9 USB_DP:A EVENTOUT:F
PA13 JTMS/SWDIO:0 EVENTOUT:F
PA14 JTCK/SWCLK:0 EVENTOUT:F
PA15 JTDI:0 TIM2_CH1:1 LPTIM3_IN2:2 CEC:4 I2S1_WS/SPI1_NSS:5 I2S3_WS/SPI3_NSS:6 SPI6_NSS:7 UART4_DE/UART4_RTS:8 UART7_TX:B FMC_NBL1:C DCMI_D11/PSSI_D11:D TIM2_ETR:E EVENTOUT:F
PB0  TIM1_CH2N:1 TIM3_CH3:2 TIM8_CH2N:3 OCTOSPI1_IO1:6 USART11_CK:7 UART4_CTS:8 ETH_RXD2:B LPTIM3_CH1:E EVENTOUT:F
PB1  TIM1_CH3N:1 TIM3_CH4:2 TIM8_CH3N:3 OCTOSPI1_IO0:6 ETH_RXD3:B LPTIM3_CH2:E EVENTOUT:F
PB2  RTC_OUT2:0 SAI1_D1:2 TIM8_CH4N:3 SPI1_RDY:4 LPTIM1_CH1:5 SAI1_SD_A:6 I2S3_SDO/SPI3_MOSI:7 OCTOSPI1_CLK:9 OCTOSPI1_DQS:A SDMMC1_CMD:C LPTIM5_ETR:D EVENTOUT:F
PB3  JTDO/SWO:0 TIM2_CH2:1 I2C2_SDA:4 I2S1_CK/SPI1_SCK:5 I2S3_CK/SPI3_SCK:6 UART12_CTS:7 SPI6_SCK:8 CRS_SYNC:A UART7_RX:B LPTIM6_ETR:E EVENTOUT:F
PB4  NJTRST:0 TIM16_BKIN:1 TIM3_CH1:2 OCTOSPI1_CLK:3 LPTIM1_CH2:4 I2S1_SDI/SPI1_MISO:5 I2S3_SDI/SPI3_MISO:6 I2S2_WS/SPI2_NSS:7 SPI6_MISO:8 UART7_TX:B DCMI_D7/PSSI_D7:D EVENTOUT:F
PB5  TIM17_BKIN:1 TIM3_CH2:2 OCTOSPI1_NCLK:3 I2C1_SMBA:4 I2S1_SDO/SPI1_MOSI:5 I2C4_SMBA:6 I2S3_SDO/SPI3_MOSI:7 SPI6_MOSI:8 FDCAN2_RX:9 ETH_PPS_OUT:B FMC_SDCKE1:C DCMI_D10/PSSI_D10:D UART5_RX:E EVENTOUT:F
PB6  TIM16_CH1N:1 TIM4_CH1:2 I3C1_SCL:3 I2C1_SCL:4 CEC:5 I2C4_SCL:6 USART1_TX:7 LPUART1_TX:8 FDCAN2_TX:9 OCTOSPI1_NCS:A FMC_SDNE1:C DCMI_D5/PSSI_D5:D UART5_TX:E EVENTOUT:F
PB7  TIM17_CH1N:1 TIM4_CH2:2 I3C1_SDA:3 I2C1_SDA:4 I2C4_SDA:6 USART1_RX:7 LPUART1_RX:8 FDCAN1_TX:9 FMC_NL:C DCMI_VSYNC/PSSI_RDY:D EVENTOUT:F
PB8  TIM16_CH1:1 TIM4_CH3:2 I3C1_SCL:3 I2C1_SCL:4 SPI4_RDY:5 I2C4_SCL:6 SDMMC1_CKIN:7 UART4_RX:8 FDCAN1_RX:9 ETH_TXD3:B SDMMC1_D4:C DCMI_D6/PSSI_D6:D EVENTOUT:F
PB9  TIM17_CH1:1 TIM4_CH4:2 I3C1_SDA:3 I2C1_SDA:4 I2S2_WS/SPI2_NSS:5 I2C4_SDA:6 SDMMC1_CDIR:7 UART4_TX:8 FDCAN1_TX:9 SDMMC1_D5:C DCMI_D7/PSSI_D7:D EVENTOUT:F
PB10 TIM2_CH3:1 LPTIM3_CH1:2 LPTIM2_IN1:3 I2C2_SCL:4 I2S2_CK/SPI2_SCK:5 USART3_TX:7 OCTOSPI1_NCS:9 ETH_RX_ER:B EVENTOUT:F
PB12 TIM1_BKIN:1 OCTOSPI1_NCLK:3 I2C2_SDA:4 I2S2_WS/SPI2_NSS:5 UCPD1_FRSTX:6 USART3_CK:7 FDCAN2_RX:9 ETH_TXD0:B UART5_RX:E EVENTOUT:F
PB13 TIM1_CH1N:1 LPTIM3_IN1:2 LPTIM2_CH1:3 I2C2_SMBA:4 I2S2_CK/SPI2_SCK:5 USART3_CTS/USART3_NSS:7 FDCAN2_TX:9 SDMMC1_D0:C UART5_TX:E EVENTOUT:F
PB14 TIM1_CH2N:1 TIM12_CH1:2 TIM8_CH2N:3 USART1_TX:4 I2S2_SDI/SPI2_MISO:5 USART3_DE/USART3_RTS:7 UART4_DE/UART4_RTS:8 LPTIM3_ETR:E EVENTOUT:F
PB15 RTC_REFIN:0 TIM1_CH3N:1 TIM12_CH2:2 TIM8_CH3N:3 USART1_RX:4 I2S2_SDO/SPI2_MOSI:5 USART11_CTS/USART11_NSS:7 UART4_CTS:8 OCTOSPI1_CLK:A ETH_TXD1:B DCMI_D2/PSSI_D2:D UART5_RX:E EVENTOUT:F
PC0  TIM16_BKIN:1 SAI1_MCLK_A:6 SPI2_RDY:7 SAI2_FS_B:8 FMC_A25:9 OCTOSPI1_IO7:A FMC_SDNWE:C EVENTOUT:F
PC1  TRACED0:0 SAI1_D1:2 I2S2_SDO/SPI2_MOSI:5 SAI1_SD_A:6 USART11_DE/USART11_RTS:7 SAI2_SD_A:8 OCTOSPI1_IO4:A ETH_MDC:B EVENTOUT:F
PC2  PWR_CSLEEP:0 TIM17_CH1:1 TIM4_CH4:2 I2S2_SDI/SPI2_MISO:5 OCTOSPI1_IO5:6 OCTOSPI1_IO2:9 ETH_TXD2:B FMC_SDNE0:C EVENTOUT:F
PC3  PWR_CSTOP:0 SAI1_D3:2 LPTIM3_CH1:3 I2S2_SDO/SPI2_MOSI:5 OCTOSPI1_IO6:6 OCTOSPI1_IO0:9 ETH_TX_CLK:B FMC_SDCKE0:C EVENTOUT:F
PC4  TIM2_CH4:1 SAI1_CK1:2 LPTIM2_ETR:3 I2S1_MCK:5 USART3_RX:7 ETH_RXD0:B FMC_SDNE0:C EVENTOUT:F
PC5  TIM1_CH4N:1 SAI1_D3:2 PSSI_D15:4 SAI1_FS_A:6 UART12_DE/UART12_RTS:7 OCTOSPI1_DQS:A ETH_RXD1:B FMC_SDCKE0:C EVENTOUT:F
PC6  TIM3_CH1:2 TIM8_CH1:3 I2S2_MCK:5 SAI1_SCK_A:6 USART6_TX:7 SDMMC1_D0DIR:8 FMC_NWAIT:9 OCTOSPI1_IO5:B SDMMC1_D6:C DCMI_D0/PSSI_D0:D EVENTOUT:F
PC7  TRGIO:0 TIM3_CH2:2 TIM8_CH2:3 I2S3_MCK:6 USART6_RX:7 SDMMC1_D123DIR:8 FMC_NE1:9 OCTOSPI1_IO6:B SDMMC1_D7:C DCMI_D1/PSSI_D1:D EVENTOUT:F
PC8  TRACED1:0 TIM3_CH3:2 TIM8_CH3:3 USART6_CK:7 UART5_DE/UART5_RTS:8 FMC_NCE/FMC_NE2:9 FMC_INT:A FMC_ALE:B SDMMC1_D0:C DCMI_D2/PSSI_D2:D EVENTOUT:F
PC9  RCC_MCO_2:0 TIM3_CH4:2 TIM8_CH4:3 I2C3_SDA:4 AUDIOCLK:5 UART5_CTS:8 OCTOSPI1_IO0:9 FMC_CLE:B SDMMC1_D1:C DCMI_D3/PSSI_D3:D EVENTOUT:F
PC10 LPTIM3_ETR:2 I2S3_CK/SPI3_SCK:6 USART3_TX:7 UART4_TX:8 OCTOSPI1_IO1:9 ETH_TXD0:B SDMMC1_D2:C DCMI_D8/PSSI_D8:D EVENTOUT:F
PC11 LPTIM3_IN1:2 I2S3_SDI/SPI3_MISO:6 USART3_RX:7 UART4_RX:8 OCTOSPI1_NCS:9 SDMMC1_D3:C DCMI_D4/PSSI_D4:D EVENTOUT:F
PC12 TRACED3:0 TIM15_CH1:2 SPI6_SCK:5 I2S3_SDO/SPI3_MOSI:6 USART3_CK:7 UART5_TX:8 SDMMC1_CK:C DCMI_D9/PSSI_D9:D EVENTOUT:F
PC13 EVENTOUT:F
PC14 EVENTOUT:F
PC15 EVENTOUT:F
PD0  TIM8_CH4N:3 UART4_RX:8 FDCAN1_RX:9 UART9_CTS:B FMC_D2/FMC_DA2:C EVENTOUT:F
PD1  UART4_TX:8 FDCAN1_TX:9 FMC_D3/FMC_DA3:C EVENTOUT:F
PD2  TRACED2:0 TIM3_ETR:2 TIM15_BKIN:4 UART5_RX:8 SDMMC1_CMD:C DCMI_D11/PSSI_D11:D LPTIM4_ETR:E EVENTOUT:F
PD3  I2S2_CK/SPI2_SCK:5 USART2_CTS/USART2_NSS:7 FMC_CLK:C DCMI_D5/PSSI_D5:D EVENTOUT:F
PD4  USART2_DE/USART2_RTS:7 OCTOSPI1_IO4:A FMC_NOE:C EVENTOUT:F
PD5  TIM1_CH4N:1 SPI2_RDY:5 USART2_TX:7 FDCAN1_TX:9 OCTOSPI1_IO5:A FMC_NWE:C EVENTOUT:F
PD6  SAI1_D1:2 I2S3_SDO/SPI3_MOSI:5 SAI1_SD_A:6 USART2_RX:7 OCTOSPI1_IO6:A FMC_NWAIT:C DCMI_D10/PSSI_D10:D EVENTOUT:F
PD7  I2S1_SDO/SPI1_MOSI:5 USART2_CK:7 OCTOSPI1_IO7:A FMC_NCE/FMC_NE1:C LPTIM4_OUT:E EVENTOUT:F
PD8  USART3_TX:7 FMC_D13/FMC_DA13:C EVENTOUT:F
PD9  USART3_RX:7 FDCAN2_RX:9 FMC_D14/FMC_DA14:C EVENTOUT:F
PD10 LPTIM2_CH2:3 USART3_CK:7 FMC_D15/FMC_DA15:C EVENTOUT:F
PD11 SAI1_CK1:2 LPTIM2_IN2:3 I2C4_SMBA:4 USART3_CTS/USART3_NSS:7 UART4_RX:8 OCTOSPI1_IO0:9 SAI2_SD_A:A FMC_A16/FMC_CLE:C EVENTOUT:F
PD12 LPTIM1_IN1:1 TIM4_CH1:2 LPTIM2_IN1:3 I2C4_SCL:4 I3C1_SCL:5 SAI1_D1:6 USART3_DE/USART3_RTS:7 UART4_TX:8 OCTOSPI1_IO1:9 SAI2_FS_A:A FMC_A17/FMC_ALE:C DCMI_D12/PSSI_D12:D EVENTOUT:F
PD13 LPTIM1_CH1:1 TIM4_CH2:2 LPTIM2_CH1:3 I2C4_SDA:4 I3C1_SDA:5 OCTOSPI1_IO3:9 SAI2_SCK_A:A UART9_DE/UART9_RTS:B FMC_A18:C DCMI_D13/PSSI_D13:D LPTIM4_IN1:E EVENTOUT:F
PD14 TIM4_CH3:2 UART8_CTS:8 UART9_RX:B FMC_D0/FMC_DA0:C EVENTOUT:F
PD15 TIM4_CH4:2 UART8_DE/UART8_RTS:8 UART9_TX:B FMC_D1/FMC_DA1:C EVENTOUT:F
PE0  LPTIM1_ETR:1 TIM4_ETR:2 LPTIM2_CH2:3 LPTIM2_ETR:4 SPI3_RDY:6 UART8_RX:8 FDCAN1_RX:9 SAI2_MCLK_A:A FMC_NBL0:C DCMI_D2/PSSI_D2:D EVENTOUT:F
PE2  TRACECLK:0 LPTIM1_IN2:1 SAI1_CK1:2 SPI4_SCK:5 SAI1_MCLK_A:6 USART10_RX:7 UART8_TX:8 OCTOSPI1_IO2:9 ETH_TXD3:B FMC_A23:C DCMI_D3/PSSI_D3:D EVENTOUT:F
PE3  TRACED0:0 TIM15_BKIN:4 SAI1_SD_B:6 USART10_TX:7 FMC_A19:C EVENTOUT:F
PE4  TRACED1:0 SAI1_D2:2 TIM15_CH1N:4 SPI4_NSS:5 SAI1_FS_A:6 FMC_A20:C DCMI_D4/PSSI_D4:D EVENTOUT:F
PE5  TRACED2:0 SAI1_CK2:2 TIM15_CH1:4 SPI4_MISO:5 SAI1_SCK_A:6 FMC_A21:C DCMI_D6/PSSI_D6:D EVENTOUT:F
PE6  TRACED3:0 TIM1_BKIN2:1 SAI1_D1:2 TIM15_CH2:4 SPI4_MOSI:5 SAI1_SD_A:6 SAI2_MCLK_B:A FMC_A22:C DCMI_D7/PSSI_D7:D EVENTOUT:F
PE7  TIM1_ETR:1 UART12_DE/UART12_RTS:6 UART7_RX:7 OCTOSPI1_IO4:A FMC_D4/FMC_DA4:C EVENTOUT:F
PE8  TIM1_CH1N:1 UART12_CTS:6 UART7_TX:7 OCTOSPI1_IO5:A FMC_D5/FMC_DA5:C EVENTOUT:F
PE9  TIM1_CH1:1 UART12_RX:6 UART7_DE/UART7_RTS:7 OCTOSPI1_IO6:A FMC_D6/FMC_DA6:C EVENTOUT:F
PE10 TIM1_CH2N:1 UART12_TX:6 UART7_CTS:7 OCTOSPI1_IO7:A FMC_D7/FMC_DA7:C EVENTOUT:F
PE11 TIM1_CH2:1 SPI1_RDY:4 SPI4_NSS:5 OCTOSPI1_NCS:6 SAI2_SD_B:A FMC_D8/FMC_DA8:C EVENTOUT:F
PE12 TIM1_CH3N:1 SPI4_SCK:5 SAI2_SCK_B:A FMC_D9/FMC_DA9:C EVENTOUT:F
PE13 TIM1_CH3:1 SPI4_MISO:5 SAI2_FS_B:A FMC_D10/FMC_DA10:C EVENTOUT:F
PE14 TIM1_CH4:1 SPI4_MOSI:5 SAI2_MCLK_B:A FMC_D11/FMC_DA11:C EVENTOUT:F
PE15 TIM1_BKIN:1 TIM1_CH4N:3 USART10_CK:7 FMC_D12/FMC_DA12:C EVENTOUT:F
PH0  EVENTOUT:F
PH1  EVENTOUT:F
Это преобразованный в другой формат H563Vx.csv, который экспортится в кубе. Потом при инициализации любой периферии все пины проверяются на этапе компиляции. Например, передали PB13 для SPI2 в качества SCK, класс SPI берет свое имя "SPI2", добавляет "_SCK", ищет в тексте сначала строку начинающуюся на "PB13", потом ищет в ней "SPI2_SCK", если находит, то возвращает AF, если не находит, то будет ошибка компиляции:

Код: Выделить всё

constexpr auto val = find<Pin, Str>();
static_assert(val != AltFunc{ -1 }, ctformat("{} is not valid {} pin!", Pin::toStr(), Str));
Такие достаточно большие текстовые файлы для каждого мк, естественно, проще в виде отдельных файлов хранить...
Rapra
Грызет канифоль
Сообщения: 259
Зарегистрирован: Пн фев 16, 2026 17:30:02

Re: Stm32 с чего начать изучение...

Сообщение Rapra »

Если использовали конфигуратор CubeMX, то дополнительные проверки не требуются, поскольку в конфигураторе уже всё проверено.
Ответить

Вернуться в «ARM»