参考资料:
https://blog.youkuaiyun.com/yangkunhenry/article/details/92795388
当我的板子需要将UART0重映射到PB6,PB7时,按照参考例程加入GPIO重映射处理。但是发现串口发送中断可以进入。但是却没有波形。尝试了各种GPIO模式都不行。
最后还是在网上发现有高手也遇到了这个问题。总结一下应该是外设时钟使能顺序有讲究。要选打开AFIO时钟,然后再打开GPIO时钟,然后再重映射GPIO,然后再使能UART0时钟,最后再配置UART0参数。参考代码如下:
void dw_usart_config(void)
{
rcu_periph_clock_enable(RCU_AF);//Need!!!!
rcu_periph_clock_enable(RCU_GPIOB);
gpio_pin_remap_config(GPIO_USART0_REMAP,ENABLE);
/* enable USART clock */
rcu_periph_clock_enable(RCU_USART0);
/* connect port to USARTx_Tx */
gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
/* connect port to USARTx_Rx */
gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_7);
gpio_pin_remap_config(GPIO_USART0_REMAP,ENABLE);
/* USART configure */
usart_deinit(USART0);
usart_baudrate_set(USART0, 115200U);
usart_receive_config(USART0, USART_RECEIVE_ENABLE);
usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
//usart_parity_config(USART0,USART_PM_EVEN);
//usart_word_length_set(USART0,USART_WL_8BIT);
//usart_stop_bit_set(USART0,USART_STB_1BIT);
usart_enable(USART0);
//nvic_irq_enable(USART0_IRQn, 3U, 3U);
//usart_interrupt_enable(USART0,USART_INT_RBNE);
}