[GD32L233C-START 评测] 【GD32L233C-START测评】串行通讯功能测试与程序分析

jinglixixi   2022-1-14 21:08 楼主

由资料可知,GD32L233C开发板具有4个通讯串口,分别是USART0、USART1 、USART3 及UART4。

此外,它配备了相应的串口收发例程以供学习和使用,其工程目录为“04_USART_HyperTerminal_Interrupt”。

那该程序具有怎样的功能呢?

在测试前,首先要做好相应的准备工作,即使用CN100端口来供电,用CN1端口来收发数据,其接口电路如图1所示。

image-20220114210601-1.png   image-20220114210601-2.png  

image-20220114210601-3.png  

图1 所用端口

 

在编译下载程序后,需按图2所示来设置串口通信参数,在复位后会见到4个LED灯闪烁一次,随后即可开发板所发出的00~FF的2556个数据。

在通常情况下,似乎功能测试至此就结束了,其实这只完成了一半的测试。

image-20220114210601-4.png  

image-20220114210601-5.png  

图2 串口参数设置及数据接收

随后的测试,则要求我们以HEX码的方式向开发板发送00~FF来测试开发板的数据接收功能,见图3所示。

执行到这里,我们会发现开发板上4个LED灯在以流水灯的模式在不停的流动,至此才完成了全部的测试。

image-20220114210601-6.png  

图3 发送数据

有了前面的测试结果,我们再来观察程序就明了了相对,其主程序如下:

int main(void)
{
    led_init();                    //  LED灯初始化
    systick_config();
    nvic_irq_enable(USART0_IRQn, 0);//  启用中断处理
    led_flash(1);                  //  LED灯闪烁一次
    gd_eval_com_init(EVAL_COM);   //  串口USART0初始化
    usart_interrupt_enable(EVAL_COM, USART_INT_RBNE);  // 使能中断接收
    usart_interrupt_enable(EVAL_COM, USART_INT_TBE);    // 使能中断发送
    while(tx_counter < nbr_data_to_send) {
    }                            //  等待完成数据发送
    while(rx_counter < nbr_data_to_read) {
    }                            //  等待完成数据接收
    transfer_status = memory_compare(tx_buffer, rx_buffer, BUFFER_SIZE); 
                                 //  进行数据收发一致性判别
    while(1) {
        if(SUCCESS == transfer_status) {
                                 //  数据一致,进入LED灯轮流闪烁模式。
            gd_eval_led_on(LED1);
            delay_1ms(200);
            gd_eval_led_on(LED2);
            delay_1ms(200);
            gd_eval_led_on(LED3);
            delay_1ms(200);
            gd_eval_led_on(LED4);
            delay_1ms(200);
            gd_eval_led_off(LED1);
            gd_eval_led_off(LED2);
            gd_eval_led_off(LED3);
            gd_eval_led_off(LED4);
            delay_1ms(200);
        } else {
            led_flash(1);   //  LED灯一起闪烁
        }
    }
}

 

别看这个例程十分简单,但的却是十分的有用,其主要体现在:一是解决了串口的数据收发问题,二是得到了数据收发一致性的判别功能,三是解决字节数据的发送问题,而不是用PRINT语句只能发送字符类的数据,这就为串口设备的控制打开了方便之门。

回复评论 (2)

你好,请问使用过PD8 PD9做低功耗串口使用过么?我调试发现接收到的数据乱码,波特率2400

点赞  2023-7-4 10:47
引用: FDGD 发表于 2023-7-4 10:47 你好,请问使用过PD8 PD9做低功耗串口使用过么?我调试发现接收到的数据乱码,波特率2400

没试过,这种现象多数是波特率出入较大的问题。

点赞  2023-7-4 23:52
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复