本帖最后由 hzocce 于 2017-4-22 21:12 编辑
STM32 IO接到74HC595,其OE接死GND,74HC595的D0~D7接光耦发光管的阴极,往595灌入电流的形式,光耦发光管的1脚上通过电阻上拉到VCC。
在上电一瞬间,光耦会导通一下,也就是74HC595的D0~D7端为低电平,导致光耦简短导通一下。后面就关掉,也就是STM32配置595关断的。
通过STM32的Reset脚复位单片机,光耦不会导通,
也就是在STM32还没有起来工作,来得及配置它时,74HC595的D0~D7就输出为低。
1.加大595的滤波电容到4.7uF无效果。
2.减小STM32的复位电容,电阻都无效果。原来是0.1uF/10K)
3.将595的OE脚扳起,OE脚通过10K电阻接到地,OE脚再通过0.1uF电容到VCC。
上电瞬间光耦导通的故障消除。
改装过板子上面的2片595故障消除;
(此办法比较麻烦,电阻站着,头顶595的OE端,脚踩PCB的GND焊盘(原来595 OE焊盘),上面再举一个电容,通过一飞线接到VCC。
4.将595的OE脚扳起,OE脚通过10K电阻接到地。
改装过板子上面的另外2片595故障消除;
结论:难道是上电瞬间OE是打开的,导致D0~D7就输出为低?
上述3跟4办法都比较麻烦,有其他办法么? |
这里有个参考设计,stm32f4通过hc595控制96个LED,可通过修改数组数据修改点亮或者熄灭任意一个LED灯 //初始化hc595参数 uint8_t hc595_buf1[6] = {0x00,0x00,0x00,0x00,0x00,0x00,}; uint8_t hc595_buf2[6] = {0x00,0x00,0x00,0x00,0x00,0x00,}; 上面两个数组每一位代表一个灯,假如灯是低电平点亮,该位就置0,否则置1, 12个字节,一共96个bit位,代表96个灯,可无限扩展灯的数量 http://www.cirmall.com/circuit/9921/stm32f4%E9%80%9A%E8%BF%87hc595%E6%8E%A7%E5%88%B696%E4%B8%AALED#/details