SPI+数码管
SPI通信
SPI总线介绍
SPI接口是Motorola 首先提出的全双工三线/四线同步串行外围接口采用主从模式(Master Slave)架构。
时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first);SPI接口有2根单向数据线,为全双工通信。
SPI总线被广泛地使用在FLASH、ADC、LCD等设备与MCU间,要求通讯速率较高的场合。
一主多从的同步串行全双工通信
Master 主机 Slave 从机
MISO 主机输入从机输出 MOSI 主机输出从机输入 SS Slave Select(片选线)从机选择
SCK system clock 时钟
所有的输出口在输出的时候要配置成推挽输出,这样在没有外部上拉电阻的情况的也可以有较强的输出高低电平的能力。但需要考虑一点:当主机跟从机3进行通信的时候,从机2和从机1的MISO线如果是推挽输出(推挽必输出高电平或低电平的一种)那肯定会影响主机跟从机三的正常通信,所以为了消去这一影响,让从机SS片选线为高电平,即非选中状态时对应从机输出口置为高阻态,这样既不是高电平也不是低电平不会影响主机跟所选中从机的正常通信。
字节交换原理
字节交换基于位交换的
位交换分为两部分:移出 移入
移出:就是把当前移位寄存器的最高位写到信号线上,然后整体往左移动一位
移入(采样):读取信号线的状态,然后把读到的状态放到寄存器的最低位
移入 主机和从机同时进行
移出 主机和从机同时进行
移入和移出的时机是由时钟线控制约定的,约定好第几个边沿一起移出,第几个边沿一起移入。
时序单元
•起始条件:SS从高电平切换到低电平
•终止条件:SS从低电平切换到高电平
SPI模式
由CPOL及CPHA的不同状态,SPI分成了四种模式,主机与从机需要工作在相同的模式下才可以正常通讯,因此通常主机要按照从机支持的模式去设置
CPOL: 时钟极性
CPHA: 时钟相位
模式0
模式1
模式2
模式3
数码管
介绍
LED数码管(LED Segment Displays)是由8个发光二极管构成,并按照一定的图形及排列封装在一起的显示器件。其中7个LED构成7笔字形,1个LED构成小数点(固有时成为八段数码管)。
LED数码管有两大类,一类是共阴极接法,另一类是共阳极接法,共阴极就是7段的显示字码共用一个电源的负极,是高电平点亮,共阳极就是7段的显示字码共用一个电源的正极,是低电平点亮。
我们对数码管所要显示的每个数字和字母进行编码,然后在编程时,将编码放在一个数组上,需要显示什么数字或者字母,从数组里面提取相应的编码就可显示所要显示的字符了。
如图,要显示数字“5”时,编码为0x6D。如果数码管为共阳极,只需要对共阴极的编码做一个取反操作即可。
74HC595芯片分析
一定好好看此文章
一文搞懂74HC595芯片(附使用方法)_74hc595芯片引脚图及功能-CSDN博客
原理图分析
我们本次所使用的是一款四段共阴极八位数码管,每个数码管的使能相对独立,各个数码管使用对应的三极管(NPN)进行使能控制。
由于数码管所需的管脚较多,我们使用SPI总线+74HC595(背过)芯片实现对数码管的控制。
(注:图中SPI4对应的即为SPI2)
74HC595是一款8位串行输入、并行输出的位移寄存器,在本次项目中,使用其将SPI串行传递过来的数据并行发送给对应数码管与显示位。SER为数据输入引脚。
位信号为:
SPI2_NSS——PB12(锁存,可设置为Output,低-》高就可以命令595芯片并行输出)
SPI2_SCK——PB13(SPI时钟)
SPI2_MISO——PB14(主机输入从机输出)---对本例子不重要
SPI2_MOSI——PB15(主机输出从机输入)
cubeMX配置
程序编写
硬件SPI
/* USER CODE BEGIN 0 */
//定义一个保存了所有数字显示状态的数组
const uint8_t number[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,<