在杰发提供的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.
知道原因的,指教一下哦。
|