谢谢回复。不过我还是没有完全搞明白,经过这两天的测试,总结一下:
官方例程里有“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波形输出,不知是什么原因。
|