综合技术交流
直播中

王平

8年用户 1428经验值
私信 关注
[问答]

GD32E507V-START USART0收到数据是乱码的原因?

购买的GD32E507V-START 开办版 2 使用提供demo程序 GD32E50x_Demo_Suites_V1.3.1\GD32E507V_START_Demo_Suites\Projects\04_USART_HyperTerminal_Interrupt
USART0的配置:
static void usart_config(void)
{
    /* enable GPIO clock */
    rcu_periph_clock_enable(RCU_GPIOB);
    /* enable USART clock */
    rcu_periph_clock_enable(RCU_USART0);
    /* enable AF clock */
    rcu_periph_clock_enable(RCU_AF);
    /* remap USART0_TX to PB6, USART0_RX to PB7 */
    gpio_pin_remap_config(GPIO_USART0_REMAP, ENABLE);
    /* 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);
    /* USART configure */
    usart_deinit(USART0);
    usart_word_length_set(USART0, USART_WL_8BIT);
    usart_stop_bit_set(USART0, USART_STB_1BIT);
    usart_parity_config(USART0, USART_PM_NONE);
    usart_baudrate_set(USART0, 115200U);
    usart_receive_config(USART0, USART_RECEIVE_ENABLE);
    usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
    usart_enable(USART0);
}

3 把demo中USART0:PB_06 接到9针串口线的2脚
                                PB_07 接到9针串口线的3脚  
                                9针串口线的5脚接到开发板的GND
4 串口调试助手:收到数据是乱码
串口调试助手设置:115200 8位数据位 1位停止位 无校验位 无流控

请教下各位大佬,为啥是乱码?
发送数据是:0x00,......,0xFF;
收到数据是:00 FD FB F9 F7 F5 F1,......01 80

回帖(1)

jjll652

2024-7-26 17:27:12
ble(RCU_AF);

/* configure GPIO pin */
gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8 | GPIO_PIN_9);

/* configure USART0 */
usart_deinit(USART0);
usart_baudrate_set(USART0, 115200);
usart_word_length_set(USART0, USART_WL_8BIT);
usart_stop_bit_set(USART0, USART_STB_1BIT);
usart_parity_config(USART0, USART_PM_NONE);
usart_hardware_flow_rts_config(USART0, USART_RTS_DISABLE);
usart_hardware_flow_cts_config(USART0, USART_CTS_DISABLE);
usart_receive_config(USART0, USART_RECEIVE_ENABLE);
usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
usart_interrupt_enable(USART0, USART_INT_RBNE);
usart_dma_enable(USART0, USART_DMA_RECEIVE, DISABLE);
usart_enable(USART0);

NVIC_SetPriority(USART0_IRQn, 0);
NVIC_EnableIRQ(USART0_IRQn);

}

在您的代码中,USART0的配置看起来是正确的。但是,如果您在接收数据时遇到乱码,可能的原因有以下几点:

1. 波特率不匹配:确保您的GD32E507V-START开发板和发送数据的设备使用相同的波特率(在您的代码中为115200)。如果波特率不匹配,可能会导致接收到的数据出现乱码。

2. 串口连接问题:检查您的开发板和发送数据的设备之间的串口连接是否正确。确保TX和RX引脚正确连接,并且没有短路或断路。

3. 串口引脚电平不匹配:确保您的开发板和发送数据的设备使用相同的串口电平(通常是3.3V或5V)。如果电平不匹配,可能会导致接收到的数据出现乱码。

4. 串口中断处理函数问题:检查您的中断处理函数是否正确处理接收到的数据。确保在中断处理函数中正确读取USART接收缓冲区的数据,并将其存储在适当的变量中。

5. 串口初始化顺序问题:确保在初始化GPIO引脚和USART之前,已经正确配置了RCU时钟。在您的代码中,您已经正确配置了RCU时钟,但是如果在其他地方有错误的初始化顺序,可能会导致问题。

6. 串口DMA配置问题:虽然您的代码中禁用了DMA,但如果您在其他地方启用了DMA,确保正确配置了DMA通道和中断。

7. 软件滤波器问题:在某些情况下,软件滤波器可能会导致接收到的数据出现乱码。尝试禁用软件滤波器或调整其参数,看看是否解决了问题。

8. 硬件问题:如果以上方法都无法解决问题,可能是您的开发板或发送数据的设备存在硬件问题。尝试使用其他开发板或设备,看看问题是否仍然存在。

建议您按照上述步骤逐一排查问题,找到导致乱码的原因,并进行相应的修复。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分