在杰发提供的DFP库中,IO端口的置位void GPIO_SetPinBit(GPIO_Type *GPIOx, GPIO_PinType GPIO_Pin)和复位函数void GPIO_ResetPinBit(GPIO_Type *GPIOx, GPIO_PinType GPIO_Pin)实现的方式有差别,
#define GPIO_SetGPIOxBRRx(GPIOx, GPIO_Pin) SET_BIT32((GPIOx)->BRR, GPIO_BRR_BR_Msk(GPIO_Pin))
void GPIO_SetPinBit(GPIO_Type *GPIOx, GPIO_PinType GPIO_Pin)
{
DEVICE_ASSERT(IS_GPIO_PERIPH(GPIOx));
DEVICE_ASSERT(IS_GPIO_PIN(GPIO_Pin));
switch ((uint32_t)GPIOx)
{
case GPIOA_BASE:
SET_BIT32(GPIOA_BSRR, GPIO_BSRR_BS_Msk(GPIO_Pin));
break;
case GPIOB_BASE:
SET_BIT32(GPIOB_BSRR, GPIO_BSRR_BS_Msk(GPIO_Pin));
break;
case GPIOC_BASE:
SET_BIT32(GPIOC_BSRR, GPIO_BSRR_BS_Msk(GPIO_Pin));
break;
default:
break;
}
}
void GPIO_ResetPinBit(GPIO_Type *GPIOx, GPIO_PinType GPIO_Pin)
{
DEVICE_ASSERT(IS_GPIO_PERIPH(GPIOx));
DEVICE_ASSERT(IS_GPIO_PIN(GPIO_Pin));
GPIO_SetGPIOxBRRx(GPIOx, GPIO_Pin);
}
即 SET_BIT32(GPIOA_BSRR, GPIO_BSRR_BS_Msk(GPIO_Pin));和SET_BIT32((GPIOx)->BRR, GPIO_BRR_BR_Msk(GPIO_Pin))。我在项目中使用SET_BIT32((GPIOC)->BSRR, 0xff)来整体置位PC口的PC0-PC7,结果是不正确的,必须和杰发库函数一致,用GPIOC_BSRR代替GPIOC->BSRR.
知道原因的,指教一下哦。 |