STM8 使用74HC164外扩IO

news/2024/10/17 18:14:46/

背景

在嵌入式开发过程中,经常使用时、甚至设计时候,考虑成本等因素,需要外扩IO。这里就是使用STM8S003F3P6,这个芯片比较常用的,这个芯片封装很小,只有20个管脚的MCU,实际产品上用的非常多。

很多项目上都会使用,但是实际需求上,需要控制特别多灯,还有数码管,所以采用74hc164进行外扩IO的设计

原理图

部分原理图设计如下

 

 软件设计

STM8S003F3P6的时钟配置,这里必须要提时钟配置,因为时钟关系到延时问题

所以,对于读者移植到其他MCU上比较关键

这里采用内部16M时钟,CPU选择1分频,就是主频时16Mhz

    CLK_DeInit();//设置为默认值CLK_HSICmd(ENABLE);//启用HSICLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//HSI分频CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);//CPU分频

初始化STM8S003F3P6

控制74HC164使用管脚,PA1/PD3

这里从原理图上可以看出来

GPIO_Init(GPIOA, (GPIO_Pin_TypeDef)(GPIO_PIN_1), GPIO_MODE_OUT_PP_LOW_SLOW);//PA1 GPIO_Init(GPIOD, (GPIO_Pin_TypeDef)(GPIO_PIN_4), GPIO_MODE_OUT_PP_LOW_SLOW);//PD4

74HC164控制头文件

这里主要是针对使用的宏定义,进行说明

STM8S003F3P6

控制74HC164使用管脚拉高、拉低宏定义


#define SHCP595_H                            {GPIO_WriteHigh(GPIOA, GPIO_PIN_1);}
#define SHCP595_L                            {GPIO_WriteLow(GPIOA, GPIO_PIN_1);}
#define DATA595_H                            {GPIO_WriteHigh(GPIOD, GPIO_PIN_4);}
#define DATA595_L                            {GPIO_WriteLow(GPIOD, GPIO_PIN_4);}

74hc164的控制逻辑

这里和手册里面描述的逻辑时一致的,这个函数是由74hc595改写过来,其实也类似74hc595

只是74HC595还多一个控制IO管脚

因为74hc595又锁存功能,可以先把数据放到缓存,然后通过STCP管脚的上升沿,将缓存数据生效。

这里讲多了,74hc164显然时序简单很多,可以参考如下代码 

/*** @brief  74HC164外扩IO* @param  * @retval None.
**/
void HC164SendData(uint8_t OutData)
{unsigned char i; for (i = 0; i < 8; i++) //{SHCP595_L;  //时钟线底//HC164Dly(50);if ((OutData & 0x80) == 0x80) //{DATA595_H; //}else{DATA595_L; //}OutData = OutData << 1; //SHCP595_H;          ////HC164Dly(50);}//上升沿输出数据///STCP595(0);//HC164Dly(50);///STCP595(1);
}

其他

74hc164的一些关键资料

 当时钟信号(CP)从低电平变为高电平的时候将 DSA(B) 输入的一位数据输出到 Q0,当时钟第二次由低电平变为高电平的时候将 Q0 的数据移动到 Q1,新的数据依旧保存在 Q0。依此类推,每一个时钟周期中都有一个串行数据输入到 Q0,而其他的数据则不断往高位移动直到所有数据传输结束。如果不再有时钟周期输入,则这些数据将暂存在输出端。
由于 74HC164 不带锁存器功能,也就是说在每移一位数据都会实时反应在输出口上,这样会导致输出口有不必要的电平变化,虽然非常短暂但是,但是有些情况下这是不允许发生的,如果对时序逻辑有要求的话。


http://www.ppmy.cn/news/86639.html

相关文章

网络安全合规-数据分类分级具体操作

数据的安全防护&#xff0c;前提在于数据的分级分类。不同类别&#xff0c;不同安全等级的数据&#xff0c;防护手段和要求也是不尽相同的。 数据分类分级整体工作内容&#xff1a; 基础数据资产盘点 通过业务调研及技术探测&#xff0c;对企业的数据库进行全面扫描&#xff0c…

AF594 NHS,Alexa Fluor594 NHS Ester,AF 594 NHS 活化酯,用于成像和流式细胞术中的稳定信号生成

【产品描述】 陕西新研博美生物科技有限公司供应的​Alexa Fluor594是一种鲜红色染料。Alexa Fluor用于成像和流式细胞术中的稳定信号生成 594染料是水溶性的&#xff0c;并且从pH 4到pH 10对pH不敏感。Alexa Fluor 594染料与多种抗体、肽、蛋白质、示踪剂和扩增底物偶联&#…

pyside6中QcommandLinkButton 控件qss有哪些用法和案例

QCommandLinkButton 是 Qt GUI 框架中的一个功能按钮类&#xff0c;而 Qt Style Sheets (QSS) 提供了一种强大的方式来自定义 Qt 控件的外观。以下是 QCommandLinkButton 常用的 QSS 用法&#xff1a; 设置按钮样式&#xff1a;使用 background-color、border、color 等属性来设…

七、jdbcTemplate

一、JdbcTemplate(概念和准备) 1.什么是JdbcTemplate Spring框架对JDBC进行封装&#xff0c;使用JdbcTemplate方便对数据库操作 2.准备工作 引入相关的jar包 在spring配置文件配置数据库连接池 <!--数据库连接池--> <bean id"dataSource" class"c…

如何使用DOM操作HTML元素

欢迎来到DOM操作的狂欢&#xff01;你想改变HTML元素的样式或者移动它们&#xff1f;没问题&#xff0c;DOM操作可以轻松实现这些&#xff01; 首先&#xff0c;我们来谈谈什么是DOM。DOM就像一棵树&#xff0c;它的每个节点代表HTML文档中的一个元素。你想要修改或者操作这些元…

使用yolov5实现图片分类

文章目录 开始之前下载依赖数据集下载新建配置文件执行训练模型选择训练完成测试模型进行预测自定义模型下载数据集下载地址分享问题 开始之前 你应当先克隆这个仓库 git clone https://github.com/ultralytics/yolov5 # clone下载完毕后&#xff0c;进入克隆的仓库目录 cd …

一图看懂 importlib_metadata 模块:用于提供第三方访问Python包的元数据的库,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 importlib_metadata 模块&#xff1a;用于提供第三方访问Python包的元数据的库&#xff0c;资料整理笔记&#xff08;大全&#xff09; &#x1f9ca;摘要&#x1f9ca;模块…

04. 数据结构之栈

前言 栈&#xff08;stack&#xff09;是一种线性数据的逻辑存储结构。栈中的元素只能先入后出&#xff08;First In Last Out&#xff0c;简称FILO&#xff09;。最早进入的元素存放的位置叫作栈底&#xff08;bottom&#xff09;&#xff0c;最后进入的元素存放的位置叫作栈…