【摘要】 ​主要讲解物联网的技术积累,本期我们先带领大家学习漫谈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

 

往期文章精选

如果让你手写个栈和队列,你还会写吗?

挑战10个最难的Java面试题(附答案)【上】

javascript基础修炼(13)——记一道有趣的JS脑洞练习题

【我的物联网成长记3】如何开发物联网应用?

【HC资料合集】2019华为全联接大会主题资料一站式汇总,免费下载!

 对你没有看错!不到 10 行代码完成抖音热门视频的爬取!

Python面试的一些心得,与Python练习题分享

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐