stm32之SPI通信学习分析附源码

本文介绍了使用STM32通过SPI通信协议控制4位数码管显示模块的方法,详细讲解了如何初始化74HC595芯片,并提供了相关代码实现。
摘要由CSDN通过智能技术生成

之前一直对SPI通信一知半解,所以想抽空把它搞得明白一些。考虑到之前是结合Flash芯片来学的,十分不直观,而且主要把时间和精力都花在Flash芯片的datasheet和驱动上了,SPI通信也没学好。所以这次就考虑用4位数码管显示模块,模块是直接买的现成的,如下图所示,这样可以简化操作,把精力聚焦到学习的核心–SPI通信本身上来。

该模块是用2片74HC595串联驱动的,一片用来控制数码管的位选(U1),一片用来控制数码管的段选(U2)。接口比较简单,总共5个引脚,2个引脚分别接VCC和GND,DIO用来接收串行数据的输入,SCLK用来接收同步时钟,每个SCLK上升沿74HC595内部的移位寄存器会移一位,RCLK用来控制数据的输出,每个RCLK上升沿74HC595内部的移位寄存器的数据会被放进存储寄存器并输出到外部引脚QA~QH上。而QH’是串行输出引脚,该引脚会接收最高位的溢出,从而实现多片74HC595的级联。

当两片74HC595串联时,先发八位数据用于段选,再发八位数据用于位选,然后RCLK上升沿,就可以驱动某位数码管显示某个字符,通过动态扫描数码管,由于人眼的视觉暂停效果,就可以实现4位数码管的同时显示。先用通用I/O来实现该数码管的驱动,程序如下:

头文件74HC595.h

#ifndef 74HC595_H

#define 74HC595_H

#include"stm32f10x_lib.h" //包含所有的头文件

#include

// 4-Bit LED Digital Tube Module

#define HC595_SCLK_PIN GPIO_Pin_5 // SPI1_SCK PA5

#define HC595_RCLK_PIN GPIO_Pin_12 // SPI1_NSS PA4

#define HC595_DIO_PIN GPIO_Pin_7 // SPI1_MOSI PA7

#define HC595_GPIO GPIOA

#define HC595_RCLK_GPIO GPIOB

#define HC595_RCC RCC_APB2Periph_GPIOA

#define HC595_RCLK_RCC RCC_APB2Periph_GPIOB

void HC595_Init(void);

void HC595_SendByte(u8 data);

u8 HC595_Display(u16 num, u8 dp);

#endif

源文件74HC595.c

// 用于HC595实现的4Bit-LED Digit Tube Module

// 注意:该4位数码管是共阳的!

#include “74HC595.h”

// 码表

const u8 digitTable[] =

{

// 0 1 2 3 4 5 6 7 8 9

0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90,

// A b C d E F -

0x8C, 0xBF, 0xC6, 0xA1, 0x86, 0xFF, 0xbf

};

/*******************************************************************************

* Function Name : HC595_Init

* Description : 初始化HC595

* Input : None

* Output : None

* Return : None

********************************

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值