1:通过函数读取寄存器状态
利用HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)读取IO口状态
HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)改变IO口状态
2:通过寄存器操作
#define GPIO_Pin_5 ((uint16_t)0x0020) /*!< Pin 5 selected */
GPIOB->ODR ^= GPIO_Pin_5;
3:通过HAL_GPIO_TogglePin函数
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
uint32_t odr;
/* Check the parameters */
assert_param(IS_GPIO_PIN(GPIO_Pin));
/* get current Output Data Register value */
odr = GPIOx->ODR;
/* Set selected pins that were at low level, and reset ones that were high */
GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin);
}
// 将PA5取反,如果PA5是高电平,则会变为低电平;如果PA5是低电平,则会变为高电平
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
说到底所有方法到底都是操作寄存器,使用函数只是为了不用记那么多寄存器,只要知道函数怎样用就不用管底层怎么操作。
作者: 莫墨, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-3907801.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论