STM8L051F3 IO表现异常

2017-12-15  本文已影响0人  928e93967d0f

大概两个月前吧,公司有个电源模块输出控制的小项目,准备用单片机。硬件组同事选了STM8L051F3,STM8内核,虽然不是传统的C51,但基本寄存器操作都差不多,花了3天时间依次调好IO,定时器,串口(用来调试)和I2C(单片机与控制板通信)。整个项目一周左右就搞定了。

前天公司又有个改版的电源模块输出控制项目,还是用这款单片机,只是需要控制的IO口由原来的4路改成了8路(需要控制更多的电源输出)。本想着就几分钟的事情,结果搞了一下午都没搞定:对这8路输出管脚PB0~PB7初始化:

GPIO_Init(GPIOB, GPIO_Pin_All, GPIO_Mode_Out_PP_High_Fast);

Out:输出;High:输出1;Fast:高速10M模式。

烧进去,万用表一测,输出PB0输出0.8V,再测其他几路,都是0.8V,什么情况这是?
进入DEBUG模式,发现走到函数void GPIO_Init(GPIO_TypeDef* GPIOx, uint8_t GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode)中GPIOx->CR1 |= GPIO_Pin;这一步直接报错了,寄存器CR1设置失败。

控制输出的IO管脚越多,差错越大,这明显是驱动不够啊。但单片机的IO管脚不都是独立驱动的吗,看了一下原理图: PB0~PB7即8路输出控制管脚
I/O output

图中只截取了EN_VCC1和EN_VCC3的电路,由前面那张图可以看到他们分别对应PB0和PB4,通过1k的电阻下拉倒地,其他六个管脚也一样处理的。所以我就只能将这几路输出管脚配置成推挽模式了(开漏模式需要上拉)。


昨天上午继续折腾,让同事把那8个下拉电阻都去掉,再拉测。发现ST-LINK找不到单片机,单片机工作不正常?先检测单片机的输入电源,VDD脚电压3.6V,正常;再测VSS脚,2.1V,不会吧!!!这是电源地脚呢,不应该是0V么?只能找来硬件组同事帮忙查一下了。反馈的结果是这个VSS确实是没有接地的,飞个线,拿回来一切都OK啦。

电源脚没接地居然还可以跑起来, 可能是PB的下拉电阻间接将其拉低了,外在表现就是单片机工作逻辑正常,输出驱动不够。


搬自:我的CSDN

上一篇 下一篇

猜你喜欢

热点阅读