草庐IT

stm32串口空闲中断+DMA传输接受不定长数据+letter shell 实现命令行

作用:空闲中断(IDLE),俗称帧中断,即第一帧数据接收完毕到第二帧数据开始接收期间存在一个空闲状态(每接收一帧数据后空闲标志位置1),检测到此空闲状态后即执行中断程序。空闲中断的优点在于省去了帧头帧尾的检测,进入中断程序即意味着已经接收到一组完整数据,仅需及时对数据处理或将数据转移出缓冲区即可。串口空闲中断在串口无数据接收的情况下,是不会产生的,产生的条件是当清除空闲标志位后,必须有接收到第一个数据后,才开始触发,一旦接收的数据断流,没有接收到数据,即产生空闲中断。简单说:不用频繁进中断,省cpu力气有些地方没写完,后续补上,里边操作系统是freertos,这个不是必须的串口初始化注意点:一

S32K3XX单片机DMA原理深度解析

首先我们需要了解,什么是DMA?DMA的中文名称叫做直接内存访问(DirectMemoryAccess),是一种不需要CPU参与,就能实现数据传输的技术(从一个地址空间到另一个地址空间)。也就是说,在不需要CPU插手的情况下,完成内存与外存之间的数据传输,从而CPU可以被解放出来,从事其他的工作。在S32K3XX系列单片机的参考手册中,直接称呼为EnhancedDirectMemoryAccess(eDMA),显然是与传统意义上的DMA有所不同。那么,eDMA究竟是何方神圣?与普通的DMA又有什么区别呢?目录1简介1.1DMA系统框图1.2各模块简介1.3特点2工作流程概述2.1基本工作流程2

STM32 HAL库:使用C标准库或MicroLIB实现printf && 多串口使用printf输出 && 结合DMA实现printf && 常见问题总结

综合多篇文章对实现printf进行总结,本篇博客包含内容如下:使用MicroLIB实现printf(Windows环境下和Linux环境下)使用C标准库实现printf(也就是不需要配置工程打开MicroLIB)结合DMA实现printf(针对大量数据、OS任务间使用printf冲突)多串口通信(当有多个串口通信设备时)printf使用常见问题如果本篇博客对你有帮助的话,记得点个赞哦!谢谢大家!😀😀😀😀😀😀文章目录一、需打开MicroLIB版打开MicroLIB,后面的步骤基于此(重点!!!!!!!)1.1方案一1.1.1修改usart.cⅠ添加头文件stdio.hⅡ定义结构体FILEⅢ重写f

STM32学习----ADC模数转换(轮询、中断、定时器、DMA)

什么是模拟数据        模拟数据是指在一定时间范围内连续变化的信号,该信号的取值可以是任意实数值。例如,声音、温度、压力等物理量在不同时间内的变化可以表示为模拟数据。在数字化处理中,需要将模拟数据转换为数字信号,以便于进行数字化处理和存储。什么是数字数据        数字数据是指在一定时间范围内以离散形式表示的信号,该信号的取值只能是一组预定义的数字。例如,计算机中的数据、音频、视频等信号都是以数字形式表示的。在数字化处理中,模拟数据需要通过模数转换器(ADC)转换为数字数据。什么是模数转换        模数转换是将模拟信号转换成数字信号的过程。它的基本原理是利用采样定理,将连续时间

【嵌入式系列】一文彻底理解DMA

DMA(DirectMemoryAcess)1.什么是DMA,有什么作用?2.DMA传输过程简述2.1.DMA普通传输过程2.2.DMA指针递增传输过程2.3.DMA循环传输过程2.4.DMA双缓冲区传输过程3.STM32F4DMA的主要特性4.DMA功能说明4.1.DMA框图4.2.传输端口4.3.通道选择——DMA_SxCR寄存器中的CHSEL[2:0]控制4.4.仲裁器4.5.FIFO——DMA_SxFCR寄存器DMDIS位置0启用FIFO4.6.DMA事务4.7.传输模式4.8.指针递增4.9.单次传输和突发传输4.10.循环模式4.11.双缓冲区模式4.12.FIFO阈值与突发配置4

【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);/*