这里以STM32F334 Nucleo板作为硬件平台,使用ARM keil MDK集成开发环境。

对3个ADC通道进行连续、扫描转换,转换结果通过DMA传输到内存,再作为TIM2的3个比较寄存器的值,以控制TIM2三个通道的PWM输出。

另外,使用TIM6的更新事件作为ADC转换的启动触发源。本示例中,TIM6的周期远长于TIM2的周期,通过TIM6周期性地触发AD转换。

使用STM32CubeMx进行配置,基本配置过程如下:

  1. 时钟配置【略】。

  2. 配置ADC。选择ADC1的通道7、8、9三个通道,单端输入。

配置有关ADC触发DMA传输的内容【EOC触发;Normal模式;从外设到内存;DMA传输中断开启】

3、TIM2的配置【时基参数/PWM配置】

TIM2的三个通道的PWM初始配置一样。

4、TIM6的配置如下【其中更新事件作为触发输出】

5、生成初始代码,创建工程。

6、添加用户代码。

6.1关闭TIM2的3个通道CCR寄存器的预装载功能,修改即时生效。

__HAL_TIM_DISABLE_OCxPRELOAD(&htim2,TIM_CHANNEL_1|TIM_CHANNEL_2|TIM_CHANNEL_3);【这点不是必须的,根据实际应用来定】

6.2 开启TIM2三个通道的PWM输出并使能TIM2.

HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);

HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);

HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3);

6.3 做ADC的校准操作。

HAL_ADCEx_Calibration_Start(&hadc1,ADC_SINGLE_ENDED);

6.4 做好ADC转换及DMA传输的准备工作。Value_Adc为存放ADC结果的内存数组名。

HAL_ADC_Start_DMA(&hadc1,(uint32_t *)Value_Adc, 3);

6.5 开启TIM6的计数并通过它触发AD转换。

HAL_TIM_Base_Start(&htim6);

6.6 在DMA传输完成中断里添加处理代码。

将3个通道的AD转换结果赋给相应的比较寄存器以达到调整PWM占空比输出的目的。

因为这里DMA是配置为NORMAL模式,需从新开启DMA传输。

7、结果验证。编译运行查看结果。【三路PWM输出,占空比与ADC转换值相关。本示例的ADC输入没有实际信号,只是悬空而已,结果仅做演示。】

******************************************

往期话题链接:

1、基于STM32的TIM+DMA+DAC应用示例

2、基于CubeMx管脚配置时的ADC_IN与GPIO_Analog选项话题

3、一个低功耗应用的案例分析

4、STM32开发者的免费福利---TouchGFX

5、一个跟地址对齐有关的应用异常案例

axi dma 寄存器配置_STM32 ADC多通道转换的DMA传输示例相关推荐

  1. dma和通道的区别_STM32 定时器触发 ADC 多通道采集,DMA搬运至内存

    引言 ADC 的功能是将模拟信号采样得到数字信号,而有些时候,我们需要使用到定时采样,比如在计算一个采集的波形的频率的时候,我们需要精确的知道采样频率,也就是 1 s 内采集的点数,这个时候,就需要使 ...

  2. axi dma 寄存器配置_「STM32」DMA采集单通道,简单数据分析

    什么是DMA DMA,Direct Memory Access,直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式.在DMA模式下,CPU只需要向DMA控制器下达指令,传输数据由DMA ...

  3. STM-32:ADC模数转换器—ADC单通道转换/ADC多通道转换

    目录 一.ADC 模数转换器 1.1ADC简介 1.2 逐次逼近型ADC工作原理 1.3STM32中的ADC基本结构 1.4STM32中ADC的输入通道 1.5STM32中的ADC的四种转换模式 1. ...

  4. axi dma 寄存器配置_FPGA Xilinx Zynq 系列(三十二)AXI 接口

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注FPGA技术江湖,在"闯荡江湖"."行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢. ...

  5. 玩转华为ENSP模拟器系列 | 配置基于VLAN的二层协议透明传输示例

    素材来源:华为路由器配置指南 一边学习一边整理试验笔记,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:玩转华为ENSP模拟器系列 | 合集_COCOgsta的博客-CSDN博客_ensp实验大全 组 ...

  6. stm32cubeide 多通道adc_STM32L0开发——ADC多通道采集,IDE和IAR开发注意事项

    keil开发L0系列是免费的,官方提供许可的.因此建议Keil开发, L011F3由于flash只有8K,因此不建议HAL库,建议使用cubemx+LL(或snippets库). 0.起初,可以参考官 ...

  7. STM32 ADC多通道采集

    ADC多通道采集(阻塞模式.ADC_DMA模式) ADC多通道采集(阻塞模式) ADC多通道采集(DMA模式) ADC多通道采集(阻塞模式) 1.时钟源配置 2.配置RCC时钟(选择第三个选项 Cry ...

  8. STM32F0 定时器触发ADC,多通道采样、DMA传输数据的配置

    本块代码实现了定时器定时触发ADC,多通道采样,并通过DMA进行数据传输到内存的操作. #include    "adc.h" [cpp] view plaincopy #defi ...

  9. STM32学习:通过DMA读取ADC规则通道多通道转换数据

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

最新文章

  1. 关于ceph源码 backtrace 打印函数调用栈
  2. 单源最短路——dijkstra算法
  3. python基础练习_1
  4. Anaconda prompt:Cache entry deserialization failed, entry ignored
  5. allocator_difference_type的实例
  6. Eclipse中要导出jar包中引用了第三方jar包怎么办
  7. MySQL 之 information_schema
  8. android 转屏 多个实例,android – 处理appwidget的多个实例
  9. c语言if的时候自动转换,[求助]IF语句转换SWITCH语句写出!如何
  10. CMU Database Systems - Concurrency Control Theory
  11. 小、巧、快消息队列组件beanstalkd
  12. WPF StackPanel控件使用方法
  13. 智能车PCB设计思路
  14. 360机器学习算法工程师面经
  15. LED跑马灯-位操作
  16. Teemo Attacking
  17. Day2--安装MediaWiki搭建自己的个人百科
  18. 无需排队!NewBing已向全球个人开放,教程一篇就够了
  19. python微信图标制作_Python 一键制作微信好友图片墙的方法
  20. border-radius 构建规则讲解 及 50% 和 100% 的异同

热门文章

  1. java 值传递 引用传递_Java小白进阶之值传递-引用传递
  2. linux网卡握手速率模式,一种基于Linux平台下的网卡速率和双工模式测试的方法与流程...
  3. win10mongodb链接_Windows 10 安装 Mongodb
  4. mysql connector cpp_MySQL Connector/C++(一)
  5. C++socket编程(一):绪论
  6. mysql 取第一条_MySQL索引底层(一)索引底层原理
  7. vs2015移植linux编译,windows平台移植(原linux项目)时,用vs2015开发,碰到的问题及处理方案记录...
  8. ajax页面载入动画,添加加载动画,jQuery的AJAX .load()
  9. java 泛型 泛型接口(Generic Methods)类型形参(Type Parameters)
  10. Spring mvc @ModelAttribute