[学习笔记] 杰发AC78013 GPIO端口问题

[复制链接]
4431|6
 楼主| zhaolei2612 发表于 2021-4-11 10:11 | 显示全部楼层 |阅读模式
在杰发提供的DFP库中,IO端口的置位void GPIO_SetPinBit(GPIO_Type *GPIOx, GPIO_PinType GPIO_Pin)和复位函数void GPIO_ResetPinBit(GPIO_Type *GPIOx, GPIO_PinType GPIO_Pin)实现的方式有差别,
  1. #define GPIO_SetGPIOxBRRx(GPIOx, GPIO_Pin) SET_BIT32((GPIOx)->BRR, GPIO_BRR_BR_Msk(GPIO_Pin))
  2. void GPIO_SetPinBit(GPIO_Type *GPIOx, GPIO_PinType GPIO_Pin)
  3. {
  4.     DEVICE_ASSERT(IS_GPIO_PERIPH(GPIOx));
  5.     DEVICE_ASSERT(IS_GPIO_PIN(GPIO_Pin));

  6.     switch ((uint32_t)GPIOx)
  7.     {
  8.         case GPIOA_BASE:
  9.             SET_BIT32(GPIOA_BSRR, GPIO_BSRR_BS_Msk(GPIO_Pin));
  10.         break;

  11.         case GPIOB_BASE:
  12.             SET_BIT32(GPIOB_BSRR, GPIO_BSRR_BS_Msk(GPIO_Pin));
  13.         break;

  14.         case GPIOC_BASE:
  15.             SET_BIT32(GPIOC_BSRR, GPIO_BSRR_BS_Msk(GPIO_Pin));
  16.         break;

  17.         default:
  18.         break;
  19.     }
  20. }

  21. void GPIO_ResetPinBit(GPIO_Type *GPIOx, GPIO_PinType GPIO_Pin)
  22. {
  23.     DEVICE_ASSERT(IS_GPIO_PERIPH(GPIOx));
  24.     DEVICE_ASSERT(IS_GPIO_PIN(GPIO_Pin));

  25.     GPIO_SetGPIOxBRRx(GPIOx, GPIO_Pin);
  26. }



即 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.
知道原因的,指教一下哦。
 楼主| zhaolei2612 发表于 2021-4-17 07:18 | 显示全部楼层
大神来瞅瞅呀。
宇智波大表哥 发表于 2021-4-18 14:56 | 显示全部楼层
我在使用780系列的SPI模块也发现问题
lidi911 发表于 2021-4-18 15:42 | 显示全部楼层
一个是复位一个是置位
嵌入小菜菜 发表于 2021-4-18 21:46 | 显示全部楼层
感谢楼主的分享,不错的。感谢。
 楼主| zhaolei2612 发表于 2021-7-1 08:56 | 显示全部楼层
4541360dd125c7634f.png
7962260dd1202a1f4f.png
找到描述了,GPIOC_BSRR是通过APB地址访问的,GPIOC->BRR是通过AHB地址访问的。
sparrow054 发表于 2021-7-1 12:00 | 显示全部楼层
直接用库函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

97

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部