求助,读取芯片信息遇到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:23 编辑
加超时判断
int timeout = 10;
while(HAL_GPIO_ReadPin(HX711A_DOUT_GPIO,HX711A_DOUT_GPIO_PIN))
{ vTaskDelay(1);
timeout--;
if(timeout==0)
break;
}
黑皮男 发表于 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;
}
最简单的方法是加超时,再霸道一点的方式是使用看门狗。 xiajintaord 发表于 2018-6-28 10:27
那等待寄存器状态位呢?
就像下面这样的:
操作寄存器有点难。。。 黑皮男 发表于 2018-6-28 10:21
加超时判断
多谢多谢。应该能解决问题。而且好维护。 同意,加超时判断,读超过一定次数还读不到就退出 xiajintaord 发表于 2018-6-28 10:27
那等待寄存器状态位呢?
就像下面这样的:
等寄存器一样可以加超时判断,一般等待时间比较短就不建议用FTOS的延时,直接变量自减再判断就行 一般的做法都是加个超时时间 学习了,楼主:loveliness:
页:
[1]