Регистры STM32F1
Регистры периферии семейства STM32F1 — STM32F101, F102, F103, F105 и F107: адреса блоков, битовые поля с назначением, значения после сброса по RM0008 и конструктор значения с кодом на C.
Данные о регистрах взяты из заголовков CMSIS, которые ST выпускает в пакете STM32CubeF1 под лицензией Apache-2.0: структуры периферии со смещениями регистров, адреса экземпляров и макросы битовых полей. Заголовков в семействе двенадцать — по линейкам и объёму флеш-памяти, — и одна страница блока объединяет их все: поле, которого нет у части микроконтроллеров, отмечено.
Значения после сброса, назначение полей и смысл их значений — по справочному руководству RM0008. Имена в коде совпадают с CMSIS: регистр CRH порта C в программе — GPIOC->CRH, его поле MODE13 — макрос GPIO_CRH_MODE13.
Блоки периферии
- RCC — сброс и тактированиеRCC_CR, RCC_CFGR, RCC_CIR, RCC_APB2RSTR, RCC_APB1RSTR, RCC_AHBENR, RCC_APB2ENR, RCC_APB1ENR, RCC_BDCR, RCC_CSR, RCC_AHBRSTR, RCC_CFGR2
- GPIO — порты ввода-выводаGPIOx_CRL, GPIOx_CRH, GPIOx_IDR, GPIOx_ODR, GPIOx_BSRR, GPIOx_BRR, GPIOx_LCKR
- AFIO — переназначение функций и выбор входов EXTIAFIO_EVCR, AFIO_MAPR, AFIO_EXTICR1, AFIO_EXTICR2, AFIO_EXTICR3, AFIO_EXTICR4, AFIO_MAPR2
- EXTI — контроллер внешних прерываний и событийEXTI_IMR, EXTI_EMR, EXTI_RTSR, EXTI_FTSR, EXTI_SWIER, EXTI_PR
- USART — последовательные порты USART и UARTUSART_SR, USART_DR, USART_BRR, USART_CR1, USART_CR2, USART_CR3, USART_GTPR
- SPI — интерфейсы SPI и I2SSPI_CR1, SPI_CR2, SPI_SR, SPI_DR, SPI_CRCPR, SPI_RXCRCR, SPI_TXCRCR, SPI_I2SCFGR, SPI_I2SPR
- I2C — интерфейс I2CI2C_CR1, I2C_CR2, I2C_OAR1, I2C_OAR2, I2C_DR, I2C_SR1, I2C_SR2, I2C_CCR, I2C_TRISE
- TIM — таймерыTIMx_CR1, TIMx_CR2, TIMx_SMCR, TIMx_DIER, TIMx_SR, TIMx_EGR, TIMx_CCMR1, TIMx_CCMR2, TIMx_CCER, TIMx_CNT, TIMx_PSC, TIMx_ARR, TIMx_RCR, TIMx_CCR1, TIMx_CCR2, TIMx_CCR3, TIMx_CCR4, TIMx_BDTR, TIMx_DCR, TIMx_DMAR
- DMA — контроллеры прямого доступа к памятиDMA_ISR, DMA_IFCR, DMA_CCR, DMA_CNDTR, DMA_CPAR, DMA_CMAR
- ADC — аналого-цифровые преобразователиADC_SR, ADC_CR1, ADC_CR2, ADC_SMPR1, ADC_SMPR2, ADC_JOFR1, ADC_JOFR2, ADC_JOFR3, ADC_JOFR4, ADC_HTR, ADC_LTR, ADC_SQR1, ADC_SQR2, ADC_SQR3, ADC_JSQR, ADC_JDR1, ADC_JDR2, ADC_JDR3, ADC_JDR4, ADC_DR
- IWDG — независимый сторожевой таймерIWDG_KR, IWDG_PR, IWDG_RLR, IWDG_SR
- WWDG — оконный сторожевой таймерWWDG_CR, WWDG_CFR, WWDG_SR
- CRC — блок вычисления CRCCRC_DR, CRC_IDR, CRC_CR
- DBGMCU — регистры отладкиDBGMCU_IDCODE, DBGMCU_CR
Заголовки CMSIS и микроконтроллеры
| Заголовок | Микроконтроллеры |
|---|---|
| stm32f101x6.h | STM32F101C4, STM32F101C6, STM32F101R4, STM32F101R6, STM32F101T4, STM32F101T6 |
| stm32f101xb.h | STM32F101C8, STM32F101CB, STM32F101R8, STM32F101RB, STM32F101T8, STM32F101TB, STM32F101V8, STM32F101VB |
| stm32f101xe.h | STM32F101RC, STM32F101RD, STM32F101RE, STM32F101VC, STM32F101VD, STM32F101VE, STM32F101ZC, STM32F101ZD, STM32F101ZE |
| stm32f101xg.h | STM32F101RF, STM32F101RG, STM32F101VF, STM32F101VG, STM32F101ZF, STM32F101ZG |
| stm32f102x6.h | STM32F102C4, STM32F102C6, STM32F102R4, STM32F102R6 |
| stm32f102xb.h | STM32F102C8, STM32F102CB, STM32F102R8, STM32F102RB |
| stm32f103x6.h | STM32F103C4, STM32F103C6, STM32F103R4, STM32F103R6, STM32F103T4, STM32F103T6 |
| stm32f103xb.h | STM32F103C8, STM32F103CB, STM32F103R8, STM32F103RB, STM32F103T8, STM32F103TB, STM32F103V8, STM32F103VB |
| stm32f103xe.h | STM32F103RC, STM32F103RD, STM32F103RE, STM32F103VC, STM32F103VD, STM32F103VE, STM32F103ZC, STM32F103ZD, STM32F103ZE |
| stm32f103xg.h | STM32F103RF, STM32F103RG, STM32F103VF, STM32F103VG, STM32F103ZF, STM32F103ZG |
| stm32f105xc.h | STM32F105R8, STM32F105RB, STM32F105RC, STM32F105V8, STM32F105VB, STM32F105VC |
| stm32f107xc.h | STM32F107RB, STM32F107RC, STM32F107VB, STM32F107VC |
Карта микроконтроллеров семейства с распиновками — на странице STM32F1.
Частые вопросы
Где взять файл stm32f103xb.h?
Он входит в пакет STM32CubeF1 (папка Drivers/CMSIS/Device/ST/STM32F1xx/Include) и в репозиторий STMicroelectronics/cmsis-device-f1 на GitHub. Для STM32F103C8 и CB (плата Blue Pill) нужен именно xb — заголовок для 64 и 128 КБ флеш-памяти.
Почему регистры не меняются после записи?
Чаще всего не включено тактирование блока в RCC: у STM32F1 порты, AFIO, USART1, SPI1 и АЦП тактируются через RCC_APB2ENR, остальные периферийные блоки — через RCC_APB1ENR и RCC_AHBENR. Пока бит не установлен, запись в регистры блока не действует.
Источники
- STMicroelectronics. RM0008: Reference manual (Rev 21) — описания регистров, назначение полей и значения после сброса
- STMicroelectronics. cmsis-device-f1 v4.3.5: заголовки CMSIS stm32f101x6.h, stm32f101xb.h, stm32f101xe.h, stm32f101xg.h, stm32f102x6.h, stm32f102xb.h, stm32f103x6.h, stm32f103xb.h, stm32f103xe.h, stm32f103xg.h, stm32f105xc.h, stm32f107xc.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0
Нашли ошибку в регистрах?