OpenEdv-开源电子网

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

关于ADC校准的,为什么这样写,程序会死在while();循环内啊?求告知

[复制链接]

28

主题

93

帖子

0

精华

高级会员

Rank: 4

积分
572
金钱
572
注册时间
2015-8-3
在线时间
113 小时
发表于 2016-4-14 16:49:26 | 显示全部楼层 |阅读模式
1金钱
关于ADC校准,为什么这样写,程序会死在while();循环内啊?
    ADC_ResetCalibration(ADC1);
    while(ADC_GetResetCalibrationStatus(ADC1) == RESET);
    ADC_StartCalibration(ADC1);
    while(ADC_GetCalibrationStatus(ADC1) == RESET);

只要校准没结束就一直等待,为什么程序会死呢?
    while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);
串口的等待发送完毕都是这样的,为什么两者出现了不一样的结果啊?

最佳答案

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

是==SET你非要写==RESET,还问为什么。 你的是==RESET就一直循环。当然死了。 这可是官方例程这样写的: /* Enable ADC1 reset calibration register */ ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); /* Start ADC1 calibration */ ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1)); //你看看这个是不是==RESET就退出循环了,你的恰恰相反。 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2016-4-14 16:49:27 | 显示全部楼层
本帖最后由 jiutianshenjian 于 2017-8-22 15:53 编辑

是==SET你非要写==RESET,还问为什么。
你的是==RESET就一直循环。当然死了。
这可是官方例程这样写的:
    /* Enable ADC1 reset calibration register */
    ADC_ResetCalibration(ADC1);
    while(ADC_GetResetCalibrationStatus(ADC1));
    /* Start ADC1 calibration */
    ADC_StartCalibration(ADC1);
    while(ADC_GetCalibrationStatus(ADC1));

//你看看这个是不是==RESET就退出循环了,你的恰恰相反。
至于为什么,你自己去查手册,没兴趣。
小小蜗牛
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-4-15 23:32:00 | 显示全部楼层
参考我们例程
回复

使用道具 举报

6

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2017-8-7
在线时间
26 小时
发表于 2017-8-22 15:07:49 | 显示全部楼层

进行硬件仿真的时候,我也遇见了这种问题,就是一直卡在第一个while()循环内(我用的校准函数是在原子哥你的历程上复制的);查看寄存器后发现RSTCAL一直是1,ST手册中说的RSTCAL位在校准寄存器被初始化后会由硬件清零。那是不是可以认为是校准寄存器一直没有初始化成功导致的这个问题呢? 如果是这样应该的话,是什么原因因导致它一直未初始化呢?

还有就是校准寄存器是哪个?为什么在中文手册上找不到这个寄存器
回复

使用道具 举报

6

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2017-8-7
在线时间
26 小时
发表于 2017-8-22 15:12:08 | 显示全部楼层
3314lzp 发表于 2017-8-22 15:07
进行硬件仿真的时候,我也遇见了这种问题,就是一直卡在第一个while()循环内(我用的校准函数是在原子 ...

软件仿真的时候则不会出现卡在while()内的情况。在网上看到类似的问题,有人说是晶振没有设置好。有可能是这种原因吗?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 20:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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