q457344370 发表于 2016-5-13 20:51:01

单片机设计经验分享之IO配置

本帖最后由 q457344370 于 2016-5-14 14:14 编辑

功能描述:
        主从机结构,从机使用单片机型号为STC15F408AS,从机正常运行时发大于50ms的脉冲通知主机一些信息,主机判断脉冲个数进行相应的操作。
出现故障现象:
        在重新上电的时候从机会发误出约100~200ms的脉冲。
硬件设计如下:(不要问我为什么要用NPN,为什么这样设计,前人挖的坑,只好负责填{:mad:} )

测试发现每次断电上电的时候必会误输出脉冲,示波器在P3^7脚检测到了约150ms的持续的高电平。程序在开始运行的第一时间就把从机的IO口配置成推挽输出0,软件里绝对没有可能出现误输出的语句,但每次现象必定出现。
所以怀疑是不是断电到上电的时候电压不稳,刚好在单片机工作电压的临界点,单片机反复发生复位,导致了这个现象,但是这样输出不可能是持续的。
反复折腾了半个多小时,后来发现只要不把IO口配置成推挽输出,也就是使用弱上拉就不会出现这个现象了(当然原因是因为R2,原来是10K,测试的时候改成了1K,单片机的若上拉是输出不了脉冲的),只要配置成推挽输出,就算程序运行10s之后再配置在重新上电的时候故障依旧重现。
到这里就基本可以确定原因了,在单片机断电复位的时候,IO口会默认初始化成1,然后运行自带的Boot程序检测是否进行程序下载,之后才会跳转到main函数运行。但是,在这个过程中IO的配置方式却不会被初始化成默认的弱上拉!!!!!{:mad:} {:curse:} {:curse:}
尼玛,坑爹呀{:curse:} {:curse:}
现在程序改为发送脉冲的时候配置成推挽输出,发送完毕之后切回弱上拉,故障消失。
好了,发这个帖子也是为了吐下牢骚,顺便分享下经验,让广大的坛友们遇到此类问题时少走弯路{:lol:}
坛友们有什么好的经验也可以分享下,与君共勉{:lol:} {:lol:} {:lol:}
测试程序

配置成推完输出的波形,蓝色为5V电源,黄色为输出脚

未配置成推完输出的波形,蓝色为5V电源,黄色为输出脚

小李非刀 发表于 2016-5-13 21:12:52

MCU的IO上电之后,如果程序不操作这些IO,那么IO是不可能输出高低变化的脉冲的。

q457344370 发表于 2016-5-13 21:28:06

小李非刀 发表于 2016-5-13 21:12
MCU的IO上电之后,如果程序不操作这些IO,那么IO是不可能输出高低变化的脉冲的。 ...

事实怎么样你测试下就知道了,实测程序里不含有任何其他程序,只做输出0然后配置成推挽输出,STC10系列测试发现没有问题,15F408AS就会出现{:tongue:}

xiesx1985 发表于 2016-5-13 22:02:06

把NPN换掉?

kinoko 发表于 2016-5-13 23:27:47

搞笑了,PXM0 PXM1寄存器还带断电保持的?

alphax64 发表于 2016-5-14 08:44:19

应该是硬件芯片问题。

q457344370 发表于 2016-5-14 14:15:30

kinoko 发表于 2016-5-13 23:27
搞笑了,PXM0 PXM1寄存器还带断电保持的?

测试的图片已经更新,还不信我可以寄两片样片给你

小李非刀 发表于 2016-5-14 16:25:36

q457344370 发表于 2016-5-13 21:28
事实怎么样你测试下就知道了,实测程序里不含有任何其他程序,只做输出0然后配置成推挽输出,STC10系列测 ...

在15系列中,STC15W408AS系列我用得很多,都没发现你有你说得问题。
如果IO能乱输出脉冲,这个IC肯定不能使用,早就停掉了。
你可以用STC官方的测试程序测试,比如串口测试程序,除了P3.0 P3.1,跟别的IO无关。
为了避免外部电路的影响,你先空着IO测试。

q457344370 发表于 2016-5-14 18:05:29

小李非刀 发表于 2016-5-14 16:25
在15系列中,STC15W408AS系列我用得很多,都没发现你有你说得问题。
如果IO能乱输出脉冲,这个IC肯定不能 ...

1楼更新了测试的程序和相关图片
页: [1]
查看完整版本: 单片机设计经验分享之IO配置