原创 STM32 GPIO输出取反三种操作方式

2024-8-14 21:48 700 1 1 分类: MCU/ 嵌入式 文集: STM32
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

版权声明:本文为博主原创,未经本人允许,禁止转载!

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
1
关闭 站长推荐上一条 /3 下一条