草庐IT

【STM32笔记】STM32的串口数据收发基础(四)(USART DMA模式)

   在STM32中编写串口通信数据收发有三种方式:轮询模式(阻塞方式),中断模式(非阻塞方式)以及DMA模式。一.串口通信(DMA模式)   打开STM32CubeMX,前部分配置流程如串口数据收发基础(三)节里一样。配置好USART1的基本参数,开启定时器中断后,接下来就要开启USART1的DMA。设置好之后,设置存储路径,选择所用IDE,然后点击GENERATECODE创建工程,openproject打开工程进行全局编译。二.HAL库中串口收发的重要函数(DMA模式)  1.DMA模式下发送数据函数:HAL_UART_Transmit_DMA(UART_HandleTypeDef*hua

STM32硬件IIC卡死问题和DMA发送数据异常问题

STM32硬件IIC卡死问题和DMA发送数据异常问题问题1描述:一直听说STM32的硬件IIC有问题,我平时做项目一直没有遇到过,这次做项目发现硬件IIC居然会自己卡死,现象就是IIC发不出数据,用逻辑分析仪捕捉不到任何电平,必须要重启单片机才能正常,接下来说一下我的硬件环境:STM32作为主机,IIC总线上挂载这AT24C02和一个流量传感器,但是这个流量传感器有问题,他在不上电的时候IIC总线一直输出1.8V(IIC信号线反向给流量传感器供电导致的),这就导致STM32初始话完IIC后就处于卡死状态(STM32检测到IIC线异常后就直接卡死了,不管你程序怎么发送信号电平),所以最终解决办法

STM32_ADC————ADC+DMA多路数据传输,看门狗中断,传感器控制LED

本文主要内容:一:介绍ADC与DMA的基本情况与初始化二:利用ADC+DMA+看门狗中断+传感器控制LED灯代码三:总结实验过程中碰到的错误与问题实验说明:通过DMA转运ADC的数据,设置ADC的中断看门狗阈值,当光敏传感器的ADC采样值在看门狗高低阈值中间,不触发中断,如果超过看门狗的高低阈值就会触发中断,LED灯进行闪烁,并且利用串口打印出四个通道的ADC采样值(本实验传感器的D0口接PA0)。1:介绍ADC与DMA的基本情况与初始化:(1):ADC的模块框图,更多内容可以参考STM32官方文档。 (2)根据上图对照总结出大致ADC的执行流程图如下。 根据STM32F103系列可知,ADC

STM32使用DMA实现GPIO的高速翻转

STM32使用DMA实现GPIO的高速翻转一、前言二、原理三、配置IO口四、配置DMA五、程序内容5.1gpio配置5.2keil中添加`.C`和`.h`文件(需要DMA发送控制GPIO的数组波形文件)==如不想这么麻烦的可以略过,在main函数中定义一个数组即可,因为我的数组太大了,而且为了方便更改,故单独存了一个文件==5.3DMA实现GPIO的高速翻转代码实现==(memorytomemory模式)==5.4输出结果总结一、前言接着上一篇博客的内容,上一篇博客实现了定时器输出pwm,这次我们使用DMA来驱动gpio高速翻转,来探索一下stm32h750的gpio翻转极限二、原理这里大家可

STM32CubeMX配置-ADC多通道配置(DMA) (STM32G070)

一、写在前面        ADC通道采集数据的两种方式:    1)ADC轮询采集数据直接放到数组中;    2)采用中断方式,ADC采集完成进入中断,中断关闭ADC采集,取数据之后再打开ADC采集。以下按第一种方式实现:二、ADC多通道配置1)配置通道及参数  如果要控制轮询采样通道,设置Sequencer参数,Rank1,2,3即为采样通道顺序。    2)配置DMA3)配置引脚二、配置RCC、SYS、时钟及ProjectManager,生成代码。三、代码部分 需手动开启ADC采集:HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&ADC1_Value,6);/*

STM32H750串口接收数据出现丢字节以及使用DMA出现内容错误问题

问题描述我们通过485和第三方设备进行通信时,是通过接收中断完成数据的接收,但是在实际测试过程中发现设备的应答内容会出现偶发的缺少一个字节。后续经过问题的分析将串口的接收机制改为使用DMA方式接收数据,但是由于该设备会涉及到两个扫描指令,两个指令的应答内容是不同的,但是在实际测试中发现本属于第二个指令的应答内容会出现在第一个指令应答的位置。问题分析字节丢失分析初次遇到此问题时怀疑是设备应答出现了异常,但是通过并联一个485监听发现出现字节丢失问题时报文内容时正常的。那也就是说整个数据链路到H750都是正确的,问题也就是出在了750内部了,我们再结合数据接收的方式:通过接收中断逐个字节获取设备应

【工具使用】STM32CubeMX-DMA配置(ADC+DMA 和 UART+DMA)

一、概述    无论是新手还是大佬,基于STM32单片机的开发,使用STM32CubeMX都是可以极大提升开发效率的,并且其界面化的开发,也大大降低了新手对STM32单片机的开发门槛。    本文主要讲述STM32芯片的DMA的配置及其相关知识。二、软件说明    STM32CubeMX是ST官方出的一款针对ST的MCU/MPU跨平台的图形化工具,支持在Linux、MacOS、Window系统下开发,其对接的底层接口是HAL库,另外习惯于寄存器开发的同学们,也可以使用LL库。STM32CubeMX除了集成MCU/MPU的硬件抽象层,另外还集成了像RTOS,文件系统,USB,网络,显示,嵌入式A

STM32之DMA

DMA介绍DMA(DirectMemoryAccess,直接存储器访问)提供在外设与内存、存储器和存储器、外设与外设之间的高速数据传输使用。它允许不同速度的硬件装置来沟通,而不需要依赖于CPU,在这个时间中,CPU对于内存的工作来说就无法使用。DMA的意义数据搬运的工作比较耗时间。数据搬运工作时效要求高(有数据来就要搬走)。没啥技术含量(CPU节约出来的时间可以处理更重要的事)。DMA是数据搬运工,代替CPU搬运数据,为CPU节省资源让CPU做其他操作。DMA搬运的数据存储器:存储器包括自身的闪存(flash)或者内存(SRAM)以及外设的存储设备都可以作为访问的源或者目标。外设:外设指的是s

DMA详解及应用(嵌入式学习)

DMA0.前言1.DMA作用2.DMA特性3.DMA寄存器4.DMA的增量或者循环模式5.练习0.前言DMA(DirectMemoryAccess,直接内存访问)是一种计算机系统中用于高效地实现数据传输的技术。它允许数据在外设和内存之间直接传输,而无需CPU的干预和数据复制。传统上,在计算机系统中,外设(如硬盘、网络适配器、音频设备等)与内存之间的数据传输通常需要通过CPU进行中转。这意味着CPU需要花费大量的时间和计算资源来处理数据传输操作,同时限制了CPU执行其他任务的能力。而DMA技术的引入解决了这个问题。DMA控制器是一种专用的硬件设备,它可以直接访问系统内存和外设,完成数据的传输。当

Note10:基于STM32H7+HAL+CubeMX+DMA+SPI+串口中断+定时器+RTC的多传感器数据采集系统(2*ADXL355和ADXL375通过Sync时序同步)

本文的初衷一方面是将我的一些关于STM32开发方面浅显的个人经验分享给初学者、并期望得到大佬的批评指正,另一方面是记录自己的实验过程便于回顾。我预感应该要写很多,不过鉴于之前的数篇笔迹中,对于SPI/DMA/ADXL3XX系列加表的使用已经详细描述过了,所以这篇博客只记录系统构建的整体流程。摘要:通过STM32H743VIT6驱动两片adxl355和1片adxl375,采用SYNC信号同步控制方式实现3个传感器的数据,采用FIFO流模式,采用3组SPI+DMA实现数据的同步采集,采用串口1+DMA进行数据传输,采用串口2+中断构建指令系统,具体指令及对应的功能如下图。通过定时器+计数实现了频率