[经验] IO无法置0

jinandawei   2022-1-14 10:30 楼主

在调试RL78单片机的时候,发现一个问题,一个驱动IO无法置零。

但是插入断点发现是可以的,解决步骤:

  • 因此怀疑是不是跟其他功能复用了呢:LCD、蜂鸣器等,检查结果没复用。
  • 测试IO管脚,发现实际是方波;
  • 最后发现是IO驱动的判断条件的问题,发现相应AD数据错误则会关闭IO,但是关闭IO后,相应AD数据就恢复了正常。

处理方法:在判断IO驱动的时候,设置判断条件,一旦发现问题关闭IO,则不再判断,因为Io为0会触发条件变为正常,改为下一次开关关闭再开启 才再次判断条件。

 

驱动代码:

 #define CAN_DIAG_Drive(x) ((stDiag[x].Counter < DIAG_TIMEOUT)|(stDiag[x].Diag <= DIAG_STAT_OPEN))

    i = DIAG_CH6;
    if(bSW8_CZ && b15PowerOK && !Is_Mask_Flash_CMD)//侧照灯
    {      
      pIO_CTRL6 = CAN_DIAG_Drive(i);
      stDiag[i].Out = 1;
    }else
    {
      pIO_CTRL6 = 0;
      memset(&stDiag[i],0,sizeof(ST_DIAG));
    } 

stDiag[x].Diag 诊断状态的获取:

		if(stDiag[i].Out && (stDiag[i].Diag != DIAG_STAT_SHORT2GND))//already short ,no check,until turn off switch and turn on again thar will reset diag data to ok
		{
			if(stDiag[i].Counter < DIAG_TIMEOUT)
			{
				stDiag[i].Counter++;
			}else
...............

 

回复评论 (5)

还是找找根本原因吧,这样凑合不行

点赞  2022-1-14 20:25

路过群众,是不是有可能你的I/O口设置输入/输出的配置出了问题?

点赞  2022-1-15 09:05

大部分应该是配置出问题,好好检查一下

点赞  2022-1-15 09:12
引用: huo_hu 发表于 2022-1-14 20:25 还是找找根本原因吧,这样凑合不行

谢谢,根本问题已解决,就是应用层问题所致。
A:发现问题--->关闭IO--->检测相应条件符合,打开IO---->导致问题---->A

点赞  2022-1-17 15:28
引用: jinandawei 发表于 2022-1-17 15:28 谢谢,根本问题已解决,就是应用层问题所致。 A:发现问题--->关闭IO--->检测相应条件符合,打开IO- ...

没看明白这个逻辑。

默认摸鱼,再摸鱼。2022、9、28
点赞  2022-1-17 21:04
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复