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

求助,读取芯片信息遇到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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版