你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

求助,读取芯片信息遇到while()语句;

[复制链接]
zfz9232 提问时间:2018-6-28 10:09 /

读取芯片反馈信息,需要用到while(GPIO_ReadPin(X));代码语句如下:

//wait Dout = 0;
while(HAL_GPIO_ReadPin(HX711A_DOUT_GPIO,HX711A_DOUT_GPIO_PIN));


这里等待HX711A_DOUT_GPIO_PIN的引脚被芯片置为0。
但是问题来了
1、如果芯片挂掉了,这个引脚没有反馈,那么我的程序不就一直卡在这里了。


如果出现这样的情况,有没有什么好的办法。
小弟用的是FreeRTOS操作系统+cube。


收藏 评论9 发布时间:2018-6-28 10:09

举报

9个回答
黑皮男 回答时间:2018-6-28 10:21:35
本帖最后由 黑皮男 于 2018-6-28 10:23 编辑

加超时判断

  1. int timeout = 10;
  2. while(HAL_GPIO_ReadPin(HX711A_DOUT_GPIO,HX711A_DOUT_GPIO_PIN))
  3. {     vTaskDelay(1);
  4.     timeout--;   
  5.     if(timeout==0)
  6.        break;
  7. }
复制代码


评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

xiajintaord 回答时间:2018-6-28 10:27:04

那等待寄存器状态位呢?
就像下面这样的:
  1. void Bsp_IWDG_Config(uint32 OverTime)
  2. {
  3.         RCC->CSR|=RCC_CSR_LSION;
  4.         IWDG->KR=0x5555;
  5.         while(IWDG->SR&IWDG_SR_PVU);
  6.         IWDG->PR=0x0006;
  7.         while(IWDG->SR&IWDG_SR_RVU);
  8.         IWDG->RLR=(OverTime*10)>>6;
  9.         IWDG->KR=0xAAAA;
  10. }
复制代码

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

stm1024 回答时间:2018-6-28 10:29:11
最简单的方法是加超时,再霸道一点的方式是使用看门狗。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

zfz9232 回答时间:2018-6-28 10:29:31
xiajintaord 发表于 2018-6-28 10:27
那等待寄存器状态位呢?
就像下面这样的:

操作寄存器有点难。。。
zfz9232 回答时间:2018-6-28 10:29:55

多谢多谢。应该能解决问题。而且好维护。
wudianjun2001 回答时间:2018-6-28 11:08:38
同意,加超时判断,读超过一定次数还读不到就退出

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

黑皮男 回答时间:2018-6-28 13:46:46
xiajintaord 发表于 2018-6-28 10:27
那等待寄存器状态位呢?
就像下面这样的:

等寄存器一样可以加超时判断,一般等待时间比较短就不建议用FTOS的延时,直接变量自减再判断就行
freeelectron 回答时间:2018-6-28 13:54:32
一般的做法都是加个超时时间

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

bodaohjd_300978 回答时间:2018-7-10 18:01:45
学习了,楼主

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版