STM32 HC595
STM32 HC595
以下是使用STM32驱动74HC595移位寄存器的详细步骤和代码示例:
连接原理图
STM32 74HC595
PA5 ------> SH_CP (移位时钟引脚 11)
PA7 ------> DS (串行数据引脚 14)
PA4 ------> ST_CP (锁存时钟引脚 12)
VCC ------> VCC (10脚)
GND ------> GND (13脚)
注:MR(10脚)接VCC,OE(13脚)接地;级联时Q7'接下一级的DS
核心操作步骤
- 数据移位:通过DS引脚按位发送数据,用SH_CP上升沿锁存位数据
- 输出锁存:发送完1字节(8位)后,用ST_CP上升沿将数据输出到并行端口
HAL库驱动代码
// 引脚定义
#define DS_PIN GPIO_PIN_7
#define DS_PORT GPIOA
#define SH_CP_PIN GPIO_PIN_5
#define SH_CP_PORT GPIOA
#define ST_CP_PIN GPIO_PIN_4
#define ST_CP_PORT GPIOA
// 初始化函数
void HC595_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
// 使能GPIO时钟
__HAL_RCC_GPIOA_CLK_ENABLE();
// 配置引脚为推挽输出
GPIO_InitStruct.Pin = DS_PIN | SH_CP_PIN | ST_CP_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// 初始状态拉低
HAL_GPIO_WritePin(DS_PORT, DS_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(SH_CP_PORT, SH_CP_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(ST_CP_PORT, ST_CP_PIN, GPIO_PIN_RESET);
}
// 发送单字节数据
void HC595_SendByte(uint8_t data) {
for(int i=0; i<8; i++) {
// 1. 准备数据位(高位先出)
HAL_GPIO_WritePin(DS_PORT, DS_PIN, (data & (0x80 >> i)) ? GPIO_PIN_SET : GPIO_PIN_RESET);
// 2. 产生移位时钟上升沿
HAL_GPIO_WritePin(SH_CP_PORT, SH_CP_PIN, GPIO_PIN_SET);
HAL_Delay(1); // 实际使用可缩短或替换为微秒延时
HAL_GPIO_WritePin(SH_CP_PORT, SH_CP_PIN, GPIO_PIN_RESET);
}
// 3. 锁存数据到输出端
HAL_GPIO_WritePin(ST_CP_PORT, ST_CP_PIN, GPIO_PIN_SET);
HAL_Delay(1);
HAL_GPIO_WritePin(ST_CP_PORT, ST_CP_PIN, GPIO_PIN_RESET);
}
// 级联发送多字节
void HC595_SendMulti(uint8_t *data, uint8_t len) {
for(int i = len-1; i >= 0; i--) { // 注意:级联时先发最后级的数据
HC595_SendByte(data[i]);
}
}
使用示例
// 主函数中调用
int main(void) {
HAL_Init();
HC595_Init();
uint8_t led_data = 0x01; // 初始点亮第一个LED
while(1) {
HC595_SendByte(led_data);
led_data = (led_data << 1) | (led_data >> 7); // 循环左移
HAL_Delay(500); // 500ms流水灯效果
}
}
关键注意事项
- 移位顺序:74HC595默认高位(MSB)在前,数据发送方向为D7→D6→...→D0
- 级联处理:多芯片级联时,先发送最后一级芯片的数据
- 时序优化:
// 替换HAL_Delay的快速电平切换(系统时钟72MHz时) #define DELAY_FAST() for(int i=0; i<10; i++) __NOP() - 锁存时机:所有位发送完毕后才触发ST_CP锁存信号
实际应用场景:LED点阵控制、数码管驱动、I/O扩展等需要大量输出口的场合。单个74HC595可扩展8路输出,级联N片可扩展8N路输出。
SPICONTROLE 4个HC595移位寄存器设置流水灯时,在SPIIINTIGRATIONED化了的时候,控制的HC595 LED跳了起来如何解决?
采用 SPICONTROLE 4个HC595移位寄存器,在设置流水灯的时候了,SPICONTROLLES正常,但是在SPIIINTIGRATIONED化了的时候,控制的HC595的LED跳了起来。请问该如何解决。例子
基于STM32的74HC595 IO扩展板卡设计
自己做了一块74HC595的IO扩展板卡,出于灵活考虑,没有都采用级联的方式,而是2组多芯片级联的结构。基于STM32平台设计。
2023-04-17 14:48:22
单片机 STM32 HAL IO扩展 74HC595 例子代码
#include "74hc595.h"/******************功 能:定义HC595的功能引脚备 注:变更引脚,由MX配置完成
资料下载
安立路
2021-11-24 09:36:03
单片机 MSP430 G2553 HC595 数码管 SPI 通信
模拟SPI接法是任意的://HC595//VCC-VCC GND-GND RCK-P21 SCK-P22 DIO-P20硬件SPI,调节成3线SPI模式 8bit就可以通信:P14 P12
资料下载
佚名
2021-11-19 19:51:06
2片HC595怎样驱动四位数码管呢
MicroPython-On-ESP8266——数码管的使用,2片HC595驱动四位数码管1. 背景前面在使用四位数码管时,需要用来12个GPIO接口,结果咱micropython能驱动
74HC595使用说明与驱动原理功能
。高抗扰度 VNIH =VNIL = 28% VCC (最小)。原理图引脚功能描述名称符号引脚功能简述三态输出Q0~Q71~7+15数据输处地GND8电源负极级联数据Q`9把Q7的高位发送给下一位HC595复位清除MR10
74HC595多组芯片多组级联代码分享
自己做了一块74HC595的IO扩展板卡,出于灵活考虑,没有都采用级联的方式,而是2组多芯片级联的结构。基于STM32平台设计。结构示意图74HV59
单片机STM32 HAL IO扩展74HC595例子代码分享
#include "74hc595.h"/******************功能:定义HC595的功能引脚备注:变更引脚,由MX配置完成
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- amoled屏幕和oled区别
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机