OpenEdv-开源电子网

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

关于STM32F030的ADC1两通道采样的问题

[复制链接]

9

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2024-8-27
在线时间
34 小时
发表于 3 天前 | 显示全部楼层 |阅读模式
1金钱
1748913940066.jpg 1748913915185.jpg 1748913890602.jpg 1748913863382.jpg 各位大佬,本人在做一个STM32F030C8T6(该芯片只有一个ADC1)的项目时,使用ADC1对一路温度以及一路PWM(只要转换速率大于PWM频率,是可以采集的)进行采样检测,但是无论怎么样都无法成功,单独开启采集一路数据都是正确的,但是只要开启两路温度采集数据就会出错,就算采用两通道分时采集也不行,求各位大佬指点,问题到底出在哪里?谢谢

最佳答案

查看完整内容[请看2#楼]

等待ADC转换完成,条件应该是 ISR与某个位的结果为零才对, 你这里的条件是ISR左移两位的结果为零,什么鬼,为什么没有&。 我这没有F030的手册,在F103里ADC的状态在SR寄存器中,不知F030是不是改了个名字还是多出了一个ISR寄存器,这名字看着像中断。 建议自行确认一下,转换完成的状态是哪个寄存器的哪个位。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

3394

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8663
金钱
8663
注册时间
2020-5-11
在线时间
4129 小时
发表于 3 天前 | 显示全部楼层
本帖最后由 LcwSwust 于 2025-6-3 15:29 编辑
KKGG 发表于 2025-6-3 15:05
你好,这句代码是参考原子的例程写的,作用是连续采样几次,求采样平均值,while语句是等待上次转换完成 ...

等待ADC转换完成,条件应该是 ISR与某个位的结果为零才对,
你这里的条件是ISR左移两位的结果为零,什么鬼,为什么没有&。
我这没有F030的手册,在F103里ADC的状态在SR寄存器中,不知F030是不是改了个名字还是多出了一个ISR寄存器,这名字看着像中断。
建议自行确认一下,转换完成的状态是哪个寄存器的哪个位。


专治疑难杂症
回复

使用道具 举报

11

主题

2148

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4911
金钱
4911
注册时间
2015-1-10
在线时间
615 小时
发表于 3 天前 | 显示全部楼层
一个高电平一个低电平先看看能不能检测,再看检测频率的问题
回复

使用道具 举报

12

主题

3394

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8663
金钱
8663
注册时间
2020-5-11
在线时间
4129 小时
发表于 3 天前 | 显示全部楼层
请解释一下这句代码是在做啥?
傲游截图20250603132118.jpg
专治疑难杂症
回复

使用道具 举报

9

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2024-8-27
在线时间
34 小时
 楼主| 发表于 3 天前 | 显示全部楼层
LcwSwust 发表于 2025-6-3 13:22
请解释一下这句代码是在做啥?

你好,这句代码是参考原子的例程写的,作用是连续采样几次,求采样平均值,while语句是等待上次转换完成才进行下一次转换,请问这里有问题吗?
回复

使用道具 举报

9

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2024-8-27
在线时间
34 小时
 楼主| 发表于 3 天前 | 显示全部楼层
阿侑kevin 发表于 2025-6-3 11:03
一个高电平一个低电平先看看能不能检测,再看检测频率的问题

大佬你好,不太明白你的意思,我试过CP那个通道不检测PWM,只检测直流信号,发现结果也是一样,只要单独开启一路转换都正常,但是开启两路的话,都是温度那一路数据异常
回复

使用道具 举报

9

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2024-8-27
在线时间
34 小时
 楼主| 发表于 3 天前 | 显示全部楼层
LcwSwust 发表于 2025-6-3 15:21
等待ADC转换完成,条件应该是 ISR与某个位的结果为零才对,
你这里的条件是ISR左移两位的结果为零,什么 ...

多谢大佬,这里确实是有问题,应该是这样while(!(ADC1->ISR & (1 << 2)));
回复

使用道具 举报

12

主题

3394

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8663
金钱
8663
注册时间
2020-5-11
在线时间
4129 小时
发表于 3 天前 | 显示全部楼层
KKGG 发表于 2025-6-3 15:33
多谢大佬,这里确实是有问题,应该是这样while(!(ADC1->ISR & (1

OK,建议还是用标准库吧。你这些操作寄存器的代码都不知道哪个位是啥功能,看代码还得翻手册对照。
专治疑难杂症
回复

使用道具 举报

9

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2024-8-27
在线时间
34 小时
 楼主| 发表于 3 天前 | 显示全部楼层
LcwSwust 发表于 2025-6-3 15:38
OK,建议还是用标准库吧。你这些操作寄存器的代码都不知道哪个位是啥功能,看代码还得翻手册对照。

好的大佬,因为还是属于新人学习阶段,希望从底层寄存器开始学起,现在已经了解不少了,马上开始学习标准库,练习项目,以后可能还有问题,请大佬多多指教
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-6 22:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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