zfz9232 发表于 2018-6-28 10:09:54

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


读取芯片反馈信息,需要用到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。


黑皮男 发表于 2018-6-28 10:21:35

本帖最后由 黑皮男 于 2018-6-28 10:23 编辑

加超时判断

int timeout = 10;
while(HAL_GPIO_ReadPin(HX711A_DOUT_GPIO,HX711A_DOUT_GPIO_PIN))
{   vTaskDelay(1);
    timeout--;   
    if(timeout==0)
       break;
}

xiajintaord 发表于 2018-6-28 10:27:04

黑皮男 发表于 2018-6-28 10:21
加超时判断
那等待寄存器状态位呢?
就像下面这样的:
void Bsp_IWDG_Config(uint32 OverTime)
{
        RCC->CSR|=RCC_CSR_LSION;
        IWDG->KR=0x5555;
        while(IWDG->SR&IWDG_SR_PVU);
        IWDG->PR=0x0006;
        while(IWDG->SR&IWDG_SR_RVU);
        IWDG->RLR=(OverTime*10)>>6;
        IWDG->KR=0xAAAA;
}

stm1024 发表于 2018-6-28 10:29:11

最简单的方法是加超时,再霸道一点的方式是使用看门狗。

zfz9232 发表于 2018-6-28 10:29:31

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

操作寄存器有点难。。。

zfz9232 发表于 2018-6-28 10:29:55

黑皮男 发表于 2018-6-28 10:21
加超时判断

多谢多谢。应该能解决问题。而且好维护。

wudianjun2001 发表于 2018-6-28 11:08:38

同意,加超时判断,读超过一定次数还读不到就退出

黑皮男 发表于 2018-6-28 13:46:46

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

等寄存器一样可以加超时判断,一般等待时间比较短就不建议用FTOS的延时,直接变量自减再判断就行

freeelectron 发表于 2018-6-28 13:54:32

一般的做法都是加个超时时间

bodaohjd_300978 发表于 2018-7-10 18:01:45

学习了,楼主:loveliness:
页: [1]
查看完整版本: 求助,读取芯片信息遇到while()语句;