发新帖我要提问
12
返回列表
打印

研究GD32 GPIO外设库是怎么写的

[复制链接]
楼主: gaoke231
手机看帖
扫描二维码
随时随地手机跟帖
21
gaoke231|  楼主 | 2021-1-7 21:32 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
输出的速度是如何配置的?
库根据不同输出速度定义了不同的宏,使用和mode混合的方式将速度同时配置到GPIO_CTL寄存器中,完成不同的输出速度的配置。
#define GPIO_OSPEED_10MHZ                ((uint8_t)0x01U)          
#define GPIO_OSPEED_2MHZ                 ((uint8_t)0x02U)         
#define GPIO_OSPEED_50MHZ                ((uint8_t)0x03U)
if(((uint32_t)0x00U) != ((uint32_t)mode & ((uint32_t)0x10U)))
{
        /* output mode max speed:10MHz,2MHz,50MHz */
        temp_mode |= (uint32_t)speed;
}


使用特权

评论回复
22
gaoke231|  楼主 | 2021-1-7 21:33 | 只看该作者
gpio_bit_set gpio_bit_reset如何实现?
到这里,我们已经分许过GPIO模式的具体配置流程,相信大家已经对GPIO_CTL寄存器有了深入的了解,下面我们再看gpio_bit_set和gpio_bit_reset这两个函数库是如何实现的?
其实很简单只是使用GPIO_BC和GPIO_BOP宏即可操作端口位操作寄存器 GPIOx_BOP和位清除寄存器 GPIOx_BC,库的实现方法如下:
#define GPIO_BOP(gpiox)            REG32((gpiox) + 0x10U)   
#define GPIO_BC(gpiox)             REG32((gpiox) + 0x14U)   
void gpio_bit_set(uint32_t gpio_periph,uint32_t pin)
{
    GPIO_BOP(gpio_periph) = (uint32_t)pin;
}
void gpio_bit_reset(uint32_t gpio_periph,uint32_t pin)
{
    GPIO_BC(gpio_periph) = (uint32_t)pin;
}


使用特权

评论回复
23
gaoke231|  楼主 | 2021-1-7 21:34 | 只看该作者
其它的函数依次分析,结合参考手册和外设库,我相信大家都可以看得明白,这篇**就写到这里吧!

使用特权

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

本版积分规则