STM32CubeMX实现DMA模式下的AD转换.pdf

上传人:李医生 文档编号:8940640 上传时间:2021-01-26 格式:PDF 页数:7 大小:646.10KB
返回 下载 相关 举报
STM32CubeMX实现DMA模式下的AD转换.pdf_第1页
第1页 / 共7页
STM32CubeMX实现DMA模式下的AD转换.pdf_第2页
第2页 / 共7页
STM32CubeMX实现DMA模式下的AD转换.pdf_第3页
第3页 / 共7页
STM32CubeMX实现DMA模式下的AD转换.pdf_第4页
第4页 / 共7页
STM32CubeMX实现DMA模式下的AD转换.pdf_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《STM32CubeMX实现DMA模式下的AD转换.pdf》由会员分享,可在线阅读,更多相关《STM32CubeMX实现DMA模式下的AD转换.pdf(7页珍藏版)》请在三一文库上搜索。

1、如何使用 STM32CubeMX 实现 DMA 模式下的 AD 转换 山西大学电子信息工程系,王晓峰 1、在 Pinout 界面配置 ADC 输入通道(引脚) 在左边栏中勾选要选用为 AD 通道的引脚,每个 ADC 对应一组引脚,单击勾选即可。红色为冲突引脚。 2、时钟配置 图中的 PCLK2 即为 AD 模块输入时钟。 但不是最终转换速率, 且最大转换速率不能超过器件上限 (2.4 MSPS) 。 3、参数配置 进入 configuration 界面。点选 ADC 按钮。 模式为独立模式。 ClockPrescaler 是对 PCLK2 进行分频。需要注意,完成一次 AD 需要 15 个周期

2、。所以最终的转换频率是 PCLK2 除 2 再除 15。 Resolution:分辨率:12 位二进制数 Data alignment 数据对齐:右对齐 Scan Conversion Mode:扫描转换模式,如果使用了一个 ADC 下的多个采集通道,需要选择 Enable 模式, 否则只会转换设置的第一个通道。 Continuous Conversion Mode 连续转换模式 Discontinuous Conversion Mode:不连续转换模式 DMA Continuous requests :DMA 连续请求 End of Conversion Selection 转换结束方式选择

3、: 可选择单通道转换完成后 EOC 标志置位或所有转换完成后 EOC 置位。 ADC_Regular_ConversionMode:在此项下,需要手动将每一个 AD 通道添加到 Rank 里。 WatchDog:模拟看门狗 NVIC 部分添加 DMA 流并开启中断(第二行) ,关闭中断模式的中断使能(第一行) 。 Priority 优先级:可根据具体情况设定。但一定保持 SysTick 的优先级最高。 Memory :勾选此项,转换数据将存在 Memory 中,并且地址自加连续存放。此功能对某个通道连续多次 采样很好用,采样数据会自动填满一个数组,方便软件滤波。 Mode :选循环模式,填满数

4、组后自动从头刷新。 Data Width 数据长度:如果是 12 位 AD 转换,此处选半字。 在这个页面可以添加引脚标签。建议保持高阻(不上拉不下拉) 。 4 程序实现 在 STM32CubeMX 生成好的程序基础上。 在 main 设置一个 uhADCxConvertedValue2 的全局变量数组。类型为 Uint16_t。 在 main 函数的初始化区后,while(1)区前,添加: if(HAL_ADC_Start_DMA( ADC1 启动,并开始连续转换,转换结果会放在 uhADCxConvertedValue2 数组中,大小是 100。因为是连续转换, 所以数组中存放的是最近 1

5、00 次转换结果。 5 软件滤波 滤波子函数:可以计算 100 个点的滤波结果。 此函数为中值平均滑动滤波,当然,滑动是 ADC 的 DMA 自动实现的。 uint16_tADC_Average(_IO uint16_t *buff , uint16_t num , uint16_t threshold) uint32_tsigma = 0; uint16_t i=0,j=0,temp = 0; uint16_t temp_buffnum; for(i=0;inum;i+)temp_buffi = buffi; for(i=0;i(num-1);i+) for(j=0;j(num-1);j+) if(temp_buffj temp_buffj+1) temp = temp_buffj; temp_buffj = temp_buffj+1; temp_buffj+1 = temp; for(i=threshold;i(num-threshold);i+) sigma = sigma + buffi; temp = (uint16_t)(sigma / (num - threshold*2); return(temp); 6 Enjoy your Application _

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1