历史上的今天
今天是:2024年12月25日(星期三)
2019年12月25日 | STM8s使用中遇到的死机问题的排除
2019-12-25 来源:eefocus
工作中,很少使用STM8S,但是由于这颗U在通用U中的价格实在太诱人,在一个非常简单的应用中使用了它。
需求:根据主控板的串口指令,控制风扇转速。
技术要求:1. 风扇为两线普通风扇,24V供电,功率3W,三个并联使用;2主控板与该风扇控制板通过串口485通讯;3.风扇速度设定三种A停转 B低速静音 C 高速。
电路设计:1使用MC34063设计24V转5V给STM8供电;2.由于ssop20引脚的芯片手工焊接容易不良,选择LQFP32封装的STM8S005K6;3. 使用75176通讯芯片;4.使用TIP122芯片驱动风扇。5.设置一个单片机口控制的LED指示灯。
软件设计:很简单,串口接收指令,如果指令中改变了风扇的速度,则,通过改变控制TIP122的PWM,达到控制转速的目的。
调试:
第一步,通过改变程序强制输出PWM试验,每改变一次下载一次程序。分别设置PWM,查看不同PWM对应风扇的速度,并选取中间某一种作为静音风速。ok
第二步,串口通讯,没收到一次翻转LED控制电平。使用UST TO 485模块,电路板上电后,通过串口助手发送信息测试通讯。ok
第三步,编制串口通讯协议,用第二步方法测试,每收到完整一帧,LED翻转。ok
第四步,整合所有程序,其中LED用来只是串口收到完整一帧数据。用串口助手测试ok。
第五步,跟主控板连接,实际应用,偶尔会出现风扇板LED不亮的问题<即未成功接收到指令>,且出现LED不亮后,不断电的情况下,无论怎么插拔串口无法让LED亮起<即永远的不正确运行了>。
该现象偶然出现,使用串口助手测试,永远好事,百思不得其解。于是先给主控板和风扇板单独供电,之后再连接通讯电缆,百试不爽,不会出现问题。看来问题出在初始化附近,猜测是不是初始化设计的代码不合适,开了串口就收到数据会出现死机问题。
于是将串口的初始化放在最后,等所有初始化完成后,放置一段LED闪烁程序,再来初始化串口,再实际联机,仍然会出现此问题。这个时候,真的摸不到头脑了,调试陷入僵局!怎么办,没办法,先放着去吧......
晚上洗澡的时候,把整个STM8的启动过程从加点开始系统串联一遍,突然脑子里意识到似乎少算了一个东西,这个东西因为STM32的缘故,而忽略了STM8与STM32的不同!!那就是bootloader。STM32的boot,需要改变两个管脚boot0,boot1,实现从boot启动还是用户程序启动,而STM8的boot,没有硬件的选择,工作过程是上电,检查是否有boot指令,有则进入boot,在一段时间内无,则进入用户程序,想到这里,和我们未初始化就死机好像能对应的上,如果上电进入了boot,而我们又实际没有进行boot操作,则STM8一直会再boot内出不来,进不去用户程序,就会体现处死机现象出来。好,明天继续试验,估计差不多就是它了!
ok,第二天来了之后,通过配置项把stm8的boot选项设置为bootloader disabled。重新上电,very good ,成功。
事了之后回顾排除过程,依然是经验主义导致思维禁锢,潜意识就认为这里不可能出问题,结果排查的时候总是让真正的元凶漏网。跳出编程和排错的环境后,整体把所有环节列出,再来排查,就很轻易找到问题!所以,除错的过程,第一个要对所有的部分持有怀疑精神,第二个不要埋头苦调,而是应该跳出局外思考全局。以此为戒
上一篇:关于stm8定时器2的中断
下一篇:单片机程序死机跑飞查找原因
史海拾趣
|
目前用ut6410想实现 radio的功能使用si47xx的模块 ut6410本身有提供i2c的接口和驱动 kernel linux2.6.24 硬件部份問題排除 有用示波器 sda sck脚位有讯号出来. 现在遇到的状况是想从user space透过i2c对si47xx丢cmd 但是write read回传都是-1 部 ...… 查看全部问答> |
|
背光代码 volatile S3C2440A_IOPORT_REG * v_pIOPregs= NULL; BOOL BacklightInitialize() { BOOL bRet = TRUE; BL_PowerOn(TRUE); & ...… 查看全部问答> |
|
msp430芯片RAM居然不能外扩??很郁闷,最近程序大了,需要大于2K的RAM了,可是msp430芯片RAM不能外扩,这个怎么办呢?课题做到一半,555555555555 谢谢各位,请出出主意!… 查看全部问答> |
|
TinyOS在MSP430F2618+CC2520平台上移植交流 目前TinyOS还仅支持MSP430低端的MCU比如f1611,以及CC2420等射频芯片。针对MSP430高端系列单片机,以及TI推出的第二代射频芯片CC2520还未能支持 前段时间把TinyOS移植到了上述平台上,基本功能都已经实现,针对无线协议栈还需要进一步优化!希望有 ...… 查看全部问答> |
|
CC2530串口中断接收的自定义缓存BUF最大可以定义多大? 我现在需要一个最少160字节的BUF存接收到的数据进行解析;但是定义buf[160]后用IAR编译总是提示IDATA空间不够;后来通过调节IAR-option -stack/heap 中的设置;但是最大也是只能设置到buf[135 ...… 查看全部问答> |
|
一般来说,七段数码管(也有称日字管)只能显示10个阿拉伯数字和部分英文字母,但是,按排列组合来算,七段数码管可以有128个组合,因此,就七段数码管可包含的信息量来说,显示26个字母加10个数字共36个字符是没问题的,只是人们没有建立一套显示 ...… 查看全部问答> |
|
做了块CC2500模块,模块发射数据很正常,但是接收的数据全部异常,找了两天了还没找到原因,程序问题已经排除(用别人的模块发射和接受都正常),请懂的人帮下小弟,小弟搞开始搞RF… 查看全部问答> |




