在ODR代码中可以看到使用了联合体嵌套结构体的方法,将32bit ODR寄存器按bit的方式定义,这样可以直接访问到bit,方便进行精细化操作。 /** 外设基地址*/#define PERIPH_BASE ((uint32_t)0x40000000)/** AHB1的地址*/#define AHB1PERIPH_BASE (PERIPH_BASE + 0x00020000)/** GPIOC的地址*/#define GPIOC_BAS...
GPIOA_BASE是寄存器的基地址 和GPIOA有关的寄存器有很多,比如ODR、IDR。加12是计算出ODR的偏移。也就是GPIOA_ODR寄存器的地址
git clone git@github.com:STM32-base/STM32-base-F1-template.git git clone git@github.com:STM32-base/STM32-base-F2-template.git git clone git@github.com:STM32-base/STM32-base-F3-template.git git clone git@github.com:STM32-base/STM32-base-F4-template.git ...
代码首先定义了 “片上外设”基地址 PERIPH_BASE(0x40000000),接着在 PERIPH_BASE 上加入各个总线的地址偏移,得到 APB1、APB2 等总线的地址 APB1PERIPH_BASE、APB2PERIPH_BASE,在其之上加入外设地址的偏移,得到 GPIOA到GPIOK的外设地址,最后在外设地址上加入各寄存器的地址偏移,得到特定寄存器的地址。一旦有了具体...
1#defineAPB2PERIPH_BASE(PERIPH_BASE+0x00010000) 3)根据GPIOB在总线中的偏移地址0x0C00, 可以计算出GPIOB 外设基地址 1#defineGPIOB_BASE(APB2PERIPH_BASE+0x0C00) 4)进一步封装GPIOB_ODR寄存器地址,GPIOB_ODR寄存器地址为GPIOB_BASE+0x0C 1#defineGPIOB_ODR(GPIOB_BASE+0x0C) ...
其中: bit_word_offset是目标位在存取器位段区中的位置 bit_word_addr 是别名存储器区中字的地址,它映射到某个目标位。 bit_band_base 是别名区的起始地址。 byte_offset 是包含目标位的字节在位段中的序号 bit_number 是目标位所在位置(0-31)
GPIOD_BASE+12) //0x4001140C #define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C #define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C #define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C #define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808 #define GPIO...
when FreeRtos is used.It is strongly recommended to use a HAL timebase source other than the Systic 在stmcubeMX中进行配置的时候,如果使用了freertos系统,生成代码的时候会有如下提示: 其意思就是,当使用了FreeRtos的时候,强烈建议HAL库使用除了Systick以外的时钟源。也就是说当不使用FreeRtos的时候,HAL...
HAL_TIM_Base_Start(&htim1); } int main(void) { HAL_Init(); MX_TIM1_Init(); while (1) { // Main loop } } TM32定时器是一种用于计时和控制输出信号的硬件模块,它具有多种功能和操作模式。STM32定时器的原理是利用一个计数器(Counter)来计数,当计数器的值达到某个阈值时,就会产生一个中断或...
#define GPIOB_ODR *(unsigned int*)(GPIOB_BASE+0x0C) GPIOB_ODR = 0xFF; 1. 2. 3. STM32的外设地址映射 片上外设区分为三条总线,根据外设速度的不同,不同总线挂载着不同的外设,APB1挂载低速外设,APB2 和 AHB 挂载高速外设。相应总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线...