打印
[学习笔记]

杰发AC78013 GPIO端口问题

[复制链接]
3999|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在杰发提供的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.
知道原因的,指教一下哦。

使用特权

评论回复

相关帖子

沙发
zhaolei2612|  楼主 | 2021-4-17 07:18 | 只看该作者
大神来瞅瞅呀。

使用特权

评论回复
板凳
宇智波大表哥| | 2021-4-18 14:56 | 只看该作者
我在使用780系列的SPI模块也发现问题

使用特权

评论回复
地板
lidi911| | 2021-4-18 15:42 | 只看该作者
一个是复位一个是置位

使用特权

评论回复
5
嵌入小菜菜| | 2021-4-18 21:46 | 只看该作者
感谢楼主的分享,不错的。感谢。

使用特权

评论回复
6
zhaolei2612|  楼主 | 2021-7-1 08:56 | 只看该作者


找到描述了,GPIOC_BSRR是通过APB地址访问的,GPIOC->BRR是通过AHB地址访问的。

使用特权

评论回复
7
sparrow054| | 2021-7-1 12:00 | 只看该作者
直接用库函数

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

97

帖子

0

粉丝