GD32F103VC关于GPIO复用功能怎么用?

[复制链接]
7637|5
手机看帖
扫描二维码
随时随地手机跟帖
wenwutan|  楼主 | 2021-6-26 09:45 | 显示全部楼层 |阅读模式
GD32F103VC的GPIO有没有Alternate功能?为什么《GD32F103xx数据手册》V2.8里关于管脚定义里有Alternate的内容,比如下图中PC6,可以是I2S1_MCK, TIMER7_CH0, SDIO_D6等功能:
Snipaste_2021-06-26_09-33-50.png

但是在《GD32F10x 用户手册》V2.4,却完全找不到任何关于管脚Alternate功能的说明及配置方法,STM32F103系列是没有这个功能的,相关数据手册里每个GPIO管脚只有一种外设功能,管脚Alternate功能是从STM32F2xx之后才有的功能,而且相关用户手册里都有GPIOx_AFRx寄存器的说明。

我现在想将PC6配置为TIMER7_CH0,应该如何设置?

在网上查找,有人说用gpio_af_set()函数进行设置,但官方提供的驱动库“GD32F10x_Firmware_Library_V2.1.2”,没有这个函数。用户手册上也找不到应该怎么设置,被搞懵了。

使用特权

评论回复
wenwutan|  楼主 | 2021-6-28 11:48 | 显示全部楼层
勤劳的我 发表于 2021-6-26 15:11
同样的道理。若还有疑问可联系我:18166272203

谢谢回复。不过我还是没有完全搞明白,经过这两天的测试,总结一下:
官方例程里有“TIMER1_pwmout”,里面使用了PA1、PA2、PA3作为输出管脚,管脚初始化如下:
    rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_AF);

    /*Configure PA1 PA2 PA3(TIMER1 CH1 CH2 CH3) as alternate function*/
    gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
    gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2);
    gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3);


运行例程可以输出PWM波形。

查看数据手册,PA2同时可以当做USART1_TX管脚使用,在例程文件“gd32f10x_eval.c”中,用同样的方法初始化了管脚:
    /* enable GPIO clock */
    rcu_periph_clock_enable(COM_GPIO_CLK[com_id]);

    /* enable USART clock */
    rcu_periph_clock_enable(COM_CLK[com_id]);

    /* connect port to USARTx_Tx */
    gpio_init(COM_GPIO_PORT[com_id], GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, COM_TX_PIN[com_id]);

    /* connect port to USARTx_Rx */
    gpio_init(COM_GPIO_PORT[com_id], GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, COM_RX_PIN[com_id]);


USART_TX与TIMER1 CH2的管脚配置完全一样,CPU是怎么知道PA2用于USART1还是TIMER1?

我又测试了一下,在例程“TIMER1_pwmout”的语句
    rcu_periph_clock_enable(RCU_TIMER1);
之前或之后加上:
    rcu_periph_clock_enable(RCU_USART1);
则PA2管脚上立刻没有波形输出。

我的理解是:同一个管脚,例如(PA2),定时器功能是排在最后的,如果USART1打开了,则定时器就不能用这个管脚。但是这种情况下,USART一些用不到的管脚,比如RTS、CTS也不能做定时器管脚。不知这样理解对不对。

但是回到我最初的问题,PC6可以配置为I2S1_MCK/TIMER7_CH0/SDIO_D6。查看相关寄存器,I2S1时钟没有打开,TIMER7时钟打开,但PC6上却没有PWM波形输出,不知是什么原因。

使用特权

评论回复
明明很讨厌| | 2021-6-28 13:51 | 显示全部楼层
wenwutan 发表于 2021-6-28 11:48
谢谢回复。不过我还是没有完全搞明白,经过这两天的测试,总结一下:
官方例程里有“TIMER1_pwmout”,里 ...

timer7是高级定时器,需要加上这句话timer_primary_output_config(TIMER7,ENABLE);

使用特权

评论回复
qianyixing25| | 2021-7-13 13:24 | 显示全部楼层
最近也在纠结同样的问题,不知道楼主搞清楚了没有。

使用特权

评论回复
编号10086| | 2021-7-21 17:20 | 显示全部楼层
勤劳的我 发表于 2021-6-26 15:11
同样的道理。若还有疑问可联系我:18166272203

请问你是官方的技术支持吗?我有个SPI使用上的疑问。

使用特权

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

本版积分规则

5

主题

7

帖子

1

粉丝