基于stm32的UART高效汲取DMA+IDLE编程示例
本文目标:基于stm32_h5的freertos编程示例
按照本文的形貌,应该可以在对应的硬件上通实行并闻一知十。
先决条件:拥有C语言根本,装有编译和集成的开辟情况,好比:Keil uVision5
使用外设:USART1、USART1、GPIO、SysTick
HAL库版本:STM32H5xx HAL Driver version number 1.1.0
STMCubeMX版本:6.10.0
Keil uVision5版本:V5.38.0.0
实行目标
记录项目学习,学习在项目中举行的UART编程,体验串口的高效汲取,计划一个实行,实现串口的汲取。
场景使用原理图
在我的应用场景中,原理图的内容如下:
我将J4的接口的举行接线,如许就可以计划出一个串口发送,一个串口举行汲取的实行。
UART的三种编程方式
联合 UART 硬件布局,有 3 种编程方法:
① 查询方式:
要发送数据时,先把数据写入 TDR 寄存器,然后判断 TDR 为空再返回。固然也可以先判断 TDR 为空,再写入。要读取数据时,先判断 RDR 非空,再读取 RDR 得到数据。
② 制止方式:
使用制止方式,服从更高,而且可以在汲取数据时制止数据丢失。要发送数据时,使能“TXE”制止(发送寄存器空制止)。在 TXE 制止处理处罚函数里,从步调的发送 buffer 里取出一个数据,写入 TDR。等再次发生 TXE 制止时,再从步调的发送buffer 里取出下一个数据写入 TDR。
对于汲取数据,在一开始就使能“RXNE”制止(汲取寄存器非空)。如许,UART 汲取到一个数据就会触发制止,在制止步调里读取 RDR 得到数据,存入步调的汲取 buffer。当步调向读取串口数据时,它直接读取汲取 buffer 即可。这里涉及的“发送 buffer”、“汲取 buffer”,特殊得当使用“环形 buffer”。
③ DMA 方式:
使用制止方式时,在传输、汲取数据时,会发生制止,还必要 CPU 实行制止处理处罚函数。有别的一种方法:DMA(Direct Memory Access),它可以直接在 2 个装备之间通报数据,无需 CPU 到场。
设置好 DMA(源、目标、所在增减方向、每次读取数据的长度、读取次数)后,DMA 就会主动地在 SRAM 和 UART 之间通报数据:
① 发送时:DMA 从 SRAM 得到数据,写入 UART 的 TDR 寄存器
② 汲取时:DMA 从 UART 的 RDR 寄存器得到数据,写到 SRAM 去
③ 指定的数据传输完毕后,触发 DMA 制止;在数据传输过程中,没有制止,CPU 无需处理处罚。
涉及使用的HAL库API如
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |