最近想利用单片机的IO口模拟UART,要求可以实现高波特率发送,查阅了ST的官网,发现了编号为 AN4457 Application note 的文档有介绍:Implementing an emulated UART on STM32F4 microcontrollers 顿时发现了一扇新大门啊。另外又参考了阿莫电子的一篇文章:在STM32上实现高性能模拟UART。这
转载 2024-02-10 16:51:04
195阅读
在工程中串口的应用广泛,同时出现的问题也最多,下面是在开发过程中遇到的串口DMA问题。在大量数据发送的过程中出现很多奇怪的现象,但是之前的DMA也是这么使用的,没有出现问题,接下来根据特殊现象进行解决 1.在DMA 实现大量数据导出时(文件导出操作),出现单步调试和全速情况下不一样的情况。最后发现在keil调试的时候DMA确实是和调试不同步的,在之前的DMA接收长度的时候也同样出现了同样
转载 4月前
113阅读
文章目录1 简介1.1 什么是串口空闲中断1.2 DMA简介1.3 DMA模式1.4 DMA请求映射1.4 DMA配置简述2 DMA收发代码实现2.1 定义收发结构体2.2 DMA配置2.3 串口配置2.4 中断配置2.5 DMA发送 1 简介stm32串口的配置很简单,这里就不赘述了,使用USART_SendData() 阻塞模式发送数据,或是接收中断配置 “接收缓冲区非空” USART_IT
转载 5月前
166阅读
平台:正点原子,F103ZET本文阅读前提知识:非零基础教程,需要会cubeMX,有点灯基础,有printf重定向基础,有ITM基础。设计思路: 1、UART中断:开启TC(传输完成)中断和IDLE(总线空闲)中断; 2、DMA中断:收发中断均不开启。接收端设计思路: 初始化完成后,就开启DMA_RX,开启IDLE中断; 开启后CPU不用理会,DMA会在搬运串口数据到指定内存。 当收到一帧数据后(
STM32F1应用DMA——串口收发不定长数据使用STM32自带DMA传输数据,可以减轻CPU负担,只需设置一些参数即可发送想要发送的数据,以下是STM32F1系列芯片测试过的部分代码,可实现DMA串口收发数据。下图来自STM32官网的手册,RM0008.pdf发送数据逻辑图:接收数据逻辑图 下面是使用STM32 HAL库进行配置,大致实现思路都是一样的,先开启串口初始化(开启DMA传输),相应的
转载 2024-10-18 11:33:50
1413阅读
1.  BKP可以用来保存数据       BKP中包括了42个16位的寄存器,共可保存84字节的内容,它们由VBAT的供电来维挂。2.  BKP内保存的数据可以被毁灭(如果有人希望恶意得到这些数据的话,令其丢失比保护数据更重要)。STM32提供了一种称之为TAMPER的机制来完成。中文译为“侵入检测”,这需要占用一个
转载 2024-03-28 15:00:57
56阅读
今天在测试扫码器的时候无法得到二维码的值,用串口和LCD排查后发现是没有进入中断。Test1 没有显示中断内信息: 注:123是我在主函数中测试的信息,排除其他原因没有执行完主函数。  在多次借鉴网上大佬的代码手动修改后无果,后来用其他串口——串口3发现可以正常进入中断。于是我把串口5的初始化改得和串口3一样并正常运行,但是发现还是没有进入中断。最后在第二天
DMA就不解释是什么了,很容易理解。探索者开发指南只有DMA串口发送,所以愣是想实现串口接收,当然了也有DMA_SPI收发、DMA_I2C收发等。即:外设(串口)DMAmemory(缓存)没CPU什么事儿。 DMA发送一般都会规定一次发送的数据长度。接收也会涉及到接受长度的问题:定长接收,不定长接收,这里只做了不定长接收的例子。借鉴了大佬的代码:(143条消息) STM32之串口DMA
本文在前两篇USART串口通信的基础上,使用DMA控制器来实现串口通信 文章目录一、DMA1.DMA简介2.DMA主要特性3.部分代码原理二、实验代码三、实验结果四、总结 一、DMA1.DMA简介DMA全称Direct Memory Access,即直接存储器访问。直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。DMA传输方式无需CPU直接控制传输,也没有中
前言本实验是在原子哥的DMA实验的基础上进行修改,添加了DMA串口数据接收功能。接收到指定数据时LED1的状态翻转。内附源码下载链接:添加链接描述注意:在编写DMA串口数据收发时,DMA发送和接收传输的数据量需要单独进行初始化,在每次传输数据时都需要进行初始化。 如下图所示:一、STM32 DMA介绍**DMA详尽介绍可网上查找,这里就不在细说。** 如果对DMA不是很了解可参考另一位博主的文章,
转载 2024-09-30 10:09:01
345阅读
使用DMA串口发送数据,UART1发送数据(串口1)1、STM32CubeMX引脚设置和代码生成1.相关定时器的知识点:2.相关参数选择与设置:2、编写相关中断的C文件1.相关串口发送函数:2.相关串口发送函数的编写:3.改进相关串口发送函数:3、编译工程文件,使用ST-Link烧录,测试串口数据的发送 1、STM32CubeMX引脚设置和代码生成1.相关定时器的知识点:串口有三种传输方式: 1
转载 2024-07-13 09:17:13
554阅读
项目场景:stm32H743使用串口MDA发送数据,减轻MCU负担问题描述通过stm32cubeMX配置串口3,使用DMA发送数据,生成工程后DMA发送数据没问题,但是发送的数据全部为0x00,并不是我发的数据,通过仿真查看发现直到DMA发送函数内部数组的数据都是正确的,但是发出来的数据就变成了0x00,经过各种查找,网上搜索终于发现问题。 参考文章: 1、没修改前串口3DMA发送的数据如下图:
STM32--DMA一、DMA简介二、DMA功能框图工作模式 基于平台:stm32f407ZGT6开发板 STM32DMA一、DMA简介DMA是什么DMA,全称为:Direct Memory Access,即直接存储器访问。其主要功能作用是用于数据传输并且不占用CPU。DMA传输数据功能很强、很高效。为什么说DMA传输数据是高效的呢?这是因为DMA在传输实现高速数据移动过程无需任何 CPU 操
  什么是DMA —- Directional Memory Access, 直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作我们通过以下几方面学习串口DMA: 一、如何理解DMA 对于DMA,打个比方就很好理解: 角色预设: 淘宝店主 —
转载 6月前
139阅读
上一次我们通过HAL库的串口中断回调函数,基本能够实现简单的不定长度读写收发的功能。这一次用DMA来实现,先了解一下DMADMA 直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。CUBEMX中的设置大概如下,其他默认值(记得要开启串口中断)  &nbsp
STM32F4 + DMA +SPI 通讯(打开收发功能) // 开启SPI DMA SPI_DMACmd(SPI2, SPI_DMAReq_Rx, DISABLE); SPI_DMACmd(SPI2, SPI_DMAReq_Tx, ENABLE); SPI在DMA发送时,同时DMA也在接收;需注意DMA发送同时,也要接收;否正 将进入 RXNE请求;
转载 7月前
128阅读
DCMI_DMA无异常时中断回调顺序DCMI_DMA无异常时中断回调顺序 文章目录DCMI_DMA无异常时中断回调顺序single buffer mode:double buffer mode:注意事项 DCMI_DMA无异常时中断回调顺序single buffer mode:1)DMA传输一半中断回调:XferCpltCallback 需要在HAL_DCMI_Start_DMA()后手动添加赋值
一、STM32F4xx系列的SPI特点:1. 支持全双工的3线SPI模式(即SCK, MISO, MOSI)2. 支持单工2线传输,同时数据线可以设置成单向或者双向模式3. 8-bit, 16-bit可选的数据长度4. 可选主从模式,并且支持多主模式5. 主模式8种波特率选择(最高波特率fPCLK/2),从模式最高频率为fPCLK/26. 主从模式下,片选线(NSS)可以设置为硬件控制或
接着上一篇关于STM32H7串口收发问题,继续说,上一篇里边提供了中断接收方式,最大的缺点就是中断过于频繁,为了解决这个问题那就把DMA搬过来,它不就是专门搬用数据的嘛,不用多可惜。首先我们需要大致了解,DMA和外设传送数据,例如串口,我们希望,当一帧数据接收完毕了,有个东西告诉主程序,串口接收到了一帧n个字节的数据存在某个地方,接收过程中你丫别打搅我。DMA就能胜任这个工作,他可以以中断的形式告
STM32 HAL库SPI+DMA接收数据的配置和使用方法材料 材料STM32F767stm32CodeMX第一次使用HAL库做SPI+DMA的接收实验,一开始做的时候网上没有多少资料,踩了一些坑,也是第一次写博客,分享一下自己的经历,让网友少踩一些坑。在使用SPI+DMA的时候,由于SPI协议的特性,主机(stm32)需要产生SCK并且同时接收和发送数据,所以配置DMA的时候,不能只配置SPI
转载 2024-10-18 11:34:04
2179阅读
  • 1
  • 2
  • 3
  • 4
  • 5