cubemx pwm dma_STM32通过DMA采集多通道ADC数据

DMA简介

直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。

总结来说就是数据不需要CPU的干预完成下面四个过程:

1:外设---内存:I2C/UART等获取数据并送入SRAM。

2:内存---内存:SRAM的两个区域之间。

3:内存---外设:SRAM中预先保存的数据送入DAC产生各种波形。

4:外设---外设 :ADC读取数据后送到TIM1控制其产生不同的PWM占空比。

STM32F10xxx微控制器系列,DMA1有7个通道,DMA2有5个通道。

d469d9bea1c2c182a8a5a2fb57475281.png
6de8fe005b9df31064db2930ac022a1b.png
aa197e22fe179afdff7c3b5178d8eddd.png

一:打开CUBEMX,新建工程,选择的芯片为STM32F103C8T6。

223c1cb6148b96a2569ce8c654a6c91d.png
5a38d9d5d6cc9fcb915fa6ea0f3574d9.png

2:System Core->SYS,选择Trace Asynchronous Sw,用于适配我们的STLink下载器。

cd83570ced0b7d656a44cd6bf4156371.png

3:System Core->RCC,打开所有时钟。

db0bf1edca3ba6afc17b05de46d81ba5.png

4:配置时钟树。

0bb4847e975f0e8ebf7803ded56299b1.png

5:点击Analog->ADC1,勾选IN0,IN1。注意此时时钟树里面ADC时钟会自动分频到14MHz,因为使用ADC时时钟最大不能超过14MHz。配置ADC。

a8a5b88ff240fcc34493c936b6e81420.png

6:点击System Core->DMA->Add,配置DMA,设置为扫描模式,优先级我们随便给。

86d0ce28f2c1a7a46a82570ff9774a78.png

7:点击Connectivity->UISART1。

2bfa026e819b1450fe9b64705b6fba24.png

8:配置工程,选择编译器。

df1b5e116ac874a6945dc431ee5dca36.png

9:点击右上角GENERATE CODE。打开工程。

10:给ADC数据分配空间。

e7f3c675313bb31a2612bbef33bbf669.png

11:printf的重定向。需要包含stdio.h。

3bcdc95f7c3735e7fb2d194ecda91a33.png

12:主函数

76033d9a41df569fa1fd5cf80aea0038.png

13:重要函数。

HAL_ADCEx_Calibration_Start(&hadc1)

执行ADC自动自校准

入口参数1:ADC外设

HAL_ADC_Start_DMA(&hadc1,ADC_Buffer,ADC_Buffer_size);

启用ADC,启动常规组的转换,并通过DMA传输结果。

入口参数1:ADC外设

入口参数2:目标缓冲区地址

入口参数3:从ADC外设传输到内存的数据长度

2502f0bc81201adc77c36f32a40e487a.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值