[其他ST产品] stm32 DMA理论+实践

[复制链接]
2172|82
 楼主| 范德萨发额 发表于 2023-11-25 12:32 | 显示全部楼层
3 使能ADC_DMA的信号 17026656178f8bf5b7.png
 楼主| 范德萨发额 发表于 2023-11-25 12:33 | 显示全部楼层
4 配置DMA 5665617903e6c92.png
 楼主| 范德萨发额 发表于 2023-11-25 12:33 | 显示全部楼层
1 更改计数器的值

2 关闭软件触发

3 填写存储器的地址,我们这里定义了一个数组,直接将数组名填上就行,然后强转为32位,
46348656179111775b.png
 楼主| 范德萨发额 发表于 2023-11-25 12:33 | 显示全部楼层
4 改为接受半字 16位,因为AD转换的数据是12位存在了16位的寄存器里面,所以我们这里也只接受16位就够了

5 填写外设地址 这里ADC1为一个结构体指针,所以还是需要取地址的

6 改为半字(转换出来就是16的寄存器在存

7 关闭DMA的地址自增,我们只需要从转换的地方一直获取数据就行,不需要他自增地址
 楼主| 范德萨发额 发表于 2023-11-25 12:33 | 显示全部楼层
5 启动部分 9584965617926e17e8.png
 楼主| 范德萨发额 发表于 2023-11-25 12:33 | 显示全部楼层
1  首先DMA的触发,因为这里我们还是单次触发,所以还是需要停一下触发之后重置计数值,然后启动

2  启动

3 等待DMA传输完成,因为DMA传输完成肯定在转换完成之后,所以只用判断DMA是否转换完成即可
 楼主| 范德萨发额 发表于 2023-11-25 12:34 | 显示全部楼层
6 主函数
  1. int main(void)
  2. {
  3.         Usart_Config();
  4.   MyAD_Init();
  5.        
  6.         printf("addr[0]=%d",addr[0]);
  7.   while(1)
  8.         {       
  9.                   AD_GetValue();
  10.                   printf("%d %d\r\n",addr[0],addr[1]);
  11.                   Delay(5000000);
  12.         }       
  13. }
 楼主| 范德萨发额 发表于 2023-11-25 12:34 | 显示全部楼层
这就是很正常的测试是否有值了,大家可以自己发挥

结果(扭动可变电阻正常变化,第二个引脚直接测的3.3 所以基本是满量程

139426561794aeeba0.png
 楼主| 范德萨发额 发表于 2023-11-25 12:34 | 显示全部楼层
2) DMA连续转换+扫描模式
很简单,对比刚刚的单次采集更改如下
201916561795622575.png
 楼主| 范德萨发额 发表于 2023-11-25 12:34 | 显示全部楼层
1 更改ADC触发模式
将ADC的单次触发改为连续触发
4740865617969491db.png
 楼主| 范德萨发额 发表于 2023-11-25 12:35 | 显示全部楼层
2 循环模式
这里开启循环模式,等于计数器减到0后,会自动帮你重载计数器
6628965617975a1cb5.png
 楼主| 范德萨发额 发表于 2023-11-25 12:35 | 显示全部楼层
3 加入触发
在DMA最后加上触发即可

4 删除函数
删除我们单次触发写的AD_GetValue()即可,这里只需要触发一次就可,不需要我们来判断是否转换完成,他会循环刷新,轮不到我们判断的。
 楼主| 范德萨发额 发表于 2023-11-25 12:35 | 显示全部楼层
5 主函数
我们只需要做个初始化即可,这样转换值就已经在自动刷新和转运了。
758036561799299839.png
 楼主| 范德萨发额 发表于 2023-11-25 12:35 | 显示全部楼层
6 转换结果
2129656179a2ae776.png
Clyde011 发表于 2024-7-21 07:24 | 显示全部楼层

然后将其用作在PCB组装过程中放置在另一个板上的独立部件。
公羊子丹 发表于 2024-7-21 08:17 | 显示全部楼层

选择测试方法和测试参数是检测过程中的重要步骤
万图 发表于 2024-7-21 09:20 | 显示全部楼层

它产生的噪声是对地噪声
Uriah 发表于 2024-7-21 10:23 | 显示全部楼层

然后在专用站中检查每个半孔,
帛灿灿 发表于 2024-7-21 12:19 | 显示全部楼层

抑制各种高速信号产生的电磁波向外发射
周半梅 发表于 2024-7-21 15:18 | 显示全部楼层

对于信号回路的峰值电压防护电路不应动作,通常在信号回路中,防护电路的动作电压是信号回路的峰值电压的1.3~1.6倍。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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