历史上的今天
返回首页

历史上的今天

今天是:2024年08月28日(星期三)

正在发生

2019年08月28日 | STM32Cube-USART

2019-08-28 来源:eefocus

本章以串口为例讲解,HAL 库轮询,中断,DMA 三种编程模型。


1.前情回顾


在串行通信中,一个字符一个字符地传输,每个字符一位一位地传输,并且传输一个字符时,总是以“起始位”开始,以“停止位”结束。在进行传输之前,双方一定要使用同一个波特率设置。波特率就是每秒钟传输的数据位数。


常用的两种基本串行通信方式包括同步通信和异步通信。我们通常使用的是异步通信.异步通信规定传输的数据格式由起始位(start bit)、数据位(data bit)、奇偶校验位(parity bit)和停止位(stop bit)组成。


2.重定义printf函数


打开STM32CubeMX新建工程,选择STM32F103ZE芯片,选择外部高速晶振(HSE)。USART1选择为异步通信方式。PA10设置RX接收,PA9设置为TX发送。


配置时钟

串口配置设置波特率为115200 Bits/s。传输数据长度为8 Bit。奇偶检验无,停止位1.其他参数默认。


生成报告以及代码,编译程序。在usart.c文件中可看到串口1的初始化函数MX_USART1_UART_Init(void),以及管脚配置函数HAL_UART_MspInit()。


C语言中的标准库中所用的标准输出函数,默认的输出设备是显示器,要实现串口或LCD的输出,必须重新定义标准库函数里与输出函数相关的函数。例如:printf输出到串口,需要将fputc里面的输出指向串口(重定向),方法如下:只要自己添加一个int fputc(int ch, FILE *f)函数,能够输出字符就可以了。


在usart.c文件后面添加如下代码


其中HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);这个语句表示通过串口1发个一个字符。ch为字符的存储地址,0xFFFF为超时时间。在stm32f10xx_hal_uart.c文件中可以找到HAL_UART_Transmit函数。


在main.c文件中添加应用函数。

编译程序并下载到开发板。用USB线连接开发板到电脑,在电脑上打开串口调试助手。选择对应的串口号,设置波特率为115200。会接收到如图信息。


打开stm32f1xx_hal_uart.h头文件,在文件后最后面可以看到有如下操作串口的函数。

串口的发送接收函数:


HAL_UART_Transmit();串口轮询模式发送,使用超时管理机制。


HAL_UART_Receive();串口轮询模式接收,使用超时管理机制。


HAL_UART_Transmit_IT();串口中断模式发送,


HAL_UART_Receive_IT();串口中断模式接收


HAL_UART_Transmit_DMA();串口DMA模式发送


HAL_UART_Receive_DMA();串口DMA模式接收


 


串口相关的中断函数:


HAL_UART_TxHalfCpltCallback():一半数据(half transfer)发送完成后,通过中断处理函数调用。


HAL_UART_TxCpltCallback():发送完成后,通过中断处理函数调用。


HAL_UART_RxHalfCpltCallback():一半数据(half transfer)接收完成后,通过中断处理函数调用。


HAL_UART_RxCpltCallback():接收完成后,通过中断处理函数调用。


HAL_UART_ErrorCallback():传输过程中出现错误时,通过中断处理函数调用。


可看到串口发送和接收有三种通信模式:


第一种是上面用到的轮询的模式。CPU不断查询IO设备,如设备有请求则加以处理。例如CPU不断查询串口是否传输完成,如传输超过则返回超时错误。轮询方式会占用CPU处理时间,效率较低。


第二种就是中断控制方式。当I/O操作完成时,输入输出设备控制器通过中断请求线向处理器发出中断信号,处理器收到中断信号之后,转到中断处理程序,对数据传送工作进行相应的处理。


第三种就是直接内存存取技术(DMA)方式。所谓直接传送,即在内存与IO设备间传送一个数据块的过程中,不需要CPU的任何中间干涉,只需要CPU在过程开始时向设备发出“传送块数据”的命令,然后通过中断来得知过程是否结束和下次操作是否准备就绪。


3.中断模式。


打开STM32CubeMX重新建工程,配置和前面一样。只是这个工程中,开启了串口中断。


生成报告以及代码,编译程序。在main函数前面添加两个数组变量。


在main函数中添加两个语句通过串口中断发送aTxStartMessage数组的数据和接收数据10个字符,保存在数组aRxBuffer中。


在main.c文件后面添加中断接收完成回调函数。中断回调函数中将接收到的数据又通过串口发送回去。


编译程序并下载到开发板。用USB线连接开发板到电脑,在电脑上打开串口调试助手。选择对应的串口号,设置波特率为115200。按下复位按键会接收到aTxStartMessage数组的数据。通过串口助手发送10个字符,串口助手回显示发送的数据。注意:串口要发够10个字符串,才会触发中断。少于10个字符则不会触发中断,串口不会显示发送的数据。超过10个字符,串口只会发送10个字符回来显示。

上面是指定数据长度接收,而且中断接收函数放在while外面只能接受一次。接下来实现串口+DMA+空闲中断接收不定长数据。


本章节文档:https://download.csdn.net/download/zdw6868/10655193


配置如下,其他配置跟上面一样


 

添加应用程序


Usart.h中

Usart.c

Stm32f1xx_.c

Main.c

编译程序并下载到开发板。

推荐阅读

史海拾趣

汇顶科技(GOODiX)公司的发展小趣事

机顶盒,全称为数字视频变换盒,是现代家庭娱乐系统中的重要组成部分。从广义上讲,任何与电视机连接的网络终端设备均可称为机顶盒,它们能够接收并转换来自不同信号源的数字信号,使之成为适合在电视上播放的格式。从功能上看,机顶盒主要分为数字机顶盒和网络机顶盒两大类。

数字机顶盒主要负责实现数模转换功能,让传统模拟电视机也能观看数字电视节目,包括有线电视、卫星电视和地面广播电视的数字机顶盒。它们通过内置的调谐器接收信号,经解调器和解码器处理后,将数字信号转化为电视可识别的视频和音频流。

而网络机顶盒则进一步扩展了机顶盒的功能,它不仅能接收电视信号,还能接入互联网,提供诸如在线视频、游戏、应用程序下载等多元化服务。网络机顶盒支持高清、甚至超高清视频播放,结合智能技术,还能实现语音控制、智能推荐等便捷功能。此外,网络机顶盒还具备强大的内容分发和管理能力,通过与各大内容提供商合作,为用户提供丰富多样的节目资源。

随着科技的进步,机顶盒的发展趋势将更加注重技术升级、内容创新和用户体验。未来,机顶盒将在家庭娱乐系统中扮演更加重要的角色,为用户带来更为优质、便捷、智能的观影体验。

American Power Management Inc公司的发展小趣事

在电子行业的初期,APMI以一家小型创业公司的身份出现,专注于电源管理技术的研发。当时,市场上的电源管理产品普遍存在效率低下、体积庞大的问题。APMI的研发团队通过深入研究,成功开发出了一款高效、紧凑的电源管理芯片,这一创新为电子产品的小型化和节能化奠定了基础。随着技术的不断完善和推广,APMI逐渐在电源管理领域崭露头角,吸引了众多合作伙伴和投资者的关注。

Harvatek Corporation公司的发展小趣事

背景:作为电子显示领域的佼佼者,Hantronix不仅关注自身的发展,还积极履行社会责任,为行业的进步和发展做出贡献。

发展:Hantronix通过技术创新和产品升级,推动了电子显示技术的进步和应用范围的扩大。同时,公司还积极参与行业标准的制定和推广工作,为行业的规范化、标准化发展贡献了自己的力量。此外,Hantronix还注重人才培养和团队建设,为行业培养了一大批高素质的专业人才。

以上五个故事虽然基于概括性描述,但均反映了Hantronix公司在电子行业中的发展历程、技术创新、市场拓展、品质保证以及行业影响等方面的实际情况。

旌芯半导体(GN)公司的发展小趣事

为了保持技术领先地位,CMOS Sensor Inc公司高度重视研发投入。公司拥有一支专业的研发团队,致力于新技术、新产品的开发。同时,公司还与多所高校和研究机构建立了紧密的合作关系,共同推动光电图像采集技术的发展。这些举措使得CMOS Sensor Inc在行业中保持了持续的创新能力。

GE Sensing ( Amphenol Advanced Sensors )公司的发展小趣事

随着技术的不断发展,CMOS Sensor Inc公司不断推出创新产品。其中,线型CMOS图像传感器的研发成功,为公司带来了重要的突破。这一产品具有更高的分辨率和更低的噪声,为工业质量保证、商业成像等领域提供了更优质的解决方案。此后,公司又不断对产品进行升级和优化,以满足不同客户的需求。

Altitude Technology公司的发展小趣事

在电子行业中,创新是企业永恒的主题。Altitude Technology始终坚持以创新驱动发展,不断推出新产品、新技术。公司建立了一支高效的研发团队,不断跟踪行业最新动态和技术趋势,确保公司在技术创新方面始终走在前列。正是这种持续创新的精神,使得Altitude Technology在电子行业中保持了长久的竞争力。


以上五个故事均基于虚构的Altitude Technology公司进行创作,旨在展示一个电子行业企业在不同发展阶段可能遇到的挑战和机遇,以及如何通过技术创新、市场拓展和合作共赢等方式实现持续发展。请注意,这些故事并非基于真实事件,因此可能与实际情况存在出入。

问答坊 | AI 解惑

光纤收发器的基本特点

光纤收发器通常具有以下基本特点: 1. 提供超低时延的数据传输。 2. 对网络协议完全透明。 3. 采用专用ASIC芯片实现数据线速转发。可编程ASIC将多项功能集中到一个芯片上,具有设计简单、可靠性高、电源消耗少等优点,能使设备得到更高的 ...…

查看全部问答>

FPGA程序有破解的方法吗

请问存放在EPCS里边的FPGA程序有被破解的危险吗?有没有什么有效的方法防止程序被破解?…

查看全部问答>

串行数据测试发包方法的讨论

在串行数据测试中,经常会使用专门的测试夹具把待测试信号引入示波器中测量和分析,这时,待测试的串行信号链路并不在正常工作状态(即正常的业务数据流模式),而是工作在测试模式,待测试芯片的该串行链路的发送端必须强制发送出测试数据包,然后 ...…

查看全部问答>

关于DSP芯片发烫的问题

望各位大虾告诉小弟:DSP芯片在调试时有点发烫,应该从哪些方面考虑出现的问题,并加以解决?3Q!…

查看全部问答>

求输入端电流钳制设计方法

求电流钳制方法,就是说如果正常工作在1ma的情况下,电流可以正常通过,但是如果电流超过规定的电流限度(以5ma为例),会被钳制在5ma。…

查看全部问答>

9325改横屏不成功。显示有问题。谁帮忙看一下。或者能给个横屏的驱动看一下。谢谢了

坚屏显示是没问题的。 但改成了横屏之后就显示不正常,不知是那里没改好。   #include\"STC_NEW_8051.H\" #define WINDOW_XADDR_START 0x0050 // Horizontal Start Address Set#define WINDOW_XADDR_END 0x0051 // Horizontal ...…

查看全部问答>

DAC8408F TI的有什么芯片可以替换?

本帖最后由 dontium 于 2015-1-23 13:12 编辑 请教TI的模拟电子方面的专家 DAC8408F TI的有什么芯片可以替换?   DAC8408F为4路8位COMS D/A转换芯片 …

查看全部问答>

AD549如何实现调零、

  第一种:The AD549 input offset voltage can be nulled by using balance Pin 1 and Pin 5。  Nulling the input offset voltage in this fashion introduces an added input offset voltage drift component of 2.4 μV/ ...…

查看全部问答>

msp430一个特殊的系列——MSP430AFE模拟前端

对于MSP430有一个特殊的系列,他们叫做AFE(Analog Front End),就是如题目所说的模拟前端。 那么这个模拟前端到底有何特点呢? 多达3 个具有差分可编程增益放大器(PGA) 输入的24 位三角积分模数(A/D) 转换器 对于430MCU来将,这个外设可能过于 ...…

查看全部问答>

有源滤波器之 -------状态变量滤波器

要知详细内容,请https://bbs.eeworld.com.cn/thread-380433-1-1.html…

查看全部问答>