STMCU小助手
发布时间:2022-11-1 17:10
|
1.工具 IAR STM32CUBEMX 开发板STM32F411VET6 2.工程配置 2.1 单通道 2.1.1系统时钟RCC、SYS配置
2.1.2 ADC配置,这里强调2点, 使用ADC1——>IN4(通道4),本案例使用F4开发版,在12bit分辨率下,最小转换时间为15周期(最小转换时间 > 采样时间,具体可以百度),本案例转换时间为 15/16M = 0.937us (F4)最小转换时间: 12bit——>15周期 10bit——>13周期 8bit——>11周期 6bit——> 9周期
注入模式,可以这样理解:把注入模式看作为中断,若果有注入,注入优先(相较于规则),完成之后在继续规则模式
2.1.3 配置工程文件名、路径、ToolChain/IDE——>GENERATE CODE ,完成之后打开项目 main.c
2.2 单通道+DMA 2.2.1 STM32CUBEMX配置与单通道大致一样,需要修改的见下图(开启DMA请求,并在DMA配置中添加ADC1)
——>注意:DMA配置里要选择 Mode选择Circular,Data Width选择 Word,(如果是HalfWord,则会将采集到的数值进行合并,范围超出2^12 = 4096)
2.2.2 配置工程文件名、路径、ToolChain/IDE——>GENERATE CODE ,完成之后打开项目 main.c
DMA:搬运数据思想 将一块内存的数据搬到另外一块内存,(注意内存可位于系统内部,也可位于外部设备,其实就是一块地址,形象的可理解为buf[], 某个寄存器等。) 在搬运的时候,1次搬运的数据大小必须是2的n次方(n= 0,1…),只要设置好相应外设的dma映射通道号(这一部分是由hardware designer设计的),以及其他相应配置,并使能DMA功能, 它就自动开始搬运了,(内存到内存这种方式是相对较快的)。 2.3 多通道+DMA 2.3.1 STM32CUBEMX配置与单通道+DMA大致一样,需要修改的见下图(2个通道IN4、IN6, 开启连续扫描模式;并注意Rank下选择不同的通道,不配置默认通道 相同,我刚开始没有配置,结果2个引脚采集的值一样,浪费了半天时间找原因…)
2.3.2 配置工程文件名、路径、ToolChain/IDE——>GENERATE CODE ,完成之后打开项目 main.c
函数HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length);//第三个参数我还是不明白,但是支持数据量,库函数这样解释: 很多人说是数据量,不是长度,我很纳闷(数据量分2种情况: 1.单通道 1次将采集的length个数据存放到存储区,然后执行下一次采集存放, 2.多通道 1次将采集的length个数据存放到存储区,然后执行下一次采集存放,length应为通道数的倍数 保证每个通道的数据量持平 ———————————————— 版权声明:gfanbei |
经验分享 | 使用GPIO+DMA+TIM模拟SPI通信演示
经验分享 | 为什么重启ADC的DMA传输要先停掉ADC?
经验分享 | STM32 ADC过采样话题
经验分享 | 多个SPI的DMA传输为何仅1个有效?
经验分享 | STM32 DMAMUX应用示例
经验分享 | STM32双定时器+ADC+DMA实战案例
经验分享 | STM32U5系列TIMER+DMA+DAC应用演示
经验分享 | 基于STM32片内信号的ADC应用演示
经验分享 | STM32F0 ADC结果挪位的问题分析及解决
经验分享 | 基于STM32H7 UART 空闲事件及DMA传输示例
微信公众号
手机版