打印
[应用相关]

STM32HAL库和STC51同时操作多个IO口

[复制链接]
511|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nawu|  楼主 | 2023-9-19 12:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32同时将PC13,PC14,PC15拉低/拉高。
根据:

#define GPIO_PIN_13                ((uint16_t)0x2000U)  /* Pin 13 selected   */
#define GPIO_PIN_14                ((uint16_t)0x4000U)  /* Pin 14 selected   */
#define GPIO_PIN_15                ((uint16_t)0x8000U)  /* Pin 15 selected   */


void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
{
  /* Check the parameters */
  assert_param(IS_GPIO_PIN(GPIO_Pin));
  assert_param(IS_GPIO_PIN_ACTION(PinState));

  if(PinState != GPIO_PIN_RESET)
  {
    GPIOx->BSRR = (uint32_t)GPIO_Pin;
  }
  else
  {
    GPIOx->BRR = (uint32_t)GPIO_Pin;
  }
}


所以可以写成;

GPIOC -> BRR = GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;//同时置零
GPIOC -> BSRR = GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;//同时置一


优化一下:

GPIOC -> BRR = (0x2000 & 0x4000 & 0x8000) & ((7)<<13);  //7 = 4+2+1 相当于PC13,PC14,PC15 同时执行拉低。
GPIOC -> BSRR = (0x2000 & 0x4000 & 0x8000) & ((7)<<13);  //7 = 4+2+1 相当于PC13,PC14,PC15 同时执行拉高。


再次优化一下:

GPIOC -> BRR = 0xE000 & ((7)<<13);
GPIOC ->BSRR = 0xE000 & ((7)<<13);


STC51同时将P3.5,P3.6,P3.7拉低/拉高。

p3 &= (~0xe0); //将P3.5,P3.6,P3.7置零
p3 |= ((~7)<<5); //将P3.5,P3.6,P3.7置一
p3 |= ((~3)<<6); //将P3.6,P3.7置一
p3 |= (~255); //将P3口全部置一
————————————————
版权声明:本文为CSDN博主「明东(Maxwell)」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Maxwell_321/article/details/129043255

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

3307

帖子

3

粉丝