本节程序受 刘凯老师STM32 视频源码 结合 畅学硬件开发板 修改而来。
上面是原理图,下面根据畅学51底板,讲解一下:
是并转串模块:
15引脚 ---CE---CLK INH 接地。 所以所以始终使能。
10引脚 ---DS---SI 空接。代表移位以后,最低位补高电平还是低电平。
重点看一下 移位寄存器使能引脚 和 时钟
1引脚 ---PL --- S/L : 接高电平时,使能,移位有效。 低电平,锁存。
2引脚 ---CP --- CLK : 时钟上升沿时,移位。将高位D7(H)的值,移位到Q7(QH)。
以STM32F103C8T6 为例写这个模块程序。
配置PB0、PB1、PB2 ----- CLK、QH、S/L
PB8 ~ PB15 -------- A ~ H
令 PA0 ~ PA7 ------ LED1 ~ LED8 : 让串行输出的结合起来,用LED灯的亮灭表示。
首先配置I/O口
1、
2、配置 GPIO口,初始化,确定输入还是输出,频率 和 使用的引脚。
除QH为 浮空输入以外,其余全部 推挽上拉。
3、程序最开始:
下面是 74HC165 并转串模块。(软件仿真观测 )
由于初始化完成后 ,输出的引脚多为0. 而畅学系列的 底板 LED为共阳极。
所以利用函数库中 写端口函数
PS: 看一下 GPIO 函数库 截图
所以 PA口 ,写 FFFF 。
同时为了体现 A—H 的并转串,所以 PB 口 写 F000。
此时也是 S/L ,CLK 写0,移位寄存器 无效, 时钟低电平。
PS : 由于之前一直觉得软件仿真的错误性,所以用 QH 直接 接 LED灯,单步调试看每一步现象, 配置好 IO口后, LED灯会亮一下。
应该是这种原因造成。
也正因为这样的单步调试,让我更好的理解了 这个 165 芯片的 实际动作。
看一下具体函数:
PB15 ~ PB8 == F0
1、 使能移位寄存器引脚 GPIO_Pin_2 置1.
此时 H位的 数值 ,已经移位到了 QH 输出口了。 即 QH =1.
2、 8次循环,首先将QH的值,作为输入 ,发送到输入引脚PB1中。 Data 读取到这个 值, 即data = 0x0001.
3、 然后经历一个上升沿,注意的是,上升沿到来时 , 165芯片内部已经完成一个移位,并且将 实际G位的值 移到了 QH输出口, 即QH=1.
然后 左移data 以后。 data |= GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1);这句话又将读出QH---PB1 的值,放到data中, data=0x0003.
依次循环8次,最后将data的值 0xF0 写到PA口上,输出LED灯 4灭,4亮。
(自己最好,单步调试,看一下,印象更加深刻)
这样基本的GPIO 和 74HC165 就讲解完了!!!