嵌入式硬件通信串口启用流程

发布时间:2024-01-11  

一、串口启用流程

开讲前,先找几款芯片的串口demo程序瞄一眼。

依次有STM32的V3.5标准库、nRF52832的官方demo以及51核的STC15系列单片机的官方DEMO。


图片

图片

图片

从以上的部分demo例程来看,在启用串口的时候,需要配置的那几个参数有波特率、数据位、校验位、停止位等,从demo的源码中也是能够体现出来的。

而略有不同的是,在引脚配置灵活的ARM中,需要针对引脚进行配置。

二、验证输入输出

完成了串口的初始化,即可对输入输出进行操作,来验证串口是否可以正常的发送和接收数据。

一般的,最直接的方式就是向输出寄存器写入数据,就可以让芯片去完成UART信号输出到对应的引脚上。

如下图依次有STM32的V3.5标准库、nRF52832的官方demo以及51核的STC15系列单片机的官方DEMO。

图片

图片

图片

验证串口的输出,即在串口初始化成功后,对串口的输出寄存器写入数据,而芯片引脚则使用USB转TTL模块连接,USB端插入计算机的USB口,利用计算机的串口助手软件实现对数据的收发。

三、调试-输出

开发调试过程中,输出的内容基本上就是想查看的变量值、代码的执行位置跟踪、算法或者某些运算的结果等等。这些输出,仅用于调试阶段,而在人机调试过程中,使用计算机的串口助手软件进行交互,则输出的数据应该便于识读和判断。

1. C库函数printf格式输出重定向到串口输出

输出串口数据过程中,需要向寄存器逐字节传入数据的,而在传送之前必不可少的,就是将要发送的数据、字符放到同一个Buffer后,执行轮询的方式传送直到buffer内容全部被传送。

而这个“放”的过程也是需要做些计算、判断,尤其是增加必要的字符来描述输出信息,保证信息的可识读。

在C标准库printf函数就有格式输出的功能,利用这个接口更便于调试输出这个过程。

这就需要将printf函数重定向到串口输出上!

实现重定向只需3步:

  1. Options for target选项卡内勾选UseMicroLIB


  • 在串口实现的 .c文件内,将stdio.h文件和stdarg.h文件包含进来* *

  • 重新定义int fputc函数的内部实现

  • 图片

    图片

    完成以上3步,即可利用printf函数来格式化输出,并且能够在串口上接收到。

    2. ANSI C标准中有几个标准预定义宏:

    LINE :源代码中的行号(字符串形式)

    FILE :当前*.c源码文件的文件名(字符串形式)

    DATE :编译日期(字符串形式)

    TIME :编译时间(字符串形式)

    STDC :当要求程序严格遵循ANSI C标准时该标识被赋值为1;

    __cplusplus:当编写C++程序时该标识符被定义。

    有了上一步实现printf函数的重定向到串口后,基本就可以完美使用串口进行调试程序。

    调试过程中可利用ANSIC标准中的内置宏,比如__LINE__可以很方便跟踪代码执行到哪一行。

    图片

    四、调试-输入

    串口的接收,有轮询、中断、DMA等方式。

    轮询方式,特点是消耗芯片资源,否则容易丢数据;

    中断方式,特点是响应快、资源占用低;

    DMA方式,各个芯片的配置不同而无法每款芯片都有该功能,所以代码兼容性可移植性较差。

    一般地,对输入的数据进行分析判断时,如果是轮询的方式,则直接在收到后即判断;中断和DMA方式,都可以考虑存到buffer后再分析处理。

    图片

    图片

    五、初见数据协议解析

    如果是简单几个字符的指令,可以用上述那样简单判断,但是在稍微中等级别的工程项目中,用那样的方式都已经很不便于处理和扩展了。

    比如有一串数据,并且长度不确定,将会超过10个字节、20个字节、100个字节甚至更多,那么这时候就必须使用协议解析的方式。

    通常的,数据协议都会有协议头、长度、校验、数据内容等部分组成,数据将以包的形式进行收发,这时候使用解析的方式,对数据包进行解析。

    这就是广泛使用的“ 起始式协议 ”。

    实际的产品中有IC/ID读卡器模块的接口协议:

    图片

    也有使用在PM2.5传感器上的:

    图片

    这些都属于开发的模块产品,对外使用串口通信,并且数据协议采样了“起始式”的帧结构模式。


    文章来源于:电子工程世界    原文链接
    本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

    相关文章

      基于ARM920T处理器实现RS-232C串口与以太网口数据双向传输的设计;以ARM920T为内核的S3C2440A作为主控制器和以太网控制芯片DM9000AEP设计硬件平台; 构建并移植适合嵌入式串口服务器系统的嵌入式......
      采用RTL8019与LPC2210芯片的嵌入式串口服务器设计方案;随着数字信息技术和互联网的广泛应用, 以操作系统和Internet为标志的嵌入式系统是后PC时代发展的趋势。工业上广泛应用的232......
      灯输出和每个转向指示灯处测量的平均电压和/或电流值得出的。 运行仿真后,您将可以访问相应的实验报告和“结果”部分中的绘图信号,也可以通过双击打开它们。正常运行下应该可以看到如下实验报告图3和信号波形图4。 图3 标称分析实验报告......
      控制。 TTL 嵌入式里面说的串口,一般是指UART口。4个pin(Vcc,GND,RX,TX),用TTL电平......
      板为硬件开发平台,结合μC/OS-II嵌入式操作系统中信号量和消息邮箱,设计了基于信号量、消息邮箱的串口通信应用程序,并通过实验验证了该串口应用程序在保证任务间通信同步情况下,数据......
      使用起来就更简单了。聪明的你是不是发现还缺少了点什么,对。没错因为还缺少了最重要的程序。想要使用串口通信当然还需要写串口通信的程序。下文就教你如何去用,而不是写。串口实验关于串口的实验,之前录过一个基于HAL库来......
      【MCS-51】中断系统及应用;51单片机中断系统是嵌入式开发中非常重要的一部分。中断是一种特殊的程序执行方式,可以在主程序执行过程中,对外部事件进行及时响应和处理。本文将从中断原理、中断......
      语音合成芯片。它是利用嵌入式中文语音合成领域的最新研究成果——InterSound3.0中文语音合成系统设计的一款中文语音合成芯片,通过异步串口接收待合成的文本,直接合成为语音输出,体积较小,使用方便,是一......
      使用起来就更简单了。聪明的你是不是发现还缺少了点什么,对。没错因为还缺少了最重要的程序。想要使用串口通信当然还需要写串口通信的程序。 下文就教你如何去用,而不是写。 串口实验 关于串口的实验,之前录过一个基于HAL......
      通信的程序。 下文就教你如何去用,而不是写。 串口实验 在做一个实验时,最好把这个实验分割成几个关键的步骤,这样做的好处就是可以清晰的知道自己需要做什么,以及做完了哪些。还有哪些还没做。 下面把串口实验......

    我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

    利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

    充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

    我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

    我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

    凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

    我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>