STM32F429在HAL库上对DMA的研究及其测试

1DMA背景知识介绍

DMA全称Direct Memory Access,即存储器直接访问,所谓直接访问,即不需要经由CPU处理,直接在外设寄存器和存储器之间开辟一条通道(或者存储器和存储器之间),用于传递数据。由于无需经过CPU处理,因此,当传递的数据量十分庞大时,可以大大提高系统的运行效率。STM32F429有两个DMA控制器,DMA的工作原理如下图:

 

 每个DMA有多达8个数据流,每个数据流又最多可以映射8种外设寄存器,但是每个数据流最多同时只能映射一个外设。他们的映射关系图下图:

 

2串口中断DMA接收数据

具体原理就不介绍了,直接介绍使用步骤:

第一步:在CUBEMX上对其进行配置,并生成工程文件

 

 

 

 NVIC界面不需要配置,系统会强制你打开DMA中断。

第二步:打开工程文件,找到stm32f4xx_it.c文件,找到DMA2_Stream5_IRQHandler函数

void DMA2_Stream5_IRQHandler(void)
{

    static int Height = 80;

    LCD_ShowString(0,Height,1280,24,24,(char*)USART1MESSAGE);Height+=30; //该函数用于将接收到的信息打印到显示屏,功能类似于printf函数

    __HAL_DMA_CLEAR_FLAG(&hdma_usart1_rx, DMA_FLAG_TCIF1_5);

}

第三步:在mian中开启中断

    huart1.Instance->CR3 |= USART_CR3_DMAR;//开启DMA接收,直接配置寄存器,因为没找到API接口函数
    HAL_DMA_Start_IT(&hdma_usart1_rx, (u32)&huart1.Instance->DR, (u32)USART1MESSAGE, RX_Length);//开启DMA中断接收

运行一次上面两行代码(对,就是一次!),当接收到一共RX_Length个字节(博主设置为200)时,进入中断函数DMA2_Stream5_IRQHandler。运行完后,当再次接收到RX_Length个字节,再次进入该函数,反复如此。

运行结果

 

 

 每隔5ms发送一次,瞬间填满1280*800分辨率的屏幕

讨论

有同学会问,如果想要接收不定长的数据,怎么办,这个问题博主还没解决,但是,在我看来,DMA既然设计的初衷就是帮助CPU减少负担,那肯定是用于大量数据收发的时候,对于少量数据的传输,我认为大可不必采用DMA,普通的串口接收中断完全可以搞定。顺便附上我对串口接收中断的理解:

https://www.cnblogs.com/showtime20190824/p/11407923.html

转载于:https://www.cnblogs.com/showtime20190824/p/11487602.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F429 HAL ADC DMA是指在STM32F429系列微控制器上使用HAL库进行ADC数据采集,并使用DMA传输数据的功能。 STM32F429微控制器是STMicroelectronics公司推出的一款高性能ARM Cortex-M4内核的单片机。HAL库是STMicroelectronics公司提供的用于快速开发STM32微控制器的硬件抽象层。ADC(Analog to Digital Converter)是模数转换器,用于将模拟信号转换为数字信号。DMA(Direct Memory Access)是直接内存访问技术,能够在微控制器和外设之间高速传输数据。 使用STM32F429 HAL ADC DMA功能,首先需要初始化ADC和DMA相关的寄存器和参数。然后,配置ADC通道、采样时间和转换模式等。可以使用HAL库提供的函数来完成这些配置。接下来,需要配置DMA传输通道,并设置传输方向和传输缓冲区的地址等参数。然后,使能ADC和DMA,并启动转换过程。转换完成后,会自动触发DMA传输,并将采样到的数据存储到指定的内存地址中。 通过使用STM32F429 HAL ADC DMA功能,可以实现高效的ADC数据采集。由于使用了DMA技术,数据的传输速度比较快,可以更加灵活地处理和存储采集到的数据。同时,HAL库提供了丰富的函数和接口,方便开发者进行配置和操作。使用这些功能,可以简化开发流程,提高开发效率。 总之,STM32F429 HAL ADC DMA功能是一种在STM32F429微控制器上进行ADC数据采集和DMA数据传输的功能,它结合了硬件抽象层库和直接内存访问技术,可以方便地实现高效的数据采集和传输。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值