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

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口全部置一
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值