• 漫谈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

    往期文章精选

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

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

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

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

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

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

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

  • 相关阅读:
    基础【五】字典的操作方法
    基础【四】列表的操作方法
    基础【三】字符串的操作方法
    基础【二】while循环及基本运算符
    基础【一】基础数据类型
    C++ string 深拷贝 与 浅拷贝
    多进程引用的动态链接库中的全局变量问题
    C++ 在类里面使用多线程技术
    openwrt 解决包依赖关系
    lua 的元表与元方法
  • 原文地址:https://www.cnblogs.com/2020-zhy-jzoj/p/13165216.html
Copyright © 2020-2023  润新知