漫谈LiteOS之开发板-串口(基于GD32450i-EVAL)
【摘要】 主要讲解物联网的技术积累,本期我们先带领大家学习漫谈LiteOS之漫谈开发板第一集-串口,本文基于GD32450i-EVAL对串口以及其通信做了一个简要的分析,以及开发过程中遇到的一些技术问题以及解决方案
1.1 定义
串口即串行端口,泛指采用所有采用串口通信时序的接口,一般在嵌入式中默认为UART口。
1.2 串口的作用
(1)通过串口将程序下载到开发板。
(2)显示调试日志实现对于运行程序的监控。
(3)通过串口发送或接收命令实现终端与开发板的信息交互。
2 串口通信
2.1 定义
在串口中,数据按顺序一位一位的传输,该传输方式成为串口通信。
2.2 串口通信的传输方向
(1)单工:数据只可以沿一个方向传输。
(2)半双工:数据可以分时的沿着两个方向传输,即不能同时进行。
(3)全双工:数据可以同时进行双向传输。
2.3 波特率
波特率指的是每秒传输多少位数据,即传输率。常用波特率为9600和115200。
2.4 数据包
数据包 = 起始位 + 数据位 + 校验位 + 结束位
3 GD32F450i的串口
对于GD32F450i开发板主要通信接口包含4个USART(USART0/1/2/5)和4个UART(UART3/4/6/7)。以USART0为例,具体原理图如图1所示。
由上图可知,引脚PA9和PA10位串口USART0的数据输入(接收)引脚RX和数据输出引脚TX。
4 串口初始化的步骤
(1)使能GPIO的时钟。
(2)使能UART0的时钟。
(3)设置USART TX的引脚或端口。
(4)设置USART RX的引脚或端口。
(5)设置USART TX对应引脚为推挽输出工作模式。
(6)设置USART RX对应引脚为推挽输出工作模式。
(7)设置波特率为115200。
(8)使能Rx、Tx端口。
4.1 串口模式
(1)普通模式:在主函数中接收函数,输出字符串到串口。
1)开发环境
Windows、Keil、Jlink下载器、GD32F450i-EVAL(2019)
注意:若使用的MDK版本为Keil5.25以后,打开项目时以及使用J-Link下载器烧录程序时可能会报错,针对可能出现的问题进行分析以及解决,链接为https://bbs.huaweicloud.com/blogs/123604。
2)程序重点
为实现通过printf函数打印字符串和输出实时数据到串口助手,需要重写fputc函数,同时添加头文件 #include "stdio.h",重写函数如下所示。
int fputc(int ch, FILE *f)
{
usart_data_transmit(EVAL_COM1, (uint8_t)ch);
while(RESET == usart_flag_get(EVAL_COM1, USART_FLAG_TBE));
return ch;
}
3)硬件连接
连接USB供电线后,将J-Link下载器连接到开发板的JTAG接口上,之后连接到PC端,若LED5点亮说明选择了正确的启动方式,供电正常。硬件连接图如图2所示。供电方式选择GD-Link,串口采用九孔com口串口线(本文中使用杜邦线代替)连接。
之后点击keil5的编译和烧录按钮,如图3所示。
上述过程实现了下载程序到开发板,用跳线帽将JP5跳到USART0上,并将串口线连接到开发板的COM0上,例程首先将输出“USART printf example: please press theTamper key”到超级终端。按下 Tamper 键,串口继续输出“USART printf example”。
通过串口输出的信息如图4所示。
(2)中断模式:产生的不影响主程序运行。
主函数中需要使能接收中断和发送中断即分别将对RBNE和TBE状态寄存器进行操作,触发中断。测试时首先,所有的LED灯亮灭一次。然后EVAL_COM0将首先输出数组 tx_buffer 的内容(从 0x00 到 0xFF)到支持 hex 格式的串口助手并等待接收由串口助手发送的 BUFFER_SIZE 个字节的数据。MCU 将接收到的串口助手发来的数据存放在数组 rx_buffer 中。在发送和接收完成后,将比较 tx_buffer 和rx_buffer 的值,如果结果相同,LED1,LED2,LED3 轮流闪烁;如果结果不相同,LED1,LED2,LED3 一起闪烁。
通过串口输出的信息如图5所示。
(3)DMA模式:与主函数互不影响,独立运行。
主函数中需要先使能USART0的发送和接收DMA通道,触发DMA。对于测试,DMA测试过程与中断方式相同。
通过串口输出的信息如6所示。
通过以上的开发流程,对于物联网中的串口有了更深的认识。
目录主文链接:https://bbs.huaweicloud.com/blogs/124244
作者:星辰27
往期文章精选
javascript基础修炼(13)——记一道有趣的JS脑洞练习题