嵌入式UART串口调试与嵌入式串口调试连接概述:调试接口与pc的交互程序的开发

嵌入式UART串口调试与嵌入式串口调试连接概述:调试接口与pc的交互程序的开发,第1张

嵌入式软件开发在项目的开发过程中,使用调试工具是必不可少的。

串口简单灵活的特性常被工程师用作代码的调试工具,它的另一个名字叫uart

说到uart,相信很多工程师都熟透了,掌握一个uart,可以说是已经迈进了嵌入式软件的殿堂,所以uart也常被用作嵌入式入门的必备功课。

那既然都熟了,那为什么还拿出来说呢,带着这样的一个问题,跟着我一起深入的了解我们的这个项目,一起探讨uart背后那些不为人知的故事。

目的意义在我们的开发测试中,uart通常扮演者信息输出,人机交互和下载程序的功能,有些场景下可能有线的串口不是很方便或者不能实现信息的输出,比如调平衡车,有线串口对这种远距离的调试显得有些力不足。有些场景或者我们根本不可以把数据直接读出来,比如车厂,整车的CAN数据是汽车的血液,一些ECU的出厂前身体状况,全靠采集can数据来诊断,即使整车有can数据的存储功能,一些测试调试不一定能很方便的拿到,所以这个无线的数据采集仪就能派上用场,这就是我本次项目的主要意义。

 本期内容可以了解到以下几个方面:

  1、模块化代码的设计思路,开发思想和独立模块开发模型;
2、uart等串行板级通信的设计原理及其注意事项;
3、项目中常用的测试方法和测试手段;
4、通信协议的制定和协议栈的开发;  

 项目简介:项目采用双mcu-STM32F030C8T6RF24L01无线模块实现主从设备的上下行数据传输,在此基础上增加与pc的通信和数据记录功能,实现离线数据同步功能;  基础功能:

实现双mcu数据的上下行无线传输,波特率为115200;

实现主设备与pc机的通信,并实现uart调试功能;

扩展功能:1、can数据、spi 、iic的数据的采集传输; 2、离线存储功能;  开发准备及其环境硬件环境:具备RF24L01模块接口STM32开发板2块、RF20L01无线模块2块;开发工具:STM32J-link仿真器、串口TTL转换小板各1;软件环境 :KIEL-MDK 、串口助手 ;  开发计划节点1:完成技术指标的确定,开发板、硬件模块及其调试器采购到位,完成软硬件的架构设计;  节点2:调试接口与pc的交互程序的开发;

初建工程,完成uart1调试接口程序的开发;

完成uart2与pc机的交互程序的设计;

节点3:定制NRF24L01的传输协议,并完成开发

驱动的开发与BSP的开发;

协议的开发;

节点4:整体调试、测试;  节点5:编写项目总结。  

 

 

项目设计

Part 01

项目概述及其环境的搭建

 项目简介:  项目采用双mcu-STM32F030C8T6和RF24L01无线模块实现主从设备的上下行数据传输,在此基础上增加与pc的通信和数据记录功能,实现离线数据同步功能;功能指标  基础功能:  1、为了尽快上手软件,硬件系统采用现成模块, RF24L01模块接口的STM32开发板2块和RF20L01无线模块2块,STM32系统板2块分为主板和从板,从板信息通过24l01无线模块发送到主板,主板通过uart与pc交互;硬件部分后续独立部分说明分享。  

嵌入式UART串口调试与嵌入式串口调试连接概述:调试接口与pc的交互程序的开发,b51bc39a-4675-11eb-8b86-12bb97331649.png,第2张

 

嵌入式UART串口调试与嵌入式串口调试连接概述:调试接口与pc的交互程序的开发,b5465f1a-4675-11eb-8b86-12bb97331649.png,第3张

  2、软件方面是重点研究对象,软件主要分为driver、hal、bsp、service、app五个部分。Driver层是和硬件直接相关,hal层是隔离层,bsp是驱动相关芯片的板级支持层、服务层主要是一些任务相关,App为应用层。  

嵌入式UART串口调试与嵌入式串口调试连接概述:调试接口与pc的交互程序的开发,b5afaba0-4675-11eb-8b86-12bb97331649.png,第4张

 扩展功能:1、can数据、spi 、iic的数据的采集传输; 2、离线存储功能;  开发准备及其环境:1、硬件环境 :具备RF24L01模块接口的STM32开发板2块、RF20L01无线模块2块; 2、开发工具 :STM32J-link仿真器、串口TTL转换小板各1; 3、软件环境 KIEL-MDK 、串口助手 ;  

嵌入式UART串口调试与嵌入式串口调试连接概述:调试接口与pc的交互程序的开发,b5afaba0-4675-11eb-8b86-12bb97331649.png,第4张

Part 02

软件设计-外设uart

导言uart外设是开发调试的重要手段,也是板级通信常用的通信方式。   对于耳熟能详的uart,你了解多少呢?   它的用法的注意事项和难点又有哪些呢?   本期内容让我带着大家重点探讨一下uart的软件设计。  内容提要1、uart的基本概述和STM32中uart驱动HAL层的配置; 2、调试打印中,uart的数据发送策略; 3、通信中,uart的策略与架构。  软件实战1、外设与系统  与传统写驱动程序相比,STM32CubeMX代码生成器让驱动变得更简单、快速,大大提高了开发效率。   STM32CubeMX不仅支持外设配置,还支持freeRTOS,不过很可惜,考虑到片子的成本,8KRAM的片子仅能跑2个静态的线程,而且从板有集成到项目中的需求,所以从设备不使用freeRTOS。   从设备主频48MHZ,uart外设需要对GPIO/NVIC/DMA/UART进行配置,主设备还需要配置freeRTOS。  

嵌入式UART串口调试与嵌入式串口调试连接概述:调试接口与pc的交互程序的开发,b6337e6c-4675-11eb-8b86-12bb97331649.png,第6张

 2、调试神器-uart不管哪个项目,printf的输出是必不可少的!   实现的关键点是数据通过printf函数收集到debug_pool后如何发送。   下面内容围绕这个问题展开讨论。   无os的情况下,若是需要实时性要求较高的情况下,发送需要直接调用uart驱动发送接口抛出,这种方式,效率低,cpu占用高。   一般情况下是要开一片空间,当数据收集满后通过DMA送到uart硬件然后发出去。不过这种方式是需要一个Task,周期的抛数据。  

嵌入式UART串口调试与嵌入式串口调试连接概述:调试接口与pc的交互程序的开发,b6ef8594-4675-11eb-8b86-12bb97331649.png,第7张

  有os的系统,这里需要加消息队列或者内存池,还需要一个独立的线程进行处理。   比较复杂,这里不展开讨论。  

嵌入式UART串口调试与嵌入式串口调试连接概述:调试接口与pc的交互程序的开发,b7272d8c-4675-11eb-8b86-12bb97331649.png,第8张

 对上图思想进行解释:1、接收部分首先考虑如何接收数据,是采用run_buf的形式还是一个字节中断的方式;
2、数据接收后,要思考帧识别,确定一帧数据后进入CRC校验;
3、校验通过后再进行协议的解析和处理;
5、数据发送部分先对数据进行打包。记住多线程的处理要对数据进行保护,防止tx_buf里的数据被刷写;
6、通过打包后的数据要CRC加码校验,然后再发出去;  值得注意的是:要将这些公共的CRC和收发任务单独提出来,与协议相关的内容独立出来,这样协议层的变得不会引起程序大的改动;  本次更新内容如下:

Part 03

软件设计-外设uart

引言:相信很多工程师们都晓得: 调试串口不仅扮演打印信息的角色,还得有配置设备、设备参数输入等功能. 如果开发window上位机界软件是成本上和时间上都不划算; 要是在Linux这种跨平台下还得开发一套软件. 所以做一个类似Linux命令这样的串口软件就显得很有必要!   直接用像SecureCRT这类软件连接串口即可调试,与设备进行交互,把这个软件命名为mshel。   另外,直接与pc进行这样的数据流存在乱码和丢数据的现象,这里使用了为二者制定的私有协议。  本期内容:1、mshell的原理与结构; 2、pc交互的通信协议;  软件实战:mshell的设计原理和思路:mshell是设备开发人员与设备进行配置管理的交互接口,主要功能如下: 1)设备log打印显示功能;
2)可对设备进行配置和控制;
3)具有Linux的终端控制台类似的功能,可以显示功能菜单和参数输入等功能,给出功能菜单示例;  

嵌入式UART串口调试与嵌入式串口调试连接概述:调试接口与pc的交互程序的开发,b74d19c0-4675-11eb-8b86-12bb97331649.png,第9张

 SecureCRT软件的串口数据交互特点:

1)对与窗口输入的字母和数字,是以ASCII的形式通过串口下发到设备;

2)窗口输入一个字符,串口会下发一个字符,回车、退格和空格都是一个字节,左右上下键是2字节;

3)软件接收到字符后回显到窗口,回车0x0D回显没有反应, 行跳转;

4)给出用到的一些双字节按键:

KEY_UP = 0x5B410000, 

KEY_DOWN = 0x5B420000,

KEY_LEFT = 0x5B440000, 

KEY_RIGHT = 0x5B430000,

根据以上特点可知,实现mshell进行需要回显功能,就是收到啥发啥,提示程序员设备收到所下发的字符。   需要对收到的字符进行存储和解析,需要设计命令解析器。   命令解析器处理完指令及其数据后,交给执行单元。   执行单元的设计包括一级指令执行,即选择功能模块,比如uart相关指令,之后进入到子模块处理程序。  

嵌入式UART串口调试与嵌入式串口调试连接概述:调试接口与pc的交互程序的开发,b7bfb0d4-4675-11eb-8b86-12bb97331649.png,第10张

 核心模块的功能如下:  1)echo回显模块是将pc发来的字符实时的发回到pc的终端,提示输入有效;
2)cmd_analysis命令解析器是将收到的字符进行处理,要知道输入参数的个数,指令以及数据;
3)cmd_dispatch命令调度器是对注册的命令块进行回调处理;    

嵌入式UART串口调试与嵌入式串口调试连接概述:调试接口与pc的交互程序的开发,b808ea6a-4675-11eb-8b86-12bb97331649.png,第11张

  1)物理层主要是硬件线路数据,软件驱动的收发;采用标准3线制 Uart 物理接口、波特率待定、 8个数据位,无校验,1个停止位。
2)数据链路层是对接收一包数据的完整性已经正确的保证,这里使用crc校验;
3)传输层是实现数据包的顺序传输,和稳定性,具体的协议帧定义如下:  

嵌入式UART串口调试与嵌入式串口调试连接概述:调试接口与pc的交互程序的开发,b841f22e-4675-11eb-8b86-12bb97331649.png,第12张

应答帧在应用层payload中进行,counter计数避免帧重复,对于协议的实现,仅mcu部分,上位机部分使用Linux,将数据存到文件中即可。   目前更新到这里,想看后续更新记得关注我们~  项目如此有趣想要跟着一起做?点击下方的阅读原文按钮,下载本次项目相关附件资料,一起来实战吧!

Part 04

定制NRF24L01的传输协议,完成开发

Part 05

整体调试、测试

Part 06

编写项目总结

 

原文标题:来实战之《嵌入式UART项目开发》步骤三:调试接口与pc的交互程序的开发

文章出处:【微信公众号:电路设计技能】欢迎添加关注!文章转载请注明出处。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2439512.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-03
下一篇 2022-08-03

发表评论

登录后才能评论

评论列表(0条)

保存