我用gd32f130的官方程序修改 可以正常使用。但是硬件那边把TXRX接反了,我就想到 stm32部分IC在软件上可以调换txrx,如是查看GD32的数据手册 发现在CTRL上有一位STRP可以控制交换TXRX,在软件上初始化后并不能实现交换。代码如下:
void USART0_Init(void)
{
rcu_periph_clock_enable(RCU_GPIOB);
rcu_periph_clock_enable(RCU_USART0);
/* connect port to USART1_Tx */
gpio_af_set(GPIOB, GPIO_AF_0, GPIO_PIN_6);
/* connect port to USARTx_R1 */
gpio_af_set(GPIOB, GPIO_AF_0, GPIO_PIN_7);
gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_6);
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ,GPIO_PIN_6);
/* configure USART2 Rx as alternate function push-pull */
gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_7);
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ,GPIO_PIN_7);
/* USART2 configure */
usart_deinit(USART0);
usart_invert_config(USART0,USART_SWAP_ENABLE);//这里交换TXRX
usart_baudrate_set(USART0,115200);
usart_receive_config(USART0, USART_RECEIVE_ENABLE);
usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
usart_parity_config(USART0, USART_PM_NONE);
usart_word_length_set(USART0, USART_WL_8BIT);
usart_stop_bit_set(USART0, USART_STB_1BIT);
usart_interrupt_enable(USART0, USART_INT_RBNE);
nvic_irq_enable(USART0_IRQn, 0, 1);
usart_enable(USART0);
}
仿真进不了串口中断,是不是需要初始化其他位置?或者配置少了哪个步骤? |