单片机 STM32 HAL IO扩展 74HC595 例子代码
2025-09-08 来源:cnblogs
#include '74hc595.h'
/******************
功 能:定义HC595的功能引脚
备 注:变更引脚,由MX配置完成
*******************/
const T_HC595_PIN hc595 =
{
.sck_port = HC595_SCK_GPIO_Port,
.sck_pin = HC595_SCK_Pin, //数据输入时钟线
.data_port = HC595_SI_GPIO_Port,
.data_pin = HC595_SI_Pin, //数据线
.rck_port = HC595_RCK_GPIO_Port,
.rck_pin = HC595_RCK_Pin, //输出存储器锁存时钟线
.en_port = HC595_OE_GPIO_Port,
.en_pin = HC595_OE_Pin //芯片使能
};
/******************
函数名:hc595Delay
功 能:实现us级延迟
形 参:cnt--us值
返回值:无
备 注:
*******************/
void hc595Delay(volatile uint16_t cnt)
{
while(cnt--)
continue;
}
/******************************
函数名:hc595Init
功 能:初始化hc595的使能脚(EN),默认工作状态
形 参:pin--hc595引脚结构体
返回值:
备 注:0--器件屏蔽 1--器件工作
*******************************/
void hc595Init(const T_HC595_PIN *pin)
{
HAL_GPIO_WritePin(pin->en_port, pin->en_pin, GPIO_PIN_RESET);
}
/******************************
函数名:hc595DeInit
功 能:初始化hc595的使能脚(EN),默认休息状态
形 参:pin--hc595引脚结构体
返回值:
备 注:0--器件屏蔽 1--器件工作
*******************************/
void hc595DeInit(const T_HC595_PIN *pin)
{
HAL_GPIO_WritePin(pin->en_port, pin->en_pin, GPIO_PIN_SET);
}
/******************************
函数名:hc595WriteStr
功 能:向hc595输出字符
形 参:pin--引脚结构体 data--数据字节组 length--数据字节长度
返回值:
备 注:1、数据输出方向--高位先进,QH=高八位,QG,高七位,QF,高六位,依次下去。
2、CLK:低电平->高电平 移位寄存器存储一个位
RCK:低电平->高电平 输出移位寄存器中缓存的位。
笔 记:这里用的是三级串联,根据HC595的特性,移位寄存器只能存储8个位,
如果移位寄存器的8个位填满后,再往移位寄存器中塞一个,移位寄存器的最后一个位数据会被挤出去,
这个数据会从引脚9(SQH)发送给下个HC595引脚14(SI)。
*******************************/
void hc595WriteStr(const T_HC595_PIN *pin, uint8_t *data, uint16_t length)
{
uint16_t i;
uint8_t byte;
data += length - 1; //等价于data[length - 1]
while(length--)
{
byte = *data--;//取数组data[length - 1]赋予byte,然后再--data[length - 1]。
for(i = 0; i < 8; i++)
{
HAL_GPIO_WritePin(pin->sck_port, pin->sck_pin, GPIO_PIN_RESET); //clk = 0 保持缓存区状态
if(byte & 0x80) //从高位开始发送
{
HAL_GPIO_WritePin(pin->data_port, pin->data_pin, GPIO_PIN_SET);//data=1
}
else
{
HAL_GPIO_WritePin(pin->data_port, pin->data_pin, GPIO_PIN_RESET);//data=0
}
byte <<= 1;
hc595Delay(10);//us
HAL_GPIO_WritePin(pin->sck_port, pin->sck_pin, GPIO_PIN_SET); //clk = 1 存储数据至缓存区
hc595Delay(10);//us
}
}
HAL_GPIO_WritePin(pin->rck_port, pin->rck_pin, GPIO_PIN_RESET);
hc595Delay(10);
HAL_GPIO_WritePin(pin->rck_port, pin->rck_pin, GPIO_PIN_SET);//发送缓存区内容
}
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __74HC595_HEADER__
#define __74HC595_HEADER__
/* USER CODE BEGIN Includes */
#include 'main.h'
/* USER CODE END Includes */
typedef struct
{
GPIO_TypeDef* sck_port;
uint16_t sck_pin;
GPIO_TypeDef* data_port;
uint16_t data_pin;
GPIO_TypeDef* rck_port;
uint16_t rck_pin;
GPIO_TypeDef* en_port;
uint16_t en_pin;
} T_HC595_PIN;
extern const T_HC595_PIN hc595;
/* Exported functions prototypes ---------------------------------------------*/
void hc595Init(const T_HC595_PIN *pin);
void hc595DeInit(const T_HC595_PIN *pin);
void hc595WriteStr(const T_HC595_PIN *pin, uint8_t *data, uint16_t length);
#endif

- 意法半导体发布Stellar P3E 汽车MCU内置AI加速
- 德州仪器 (TI) 扩展微控制器产品组合及软件生态系统,助力边缘 AI 在各种器件中落地
- 3D打印“狂飙”背后:兆易创新GD32 MCU多元方案驱动性能升级
- 基于恩智浦MCU的人形机器人灵巧手解决方案
- 国民技术发布N32H49x系列MCU:以澎湃性能与全链路可靠赋能工业控制、储能与光通信
- 英飞凌推出基于PSOC™ Control C3微控制器的ModusToolbox™电源套件
- 让AI为你优化代码,提升MCX MCU程序开发效率!攻略在此~
- 六大全新产品系列推出,MCX A微控制器家族迎来创新
- 英飞凌强化车规级微控制器产品组合:符合ISO/SAE 21434标准、获中汽研认证
- 国产高性能MCU芯片DF30量产,突破进口依赖,国产汽车“大脑”升级
- 六大全新产品系列推出,MCX A微控制器家族迎来创新
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 模组复用与整机重测在SRRC、CCC、CTA/NAL认证中的实践操作指南
- 从控制到系统:TI利用边缘AI重塑嵌入式MCU的边界
- 有源晶振与无源晶振的六大区别详解
- 英飞凌持续巩固全球微控制器市场领导地位
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- 蓝牙信道探测技术原理与开发套件实践
- Microchip 推出生产就绪型全栈边缘 AI 解决方案,赋能MCU和MPU实现 智能实时决策
- LoRa、LoRaWAN、NB-IoT与4G DTU技术对比及工业无线方案选型分析




