GPIOx_CRL和GPIOx_CRH:这两组端口配置寄存器用于设置引脚的配置模式,包括输入、输出、上拉、下拉等。GPIOx_IDR和GPIOx_ODR:输入数据寄存器和输出数据寄存器分别用于读取和设置引脚的电平状态。GPIOx_BRR和GPIOx_BSRR:位清除和位设置/清除寄存器提供了对引脚电平的快速操作能力。GPIOx_LCKR:配置锁定寄存器用于保护...
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); GPIOx :一个指向 GPIO_TypeDef 类型结构体的指针,表示要被初始化的GPIO端口(如GPIOA、GPIOB等)。 GPIO_InitStruct:一个指向 GPIO_InitTypeDef类型结构体的指针,表示要应用于指定GPIO端口的配置信息。该结构体成员变量有GPIO引脚号,GPIO...
__IO uint32_t BSRR; __IO uint32_t BRR; __IO uint32_t LCKR; } GPIO_TypeDef;回到GPIO_TypeDef 这段代码,这个代码用 typedef 关键字声明了名为 GPIO_TypeDef 的结构体类型,结构体内又定义了 7 个 __IO uint32_t 类型的变量。这些变量每个都为 32 位,也就是每个变量占内存空间 4 个字节。
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //置位(GPIOx,GPIO_Pin) void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //复位(GPIOx,GPIO_Pin) void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal); //对某个位写(GPIOx,GPIO_Pin...
GPIO对应的寄存器个数为7个,包括2 个 32位端口配置寄存器(CRL 和 CRH)、2 个 32 位端口数据寄存器(IDR 和 ODR)、1 个 32 位端口置位/复位寄存器(BSRR)、1 个 16 位端口复位寄存器(BRR)、1 个 32 位端口锁定寄存器 (LCKR)。下面将一一介绍。
32位置位/复位寄存器:GPIOx_BSRR 16位复位寄存器:GPIOx_BRR 32位锁定寄存器:GPIOx_LCKR GPIOx_CRL :端口配置低寄存器 (控制P0--P7端口) 一个IO位占4个位(4*8=32)P0--P7刚好32位,例如:P0端口:0-1控制输入模式或者输出模式及输出速度,2-3控制输入模式或者输出模式的具体工作方式 ...
意法半导体给的答案就是用BSRR去改变管脚状态的时候是原子操作置位/复位,没有被中断打断的风险。也就...
typedef struct { uint32_t GPIO_Pin; // GPIO引脚编号,可以是单个引脚或者多个引脚的组合,如 GPIO_Pin_0 | GPIO_Pin_1 GPIOMode_TypeDef Mode; // GPIO引脚的工作模式,包括输入模式、输出模式、复用模式等 GPIOSpeed_TypeDef Speed; // GPIO引脚的输出速率,通常有低速、中速、高速可选 ...
1.1.解析 GPIO_TypeDef* GPIOx 代码如下: typedef struct { __IO uint32_t CRL; __IO uint32_t CRH; __IO uint32_t IDR; __IO uint32_t ODR; __IO uint32_t BSRR; __IO uint32_t BRR; __IO uint32_t LCKR; } GPIO_TypeDef; ...
3、输出数据寄存器:前面我们知道双了MOS管结构电路的输入信号,是由GPIO输出数据寄存器GPIOx_ODR提供的,因此我们可以通过修改输出数据寄存器的值,就可以修改GPIO引脚的输出电平。而置位/复位寄存器GPIOx_BSRR可以通过修改输出数据寄存器的值,从而影响电路的输出。