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
|