实际举例:
GPIO_Write(GPIOC,~(1<<(leds+7))); //写入c端口为000000001
GPIO_SetBits(GPIOD,GPIO_Pin_2); //使输出有效
GPIO_ResetBits(GPIOD,GPIO_Pin_2); //进行锁存
- 先开锁存器还是先给IO数据呢?
其实两个照现象来看的话都可以,但是实则不然,573在里面起到了关键作用,我们就来分析下573。
给锁存器的LE(N—LE,对应PD2)管脚一个上升沿脉冲即可把对应的电平锁存到锁存器的输出端(Q1~Q8),从而控制LED。
详见锁存器的datasheet
换句话说,只要有一个从低到高的脉冲,就会直接把输入端的数据给输出端,所以更准确来说应该在开锁存器前把数据准备好,然后再拉高LE,锁存完毕后再拉低LE为下次锁存做准备。
你可能会有疑问,连续拉高和拉低,之间的间隔够不够锁存完数据,这个口说无凭,需要参考手册咯。
最小24ns,而STM32使用8M晶振的话,一个机器周期大概是1/8M=125ns,所以完全够用,不必担心的!
总线是指一条线上存在多个设备,但是每次只会让一个设备工作的线路
其中PB0充当总线,使用的是STM32F103R6,使用的锁存器是74LS75.
这里主要看一下这个锁存器的使用:D0,D1,D2,D3是输入,Q0~Q3是输出,输出有八个接口,其余四个是Q0 ~ Q3的非,就是相反的。E0/1是控制D0,D1输出是否有效的使能端,为高时有效,为低时无效。E2/3时控制D2,D3输出是否有效的使能端。同理为高有效,为低无效。
效果实现: