由资料可知,GD32L233C开发板具有4个通讯串口,分别是USART0、USART1 、USART3 及UART4。
此外,它配备了相应的串口收发例程以供学习和使用,其工程目录为“04_USART_HyperTerminal_Interrupt”。
那该程序具有怎样的功能呢?
在测试前,首先要做好相应的准备工作,即使用CN100端口来供电,用CN1端口来收发数据,其接口电路如图1所示。
图1 所用端口
在编译下载程序后,需按图2所示来设置串口通信参数,在复位后会见到4个LED灯闪烁一次,随后即可开发板所发出的00~FF的2556个数据。
在通常情况下,似乎功能测试至此就结束了,其实这只完成了一半的测试。
图2 串口参数设置及数据接收
随后的测试,则要求我们以HEX码的方式向开发板发送00~FF来测试开发板的数据接收功能,见图3所示。
执行到这里,我们会发现开发板上4个LED灯在以流水灯的模式在不停的流动,至此才完成了全部的测试。
图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语句只能发送字符类的数据,这就为串口设备的控制打开了方便之门。
引用: FDGD 发表于 2023-7-4 10:47 你好,请问使用过PD8 PD9做低功耗串口使用过么?我调试发现接收到的数据乱码,波特率2400
没试过,这种现象多数是波特率出入较大的问题。