0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一款UART外设

5CTi_cirmall 来源:电路设计技能 作者:电路设计技能 2020-11-19 09:44 次阅读

亲爱的工程师朋友和喜爱电子的朋友,大家好,我是火舞青春,也是本期“来实战”项目《串行数据采集仪》的执行官。

嵌入式软件这个行业涉及甚广,从我们身边的电视、冰箱、洗衣机,到我们的手机,再到交通、到医疗、军事无处不在。

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

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

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

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

目的意义;

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

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

1、模块化代码的设计思路,开发思想和独立模块开发模型;

2、uart等串行板级通信的设计原理及其注意事项;

3、项目中常用的测试方法和测试手段;

4、通信协议的制定和协议栈的开发;

项目简介:

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

基础功能:

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

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

扩展功能:

1、can数据、spi 、iic的数据的采集传输;

2、离线存储功能;

开发准备及其环境

硬件环境 具备RF24L01模块接口的STM32开发板2块、RF20L01无线模块2块;

开发工具 STM32J-link仿真器、串口TTL转换小板各1;

软件环境 KIEL-MDK 、串口助手 ;

开发计划(第五期的第1板块,为期1个月)

· 节点1:完成技术指标的确定,开发板、硬件模块及其调试器采购到位,完成软硬件的架构设计;

· 节点2:调试接口与pc的交互程序的开发;

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

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

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

1、驱动的开发与BSP的开发;

2、协议的开发;

· 节点4:整体调试、测试;

· 节点5:编写项目总结。

项目设计

Part 01

项目概述及其环境的搭建

项目简介:

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

基础功能:

1、为了尽快上手软件,硬件系统采用现成模块, RF24L01模块接口的STM32开发板2块和RF20L01无线模块2块,STM32系统板2块分为主板和从板,从板信息通过24l01无线模块发送到主板,主板通过uart与pc交互;硬件部分后续独立部分说明分享。

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

扩展功能:

1、can数据、spi 、iic的数据的采集传输;

2、离线存储功能;

开发准备及其环境:

1、硬件环境 :具备RF24L01模块接口的STM32开发板2块、RF20L01无线模块2块;

2、开发工具 :STM32J-link仿真器、串口TTL转换小板各1;

3、软件环境 KIEL-MDK 、串口助手 ;

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。

2、调试神器-uart

不管哪个项目,printf的输出是必不可少的!

实现的关键点是数据通过printf函数收集到debug_pool后如何发送。

下面内容围绕这个问题展开讨论。

无os的情况下,若是需要实时性要求较高的情况下,发送需要直接调用uart驱动发送接口抛出,这种方式,效率低,cpu占用高。

一般情况下是要开一片空间,当数据收集满后通过DMA送到uart硬件然后发出去。不过这种方式是需要一个Task,周期的抛数据。

有os的系统,这里需要加消息队列或者内存池,还需要一个独立的线程进行处理。

比较复杂,这里不展开讨论。

对上图思想进行解释:

1、接收部分首先考虑如何接收数据,是采用run_buf的形式还是一个字节中断的方式;

2、数据接收后,要思考帧识别,确定一帧数据后进入CRC校验;

3、校验通过后再进行协议的解析和处理;

5、数据发送部分先对数据进行打包。记住多线程的处理要对数据进行保护,防止tx_buf里的数据被刷写;

6、通过打包后的数据要CRC加码校验,然后再发出去;

值得注意的是,要将这些公共的CRC和收发任务单独提出来,与协议相关的内容独立出来,这样协议层的变得不会引起程序大的改动;

Part 03

调试接口与pc的交互程序的开发

Part 04

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

Part 05

整体调试、测试

Part 06

编写项目总结

责任编辑:xj

原文标题:《来实战》#5:老司机教你做一款UART之UART外设篇

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • uart
    +关注

    关注

    22

    文章

    1227

    浏览量

    101172
  • 模块化
    +关注

    关注

    0

    文章

    329

    浏览量

    21330
  • 代码
    +关注

    关注

    30

    文章

    4747

    浏览量

    68349

原文标题:《来实战》#5:老司机教你做一款UART之UART外设篇

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

收藏 人收藏

    评论

    相关推荐

    如果设计一款桌面的机器玩具,最吸引人的外观与功能要有哪些?

    初步设想制作如下其中一款,有感兴趣的朋友可以帮提提意见。 A一款圆敦敦的音响状的“个人日程助手”,具备番茄闹钟、音乐播放、减压交互、语言对话、工作日报生成。 B一款迷你瓦利机器人,有
    发表于 10-19 18:25

    介绍国产的一款RISC-V——ES32VF2264

    ES32VF2264系列产品采用RISC-V内核和先进的系统架构,是一款高性价比、高可靠性且外设功能丰富的32-bit 微控制器。主频运行在72MHz时系统效能评分可达81 DMIPS和149
    发表于 09-23 08:44

    如何设计一款50HZ陷波电路?

    如何设计一款50HZ陷波电路,有现成的参考电路设计吗
    发表于 07-30 06:12

    esp32如何使用DMA来传输UART/SPI等外设的数据,编程上应该怎么声明或者调用?

    esp32如何使用DMA来传输UART/SPI等外设的数据,编程上应该怎么声明或者调用?
    发表于 06-26 07:58

    一款完美用于相机镜头的马达驱动芯片TMC2300-LA

    卓联微科技TMC2300-LA一款完美用于相机镜头的马达驱动芯片TMC2300-LA是一款用于高达1.2ARMS的两相步进电机的低压驱动芯片,低电压的步进电机驱动器是用于电池供电的、空间和待机功率
    的头像 发表于 06-14 08:27 538次阅读
    <b class='flag-5'>一款</b>完美用于相机镜头的马达驱动芯片TMC2300-LA

    一款以32位ARMCortexTM-M0处理器内核为基础的高性价比安全MCU

    LKT6850是一款以32位ARMCortexTM -M0处理器内核为基础的高性价比安全MCU。LKT6850具有最高64KBFlash、4KBRAM、48MHZ工作频率,具有丰富的外设资源供开发人员使用。
    的头像 发表于 04-19 16:05 599次阅读

    如何挑选一款性价比高的家用路由器

    家庭网络已经成为人们生活中不可或缺的部分。而选择一款性价比高的家用路由器对于保障网络连接质量、提升网络体验至关重要。本文将从性能、覆盖范围、安全性、易用性和价格等方面,为您介绍如何挑选一款性价比高的家用路由器。
    的头像 发表于 04-16 15:14 482次阅读

    stm8l的PE3上有两个外设LCD和UART2,如何设置所使用的外设(LCD和UART2)?

    stm8l的PE3上有两个外设LCD和UART2,如何设置我所使用的外设(LCD和UART2)
    发表于 04-07 07:27

    一款通过串行外设接口 (SPI) 控制的双通道智能高侧开关TPS2HCS10-Q1数据表

    电子发烧友网站提供《一款通过串行外设接口 (SPI) 控制的双通道智能高侧开关TPS2HCS10-Q1数据表.pdf》资料免费下载
    发表于 03-26 13:51 1次下载
    <b class='flag-5'>一款</b>通过串行<b class='flag-5'>外设</b>接口 (SPI) 控制的双通道智能高侧开关TPS2HCS10-Q1数据表

    如何设计一款四轮智能小车

    如何设计一款四轮智能小车 此部分共分为五个小节,通过这个 Part 的学习,我们将了解机器人的概念和组成,对机器人的整体设计有个明确的思路,然后通过机械结构、驱动系统、传感系统、控制系统四大
    的头像 发表于 03-26 10:58 720次阅读
    如何设计<b class='flag-5'>一款</b>四轮智能小车

    UART串口通信协议是什么?

    UART (Universal Asynchronous Receiver/Transmitter) 是种通信接口协议,用于实现串口通信。它是种简单的、可靠的、广泛应用的串口通信协议。它是由美国
    的头像 发表于 03-19 17:26 1258次阅读

    介绍一款基于java的渗透测试神器-CobaltStrike

    Cobalt Strike是一款基于java的渗透测试神器,常被业界人称为CS神器。
    的头像 发表于 01-16 09:16 892次阅读
    介绍<b class='flag-5'>一款</b>基于java的渗透测试神器-CobaltStrike

    GD32F103C8T6 Uart3无法发送数据

    GD32F103C8T6是一款由中国的国产芯片厂商GigaDevice生产的单片机芯片,它是一款性价比较高且功能强大的芯片。在GD32F103C8T6中,UART3是其中个串口通信模
    的头像 发表于 01-09 10:57 1605次阅读

    利用星闪BS25开发板NL001测试官方sdk中的外设程序uart

    本文利用星闪BS25开发板NL001测试下官方sdk中的外设程序uart,以便熟悉外设的基本操作。
    的头像 发表于 01-02 11:30 2758次阅读
    利用星闪BS25开发板NL001测试官方sdk中的<b class='flag-5'>外设</b>程序<b class='flag-5'>uart</b>

    共模电容:又一款EMC滤波神器?

    共模电容:又一款EMC滤波神器?|深圳比创达电子(上)
    的头像 发表于 12-25 10:54 685次阅读
    共模电容:又<b class='flag-5'>一款</b>EMC滤波神器?