[STM32F7] stm32外设之ADC|DAC总结

[复制链接]
3121|68
 楼主| 慢动作 发表于 2022-11-23 15:51 | 显示全部楼层
现在我们对配置做一些小修改,打开连续转换模式
11510637dd11803318.png
 楼主| 慢动作 发表于 2022-11-23 15:58 | 显示全部楼层
因为使能了连续转换,故而不在需要我们手动的去使能转换了
94972637dd29003bd2.png
使用中断触发
 楼主| 慢动作 发表于 2022-11-23 16:00 | 显示全部楼层
在前面的配置中加入中断
62816637dd30be1285.png
使用中断采集
 楼主| 慢动作 发表于 2022-11-23 16:01 | 显示全部楼层
使用中断采集
21687637dd32bc8bab.png
 楼主| 慢动作 发表于 2022-11-23 16:02 | 显示全部楼层
中断采集函数,可以看到这里我又注释了启动中断采集函数,因为前面已经使能了连续转换,所以ADC本身就会不断地触发中断,就不需要我们自己在中断函数里面手动采集了

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
        HAL_ADC_PollForConversion(&hadc1, 50);
        singel_adc = HAL_ADC_GetValue(&hadc1);
//        HAL_ADC_Start_IT(&hadc1);
}
 楼主| 慢动作 发表于 2022-11-23 16:03 | 显示全部楼层
使用DMA来传输
下面我们关掉中断,并打开DMA传输,这里使用半字即可,注意开启循环模式,因为我们前面使能了连续转换模式,所以这里要使能循环模式,那么如果不使能循环模式咋办呢,那就直接也不使能连续转换模式,然后在while循环里面轮询呗,但这样DMA存在的意义就很弱了!!!
39501637dd3b3cb514.png
 楼主| 慢动作 发表于 2022-11-23 16:03 | 显示全部楼层
下面是代码设置
79751637dd3e0beae5.png
 楼主| 慢动作 发表于 2022-11-23 16:10 | 显示全部楼层
可以看到单次转换跟是否使用循环模式息息先关啊
 楼主| 慢动作 发表于 2022-11-23 16:11 | 显示全部楼层
使用定时器触发

无需设置任何中断,事件触发后不断地将数据转移到内存中,所以这里就需要配置DMA来传输,DMA配置如下,这里因为传输大小是16位的,所以设置为半字节即可。
 楼主| 慢动作 发表于 2022-11-23 16:12 | 显示全部楼层
 楼主| 慢动作 发表于 2022-11-23 16:19 | 显示全部楼层
ADC设置如下,无需设置任何中断
16883637dd7a232c25.png
 楼主| 慢动作 发表于 2022-11-23 16:20 | 显示全部楼层
定时器设置如下
63148637dd7cbc5d92.png
 楼主| 慢动作 发表于 2022-11-23 16:25 | 显示全部楼层
在main.c中添加代码
 楼主| 慢动作 发表于 2022-11-23 16:28 | 显示全部楼层
这里接收的数据我们根据我们在DMA中设置的来就行DMA中设置的是半字,所以这里设置为uint16_t即可
25445637dd9a756e63.png
 楼主| 慢动作 发表于 2022-11-23 16:30 | 显示全部楼层
但是他这里用的DMA接收函数,接收的数据参数是32位的,所以要强制转换下,如下所示
41638637dda3487ba7.png
 楼主| 慢动作 发表于 2022-11-23 16:33 | 显示全部楼层
之后我们启用debuge,将变量放到现场表达式查看,可以看到功能正常
81324637ddadeb98cd.png
 楼主| 慢动作 发表于 2022-11-23 16:34 | 显示全部楼层
、多通道采集

多通道轮询采集
配置多通道轮询模式,这里我关闭连续转换,这里配置各个通道要改为对应的通道1234哦
23258637ddb15b4bff.png
 楼主| 慢动作 发表于 2022-11-23 16:37 | 显示全部楼层
编写采集函数代码如下:
  1.           for(uint8_t i=0;i<4;i++)
  2.           {
  3.                 HAL_ADC_Start(&hadc1);
  4.                   HAL_ADC_PollForConversion(&hadc1, 50);
  5.                   adc_value[i] = HAL_ADC_GetValue(&hadc1);
  6.           }
  7.           HAL_Delay(10);
 楼主| 慢动作 发表于 2022-11-23 16:38 | 显示全部楼层
下面我们开启连续转换模式试试
17512637ddbe6448f2.png
帛灿灿 发表于 2024-10-21 08:27 | 显示全部楼层

当电路出现异常过压并达到其击穿电压时
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部