打印

GD32f130 usart tx rx引脚 交换疑问

[复制链接]
2996|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沐罹|  楼主 | 2021-11-2 15:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用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);
          
}

仿真进不了串口中断,是不是需要初始化其他位置?或者配置少了哪个步骤?

使用特权

评论回复
沙发
chenjun89| | 2021-11-3 08:44 | 只看该作者
没有这样用过

使用特权

评论回复
板凳
6552918| | 2021-11-3 10:03 | 只看该作者
仿真看一下寄存器配置

使用特权

评论回复
地板
沐罹|  楼主 | 2021-12-1 10:56 | 只看该作者
时隔一月 重新看原来的程序 把usart_invert_config(USART0,USART_SWAP_ENABLE);这一句去掉 换成直接寄存器操作竟然能用了?用 USART_CTL1(USART0) |= USART_CTL1_STRP;  发现usart_invert_config()函数里面只是多了个USART_CTL0(usart_periph) &= ~(USART_CTL0_UEN);关闭串口使能。懵懂啊

使用特权

评论回复
5
数码小叶| | 2021-12-2 20:31 | 只看该作者
还可以这么操作。。??

使用特权

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

本版积分规则

4

主题

9

帖子

0

粉丝