打印
[其他ST产品]

Stm32 AD读取为0,调试发现Stm32 ADC_GetConversionValue的ADCx->DR寄存器R0一直为0或FFF,读不出正常电压值

[复制链接]
889|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
onlycook|  楼主 | 2024-7-29 11:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32单片机的实现AD,读取模拟电压值,程序没问题,我在淘宝买的板子上试过,一切正常,可以读出PA0上的相应电压值。但是在我自己焊的板子上电压值就读不出来,一直是0(万用表能测到PA0引脚上有电压)。两个板子连线一样的。
仔细比较了下,发现不同的就是一个单步仿真时的左侧那个register寄存器,R0。运行到函数
uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx)
{
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
/* Return the selected ADC conversion value */
return (uint16_t) ADCx->DR;
}
这里的最后一步return(uint16_t) ADCx->DR时,左侧显示的R0寄存器的值就是0x00000000,不出现正常电压值。而淘宝买的板子最后一步return时,左侧显示的R0寄存器的值就是PA0引脚上电压值数据的值,如0x000005C3。试过PA0,PA2,PA6等多个AD口,情况一样。到return这步R0寄存器的值就是0x00000000(单步调试程序时,之前的行,R0值有变化且正常),有一两次还出现到return这步R0寄存器的值就是0x00000FFF,但不是正确的电压值。
请问这是什么原因吗?谢谢大神!

使用特权

评论回复
沙发
kzlzqi| | 2024-7-29 15:01 | 只看该作者
如果淘宝上的板子能正常读取ADC值,而你自己焊接的板子却读取不到正确的值,可能是硬件配置和电气连接相关的错误导致的

使用特权

评论回复
板凳
kzlzqi| | 2024-7-29 15:01 | 只看该作者
仿真器可能在某些情况下与硬件状态不同步。尝试使用其他调试工具或者硬件调试器检查 ADC 数据。

使用特权

评论回复
地板
申小林一号| | 2024-7-29 22:53 | 只看该作者
感谢分享

使用特权

评论回复
5
申小林一号| | 2024-7-29 22:53 | 只看该作者
感谢分享

使用特权

评论回复
6
纠结的那些年| | 2024-7-31 11:56 | 只看该作者
详细检查电路设计和配置

使用特权

评论回复
7
AdaMaYun| | 2024-7-31 13:29 | 只看该作者
建议先单独测试一下相关的函数排除问题点

使用特权

评论回复
8
gaonaiweng| | 2024-8-29 12:16 | 只看该作者
在 ADC 输入引脚和地之间添加一个小电容(例如 100nF)可以减少噪声影响,稳定 ADC 读取值。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

438

主题

1657

帖子

3

粉丝