stm32位操作函数
昨天看到了普中科技的数码管操作函数,对stm32的位操作函数,自己也不太懂,就查了一下,现在整理学习笔记如下:
先来说一下stm32 GPIO的寄存器,每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。
主要学习到了stm32操作函数的两个位操作函数,现在我们用寄存器和库函数来分别进行说明,库函数是这两个函数,GPIO_ResetBits和GPIO_SetBits,GPIO_WriteBit
而对寄存器的操作有两个寄存器 GPIOB->BSRR和GPIOB->BRR :
// GPIOB->BSRR = 0x01就是把GPIOB port 0升为高电平
// GPIOB->BRR = 0x01就是把GPIOB port 0降为低电平
// GPIOB->BSRR = 0x02就是把GPIOB port 1升为高电平
// GPIOB->BRR = 0x02就是把GPIOB port 1降为低电平
// GPIOB->BSRR = 0x04就是把GPIOB port 2升为高电平
// GPIOB->BRR = 0x04就是把GPIOB port 2降为低电平
// GPIOB->BSRR = 0x08就是把GPIOB port 3升为高电平
// GPIOB->BRR = 0x08就是把GPIOB port 3降为低电平
但是要注意这两个寄存器一个是32位的,一个是16位的。GPIOB->BSRR高16位用来清0,使用低16位用来置1使用,而BRR就是用来置0的。
而我们的库函数实际上就是对寄存器进行操作的。
库函数的源代码如下所示:
这两个函数,看数据手册 GPIOx->BSRR 高16位也是写 1:清除对应的ODRy位为0 ,那么和 GPIO_ResetBits ()实现的功能是一样的。
GPIO_SetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);