单片机连接TM1650初始化偶尔出现系统不运行的情况

今天做程序发现一个问题,就是用TM1650做LED灯的驱动和按键扫描的模块,单片机用的stm32(如果是51的话应该会遇到同样的问题),系统启动的时候有时候会出现系统不运行的情况,概率比较小,一般重启几十次会出现一次,但是这种情况也属于bug,需要想办法解决。

经过反复研究,发现网上给的TM1650程序存在一个现象,就是它去读TM1650的ack的时候,如果TM1650没有给回复ack(有可能是线路连接不稳定,发送数据的时候TM1650没有接收到或者Tm1650返回ack的时候单片机没有接收到,也有可能中间被中断打断执行其他的程序了,再回来的时候TM1650的ack已经发送完了),那就会有个while语句一直执行读TM1650的ack,而TM1650没有收到其他的指令前不会再发送ack,就这样卡死在这里了。

解决的方法是在里面加一个跳出的机制,设置一个变量i,while里面i++,加到一定的数之后如果还在执行这里的程序,就来个return;或者break; 可以跳出这个while循环或者函数。但是如果这个TM1650的模块很重要,可以在直接让单片机重启

也可以用看门狗的方式让它重启

我是直接在里面加了一段重启的代码 SCB->AIRCR = ((uint32_t)0x05FA0000) | (u32)0x04;




·关于我们·免责声明·服务条款·RSS订阅·dede168.com技术支持

Copyright © 1998-2015  All rights reserved.