OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1285|回复: 11

stm32 adc dma与串口的问题

[复制链接]

1

主题

6

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2023-12-12
在线时间
3 小时
发表于 2023-12-12 15:57:29 来自手机 | 显示全部楼层 |阅读模式
我配置adc的dma进行采集,然后在中断服务程序中把dma缓存的数组一个个发到串口上。但是,是不是只有每个dma数组里的采样值是连续的?而不是一直都是连续的?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2023-12-12
在线时间
3 小时
 楼主| 发表于 2023-12-12 15:58:03 来自手机 | 显示全部楼层
有没有什么一直连续的方法 是需要fpga fifo这种吗
回复 支持 反对

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8205
金钱
8205
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-12-13 09:46:52 | 显示全部楼层
DMA循环模式了解一下
专治疑难杂症
回复 支持 反对

使用道具 举报

11

主题

2103

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4588
金钱
4588
注册时间
2015-1-10
在线时间
574 小时
发表于 2023-12-13 11:47:54 | 显示全部楼层
循环模式啊。
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2023-12-12
在线时间
3 小时
 楼主| 发表于 2023-12-13 15:47:56 来自手机 | 显示全部楼层
LcwSwust 发表于 2023-12-13 09:46
DMA循环模式了解一下

你好,多谢回复。我就是用的循环模式circular连续采集了1024个数,

我是在中断服务程序中取出了缓存数组然后做一些处理再打印到串口的,

这样每次取数组之间的时间间隔应该远大于采样间隔吧。
回复 支持 反对

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8205
金钱
8205
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-12-13 15:53:27 | 显示全部楼层
riven123 发表于 2023-12-13 15:47
你好,多谢回复。我就是用的循环模式circular连续采集了1024个数,

我是在中断服务程序中取出了缓存数 ...

然后呢?我不知道你想问什么。
中断服务程序”是什么中断?是采集完1024个数后引发的中断?
进中断时DMA是否还在运行、还在采集数据,是不是前几个数据变成了下个周期的数据?
专治疑难杂症
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2023-12-12
在线时间
3 小时
 楼主| 发表于 2023-12-13 16:32:02 来自手机 | 显示全部楼层
本帖最后由 riven123 于 2023-12-13 16:37 编辑
LcwSwust 发表于 2023-12-13 15:53
然后呢?我不知道你想问什么。
“中断服务程序
”是什么中断?是采集完1024个数后引发的中断 ...

是的,是采集1024个引发的中断。然后,我在下一次进这个中断的时候,是波形上紧接着的第1025-2048个数据,还是说延迟了一会1026-2049个。
回复 支持 反对

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8205
金钱
8205
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-12-13 16:49:34 | 显示全部楼层
riven123 发表于 2023-12-13 16:32
是的,是采集1024个引发的中断。然后,我在下一次进这个中断的时候,是波形上紧接着的第1025-2048个数据, ...

试一下就知道了,会为什么会认为“延迟了一会”?
专治疑难杂症
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2023-12-12
在线时间
3 小时
 楼主| 发表于 2023-12-13 18:02:19 | 显示全部楼层
LcwSwust 发表于 2023-12-13 16:49
试一下就知道了,会为什么会认为“延迟了一会”?

谢谢你
回复 支持 反对

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4417
金钱
4417
注册时间
2018-5-11
在线时间
922 小时
发表于 2023-12-13 20:37:16 | 显示全部楼层
riven123 发表于 2023-12-13 15:47
你好,多谢回复。我就是用的循环模式circular连续采集了1024个数,

我是在中断服务程序中取出了缓存数 ...

没有这么干的。
在DMA中断服务程序中集中打印一堆数据到串口,
肯定会影响实时性啊。
可以先试一下:只在DMA中断服务程序中转存数据,
其它工作交给主程序去做。
另外,DMA的半完成中断了解一下。

我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2023-12-12
在线时间
3 小时
 楼主| 发表于 2023-12-14 10:01:47 | 显示全部楼层
warship 发表于 2023-12-13 20:37
没有这么干的。
在DMA中断服务程序中集中打印一堆数据到串口,
肯定会影响实时性啊。

谢谢你
回复 支持 反对

使用道具 举报

9

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
479
金钱
479
注册时间
2019-12-6
在线时间
149 小时
发表于 2023-12-22 13:58:09 | 显示全部楼层

中断里最好不要用延时函数,最好是中断弄个标志位置1,mian函数里,while循环判断标志位再去做相应的事情(这样做会占用CPU,也就是发送中断的时候,CPU先处理你中断要做的事情,做完了才能做其他);想要发生中断是处理很多事情不占用CPU,那就要用Freertos
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 16:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表