一、输出配置
前言:为什么要介绍寄存器来控制I/O口呢,我们在平常时序操作时会用到GPIO,调用库函数去控制不仅显得代码冗长且可能造成响应时间变长,所以了解一下寄存器操作IO口是有必要的。
1.端口输出数据寄存器(GPIOx_ODR) (x=A..E)
此寄存器也可以实现对GPIO的控制,例如想控制GPIOC的13口置0(为第一行)
当然,也能实现对GPIO的读操作,第二行;
GPIOC->ODR = 0xef;
temp = GPIOC->ODR;
可以发现对于ODR寄存器操作必须以16位的形式进行。
对于ODR的读可以发现库函数对于读取输出IO口状态用到了此寄存器:
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
uint8_t bitstatus = 0x00;
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
if ((GPIOx->ODR & GPIO_Pin) != (uint32_t)Bit_RESET)
{
bitstatus = (uint8_t)Bit_SET;
}
else
{
bitstatus = (uint8_t)Bit_RESET;
}
return bitstatus;
}
2.端口位设置/清除寄存器(GPIOx_BSRR) (x=A..E)
BSRR是一个32位的寄存器,为端口的置1或清0寄存器,低16位的作