OpenEdv-开源电子网

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

萌新求教一个关于CPU和外设工作频率不同的问题

[复制链接]

3

主题

9

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2021-6-7
在线时间
7 小时
发表于 2021-7-3 16:05:00 | 显示全部楼层 |阅读模式
1金钱
以ADC为例,如果设定的ADC的频率比CPU的频率快,(ADC时钟设置APB2四分频,采样时钟周期为3,那么其采样频率有1.4MHz,CPU的sysclk取HSI,串口波特率为9600),main函数中需要输出ADC处理数据. 那ADC是处理一个数据,然后等待串口输出完毕,多余的时钟周期空转?还是ADC以自己的频率不停工作,没有及时发出去的数据就丢包?


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3359
金钱
3359
注册时间
2011-11-10
在线时间
207 小时
发表于 2021-7-4 09:11:25 | 显示全部楼层
给了频率,不一定就干活啊,要干活得CPU下指令。
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4105
金钱
4105
注册时间
2018-8-14
在线时间
696 小时
发表于 2021-7-4 11:44:27 | 显示全部楼层
不管你ADC数据是否要处理, usart 9600的速度根本就不足以传送1.4MHz 的ADC数据
假设你的ADC是12位, 以1.4MHz的速度采样, 每秒要通过uasrt发送的数据(支节) = 2* 1.4 * 10^6 Byte = 2800000 Bytes, usart 的波特率就需要 10*2800000 = 28,000,000.  改用别的传送方式吧
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2021-6-7
在线时间
7 小时
 楼主| 发表于 2021-7-5 09:43:54 | 显示全部楼层
edmund1234 发表于 2021-7-4 11:44
不管你ADC数据是否要处理, usart 9600的速度根本就不足以传送1.4MHz 的ADC数据
假设你的ADC是12位, 以1. ...

我不是想获得ADC的所有处理结果,我是想获得一段时间的最大值。我想搞知道ADC工作频率是否与CPU独立,问题是出在ADC会等CPU,不能以设定的频率采样,还是ADC自顾自处理数据,不能及时被处理的数据会丢包,导致不是所有的数据参与比较
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4105
金钱
4105
注册时间
2018-8-14
在线时间
696 小时
发表于 2021-7-5 11:23:09 | 显示全部楼层
1, 用DMA把ADC数据放Buffer然后一块处理, 这能够帮你省下很多时间。
2, 用DMA发送你的串口数据。

这样剩下来的时间你都可以用来处理数据。
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2021-6-7
在线时间
7 小时
 楼主| 发表于 2021-7-5 12:03:10 | 显示全部楼层
edmund1234 发表于 2021-7-5 11:23
1, 用DMA把ADC数据放Buffer然后一块处理, 这能够帮你省下很多时间。
2, 用DMA发送你的串口数据。

我开了DMA,但效果并不好,DMA的速度是按照ADC的速度来的吗?CPU从内存中取数据来处理的速度跟不上ADC向内存送数据的速度怎么办?CPU进行数据比较,取完第一个数据,准备取第二个数据时,内存里的数据已经被刷新了好几遍
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4105
金钱
4105
注册时间
2018-8-14
在线时间
696 小时
发表于 2021-7-5 12:21:17 | 显示全部楼层
sunonsun 发表于 2021-7-5 12:03
我开了DMA,但效果并不好,DMA的速度是按照ADC的速度来的吗?CPU从内存中取数据来处理的速度跟不上ADC向 ...

你用的是什么芯片?
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2021-6-7
在线时间
7 小时
 楼主| 发表于 2021-7-5 14:10:43 | 显示全部楼层
edmund1234 发表于 2021-7-5 12:21
你用的是什么芯片?

stm32f407zgt6, 被测信号频率大概1kHz。我总是捕捉不到最大值,不确定是不是ADC处理,CPU数值比较,串口发送中的某个环节的速度制约了整个过程,导致ADC时钟空转,或者ADC输出的数据没有参与比较就被丢掉了
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4105
金钱
4105
注册时间
2018-8-14
在线时间
696 小时
发表于 2021-7-5 14:58:59 | 显示全部楼层
sunonsun 发表于 2021-7-5 14:10
stm32f407zgt6, 被测信号频率大概1kHz。我总是捕捉不到最大值,不确定是不是ADC处理,CPU数值比较,串口 ...

407跑168Mhz,怎么可能处理不完, 用翻转IO的方法找出CPU的时间都跑哪儿去吧
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 11:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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