草庐IT

Stm32407串口1空闲中断+DMA收发(基于标准库实现)

文章目录1简介1.1什么是串口空闲中断1.2DMA简介1.3DMA模式1.4DMA请求映射1.4DMA配置简述2DMA收发代码实现2.1定义收发结构体2.2DMA配置2.3串口配置2.4中断配置2.5DMA发送1简介stm32串口的配置很简单,这里就不赘述了,使用USART_SendData()阻塞模式发送数据,或是接收中断配置“接收缓冲区非空”USART_IT_RXNE,这种做法效率很低,而且来一个数据中断一次数据处理起来也麻烦。这里基于STM32F407提供一种串口空闲中断+DMA接收的方式,通过库函数编程实现。1.1什么是串口空闲中断初学者一开始学习配置串口中断时经常将中断条件配置为US

STM32 TIMER_TRGO触发+ADC采集 + DMA传输 + 中断均方根处理 实现三相电压显示

STM32TIMER_TRGO触发+ADC采集+DMA传输实现三相电压采集STM32TIMER_TRGO触发+ADC采集+DMA传输+中断均方根处理实现三相电压采集首先,是实际采集的三相电压值,用excel处理了下:采集个电压,为什么这么复杂。开始我也是直接用ADC采集,然后delay,再采集,然后delay,再采集……最后数据处理……问题是如果我们用单片机裸跑,每次delay都会卡死,每路采集五个周期要100ms,三路电压就要300ms,试想每1s更新显示结果,有300ms就在采集电压,你能接受不?如果用ucos或rtos等多线程,会好点,但是由于采集时间精确度差,导致采集电压跳变很厉害,你

STM32CubeMX配置HAL库实现SPI-DMA的递归调用

对于快速入门STM32CubeMX,可以参考【STM32】HAL库STM32CubeMX系列学习教程——————————一、硬件参数与配置:核心:STM32F407ZET6  外设ADC:ADS1258  数量:3个  ※核心与3个ADC使用SPI总线“一主多从”方式连接,PCB布线的方式与下图一致。※在电路板上STM32与三个ADS1258在同一直线上分布,STM32在一端,三个ADC依次排布。※离STM32最远ADC的DRDY硬件管脚与STM32的EXTIline4interrupt连接。 1.1STM32CubeMX的设置 1.1.1时钟树配置如下:  1.1.2 ADC输入的CLK由S

DMA的解读

一、DMA简介直接存储器访问(DirectMemoryAccess),简称DMA。前述的对I/O设备的数据搬运操作,无论是轮询方式还是中断方式,都需要CPU读写参与其中,在要进行大量数据传输时,CPU的利用效率将大大降低;DMA是CPU一个用于数据从一个地址空间到另一地址空间“搬运”(拷贝)的组件,数据拷贝过程不需CPU干预,数据拷贝结束则通知CPU处理。因此,大量数据拷贝时,使用DMA可以释放CPU资源。DMA就是基于以上设想设计的,它的作用就是解决大量数据转移过度消耗CPU资源的问题。有了DMA使CPU更专注于更加实用的操作–计算、控制等。二、STM32F1的DMA控制器ARMCortex

【正点原子FPGA连载】第二十一章AXI DMA环路测试 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1)实验平台:正点原子MPSoC开发板2)平台购买地址:https://detail.tmall.com/item.htm?id=6924508746703)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-340252-1-1.html第二十一章AXIDMA环路测试DMA(DirectMemoryAccess,直接存储器访问)是计算机科学中的一种内存访问技术。它允许某些计算机内部的硬件子系统可以独立地直接读写系统内存,而不需中央处理器(CPU)介入处理。DMA是一种快速的数据传送方式,通常用来传送数据量较多的数据块,很多硬件系统会使用DMA,包括硬

STM32-单通道ADC采集(DMA读取)实验

关于ADC的一些原理和实验我们已经有了2篇笔记,链接如下:关于ADC的笔记1_Mr_rustylake的博客-CSDN博客STM32-ADC单通道采集实验_Mr_rustylake的博客-CSDN博客实验要求:通过ADC1通道1(PA1)采集电位器的电压,并显示ADC转换的数字量和换算后的电压值。我们通过下表可以知道DMA1通道1的外设对应的就是ADC1的读取。首先确定我们的最小刻度,Vref=3.3V,所以0V接下来确定转换时间。采样时间239.5个ADC时钟周期为例,可以得到转换时间为21us。时间转换公式参考如下公式:Tcvtmin=(12.5+X)周期=(12.5+X)/(12MHz)

FT2004(D2000)开发实战之网口stmmac报错调试(Failed to reset the dma)

一报错信息概述主芯片为飞腾FT2004,网口MAC为stmmac,phy芯片为ar8035,工作接口为RGMII接口具体报错信息如下所示:[21.870860]IPv6:ADDRCONF(NETDEV_UP):eth0:linkisnotready[21.951300]Atheros8035ethernetstmmac-0:04:attachedPHYdriver[Atheros8035ethernet](mii_bus:phy_addr=stmmac-0:)[22.064603]stmmaceth2820c000.eth:Failedtoresetthedma

STM32F103:ADC采样——定时器触发+DMA传输

实现ADC多通道采样,采用DMA传输,采样由定时器触发初始化代码:voidAdc_Init(void){ GPIO_InitTypeDefGPIO_InitStructure; DMA_InitTypeDefDMA_InitStructure; ADC_InitTypeDefADC_InitStructure; TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure; TIM_OCInitTypeDefTIM_OCInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Per

通过修改HAL_UART_Transmit_DMA()函数,解决串口发送DMA只能发送一次的问题

参考文章:1. http://t.csdn.cn/FT6Mg         2. http://t.csdn.cn/ejFIQ今天用STM32F1的HAL库开发遇到一个奇怪的问题,在主函数循环调用中用串口1的DMA请求,将内存中的数据发送给串口,无论延迟Delay开了多大,始终只能发送一次DMA数据。后来在网上查阅大佬的资料终于有了思路。废话不多说,先上代码:在stm32f1xx_hal_uart.c文件中找到HAL_UART_Transmit_DMA()函数实现,在解锁操作__HAL_UNLOCK;后添加代码:huart->gState=HAL_UART_STATE_READY; 编译以后

【STM32CubeIDE入门】(三)USART的配置及使用(DMA)

目录一、基础配置二、USART配置 1、通用配置 2、DMA设置三、printf重定向四、熟悉USART常用函数 1、有关Timeout设置问题 2、HAL_UART_GetState()函数 3、HAL_UART_Transmit_IT()函数 4、HAL_UART_TxCpltCallback()函数 5、HAL_UART_Receive_IT()函数& HAL_UART_RxCpltCallback()函数 6、HAL_UART_Receive_DMA()函数四、普通收发模式 1、发送示例 2、接收示例五、DMA收发模式        如果不知道如何创建工程文件的可以参考我之前写的一篇文