STM32与74HC165A实现高效数字输入扩展方案
📅 2026/7/3 14:03:26
👁️ 次浏览
1. 项目背景与核心价值在工业控制和嵌入式系统开发中我们经常需要处理大量数字输入信号。传统方案要么占用过多MCU引脚资源要么需要复杂的外围电路设计。而采用74HC165A这款经典并行输入串行输出(PISO)移位寄存器配合STM32F412ZG的高性能SPI接口可以优雅地解决这个问题。我最近在一个工业控制器项目中需要监测32个机械开关状态。若直接使用STM32的GPIO将消耗1/3的可用引脚资源。通过级联4片74HC165A最终仅占用3个MCU引脚SPI CLK、MISO和LOAD实现了32:3的引脚扩展比。这种方案特别适合以下场景需要监测大量数字输入如按钮、限位开关、传感器系统PCB空间有限需要减少走线数量要求实时性较高STM32F4的SPI时钟可达50MHz2. 硬件设计要点2.1 芯片选型对比MC74HC165A是TI生产的8位并行输入串行输出移位寄存器主要参数工作电压2V-6V完美匹配STM32的3.3V逻辑最大时钟频率36MHz4.5V输入电流±1μA超低静态功耗封装SOIC-16易于手工焊接相比CD4021等同类芯片74HC165A具有更快的时钟响应和更低的功耗。实测在3.3V供电时可靠工作频率可达25MHz。2.2 典型电路连接以级联4片74HC165A为例扩展32路输入[VCC]---------------- | | | | 74HC165A#1 |#2 |#3 |#4 [GND] SH/LD-------------- CLK---------------- QH----- | | | --- | | ------- | ----------- | [STM32F412ZG] PA5(SPI1_SCK) PA6(SPI1_MISO) PA7(GPIO_LOAD)关键细节所有芯片的SH/LD(移位/装载)引脚并联由单个GPIO控制前级QH接后级SER(串行输入)实现级联每个PL(并行加载)引脚接10K上拉电阻VCC与GND间放置0.1μF去耦电容每片芯片独立注意级联时时钟信号要等长走线避免时序偏移。建议使用蛇形走线保持长度一致。3. 软件实现详解3.1 STM32CubeMX配置启用SPI1为主机模式Clock Prescaler: 8 (12.5MHz 100MHz系统时钟)CPOL: Low, CPHA: 1EdgeData Size: 8bitsNSS: Hardware Disabled配置PA7为GPIO_Output(LOAD信号)生成代码时勾选Generate peripheral initialization as a pair of .c/.h3.2 关键代码实现// 读取级联的74HC165A数据 uint32_t Read_74HC165s(uint8_t cascade_num) { uint32_t result 0; // 拉低LOAD引脚锁存并行输入 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET); HAL_Delay(1); // 保持至少25ns(实测需要500ns稳定) // 拉高LOAD开始移位 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET); // 通过SPI连续读取数据 for(uint8_t i0; icascade_num; i){ uint8_t byte; HAL_SPI_Receive(hspi1, byte, 1, 100); result (result 8) | byte; } return result; } // 使用示例读取4片级联32位输入 void main() { uint32_t inputs Read_74HC165s(4); if(inputs (15)) { // 处理第6路输入信号 } }3.3 性能优化技巧中断驱动法将LOAD信号连接外部中断引脚在下降沿触发读取DMA传输配置SPI DMA连续接收减少CPU占用软件去抖对关键输入添加以下处理逻辑#define DEBOUNCE_TIME 20 // ms uint32_t stable_inputs 0; uint32_t last_inputs 0; uint32_t change_time 0; void Check_Debounce() { uint32_t current Read_74HC165s(4); if(current ! last_inputs){ change_time HAL_GetTick(); last_inputs current; } else if(HAL_GetTick() - change_time DEBOUNCE_TIME){ stable_inputs current; } }4. 常见问题排查4.1 数据移位错位症状读取的数据位与物理输入不对应 排查步骤用逻辑分析仪抓取SPI时序确认CLK相位配置CPHA1Edge检查PCB走线是否等长级联时差异应1/4时钟周期测量电源纹波应在±5%以内4.2 输入响应延迟症状输入变化到MCU检测有100us延迟 优化方案提高SPI时钟最高不超过芯片规格的80%改用中断触发代替轮询减少级联芯片数量建议不超过8片4.3 电磁干扰问题症状长线缆输入时出现误触发 解决方案在输入端添加RC滤波100Ω100nF使用双绞线传输信号在PCB上放置TVS二极管防护5. 进阶应用实例5.1 工业控制面板扫描某纺织机械项目需要监测48个按钮状态使用6片74HC165A级联每10ms扫描一次通过TIM6定时器触发采用差分信号传输RS485芯片转换抗干扰5.2 多设备状态监测冷链监控系统中每个冷藏柜提供8路状态信号主控STM32F412ZG通过1个SPI接口级联16片74HC165A128路输入使用74HC138进行片选分区读取实测数据方案引脚占用扫描周期CPU负载直接GPIO1281ms15%74HC165A42ms3%5.3 与其它外设协同工作当SPI1被74HC165A占用时如何同时使用SPI Flashvoid Read_MultiDevices() { // 先读取74HC165A uint32_t inputs Read_74HC165s(4); // 切换片选到Flash HAL_GPIO_WritePin(FLASH_CS_GPIO_Port, FLASH_CS_Pin, GPIO_PIN_RESET); HAL_SPI_TransmitReceive(hspi1, tx_buf, rx_buf, 256, 100); HAL_GPIO_WritePin(FLASH_CS_GPIO_Port, FLASH_CS_Pin, GPIO_PIN_SET); // 注意需要重新配置SPI参数若Flash要求不同模式 }通过这个项目我发现74HC165A虽然是一款老芯片但在现代嵌入式系统中仍然大有用武之地。特别是在需要降低成本、减少PCB层数的场合这种数字扩展方案比使用IO扩展芯片更经济可靠。实际部署时建议在第一批板卡上预留未使用的74HC165A位置便于后期功能扩展。
2026年大健康领域干细胞服务现状及用户关注点近年来,随着公众对生命质量关注的提升,干细胞技术在健康管理咨询与细胞检测存储等场景中的应用逐渐受到重视。从行业发展来看,相关服务机构正逐步完善从基础研究到应用转化的链条。在2026年的市场…
📅 2026/7/3 14:03:26
3个关键突破:Flash资源拯救与数字遗产保护的实践指南 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler
你是否曾面对过那些珍贵的Flash动画无法播放的困境?当经典的…
📅 2026/7/3 14:03:26
Native-Turbo基础库优化实战:5大核心组件让系统性能飙升 【免费下载链接】native-turbo Native-Turbo is the performance optimization framework of native microarchitecture of operating system. 项目地址: https://gitcode.com/openeuler/native-turbo …
📅 2026/7/3 14:03:26
1. 项目背景与核心概念解析在嵌入式系统和运动控制领域,从3D空间感知到6自由度(6DoF)运动追踪是一个关键的跨越。IIM-42652作为TDK InvenSense推出的6轴惯性测量单元(IMU),配合PIC18F45K42微控制器,构成了一个完整的运…
📅 2026/7/3 15:27:39
【广州兰瑟★电子-杨工】提供日本NMB(Minebea)称重传感器以高精度和稳定性著称,其产品线覆盖了从微型传感器到大型工业称重的各类应用。
核心技术参数概览
不同系列的传感器具体参数有所差异,以下是部分典型参数范围:精…
📅 2026/7/3 15:27:39
为什么选择OpenEuler Rubik?解析QoS管理器的核心功能与技术优势 【免费下载链接】rubik rubik is a QoS manager agent for online/offline workload colocation 项目地址: https://gitcode.com/openeuler/rubik
前往项目官网免费下载:https://ar…
📅 2026/7/3 15:27:39
3分钟免费解锁IDM完整版:永久激活的终极解决方案 【免费下载链接】IDM-Activation-Script-ZH IDM激活脚本汉化版 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script-ZH
还在为Internet Download Manager(IDM)的试用…
📅 2026/7/3 15:27:39
CMake常用数据类型一、字符串1、常用操作2、举例说明二、列表1、常用操作2、举例说明三、布尔值1、常用操作2、举例说明四、路劲1、常用操作2、举例说明类型类别实际存储形式用途说明常见操作命令/函数字符串(String)字符串单个值,如路径、名…
📅 2026/7/3 15:27:39
HBM Predictor自定义模型教程:如何训练适合您数据中心的预测模型 【免费下载链接】hbm-predictor this project is an in-depth data-driven analysis and a hierarchical failure prediction model for high-bandwidth memory. 项目地址: https://gitcode.com/op…
📅 2026/7/3 15:25:39
1. AI Agent设计模式全景概览在智能系统开发领域,AI Agent的设计模式就像建筑师的蓝图,决定了智能体如何感知环境、处理信息并采取行动。从业五年来,我见证过太多团队因为模式选择不当导致系统重构的案例。最近在金融风控系统升级时ÿ…
📅 2026/7/3 0:00:32
1. 项目概述:iOS自动化测试的“定位”之痛做iOS自动化测试的朋友,十有八九都卡在“元素定位”这个环节上。你兴冲冲地写好了测试脚本,结果一运行,要么是找不到元素,要么是找到了但点不动,要么是这次能跑通下…
📅 2026/7/3 0:00:32
MTKClient实战指南:深度解析联发科芯片调试与设备修复方案 【免费下载链接】mtkclient MTK reverse engineering and flash tool 项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient
MTKClient是一款专业的联发科芯片调试工具,为技术爱好者和…
📅 2026/7/3 0:00:32
6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…
📅 2026/7/2 17:37:53
引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…
📅 2026/7/2 17:37:51
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/3 4:46:22
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/2 9:49:12
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/3 10:20:06