STM8 使用74HC164外扩IO

news2024/10/6 1:42:34

背景

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

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

原理图

部分原理图设计如下

 

 软件设计

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

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

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

    CLK_DeInit();//设置为默认值
    CLK_HSICmd(ENABLE);//启用HSI
    CLK_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.coloradmin.cn/o/555555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二进制部署高可用k8s集群

第一章、前置知识点 1.1 生产环境部署K8S集群的两种方式 kubeadm Kubeadm是一个K8S部署工具&#xff0c;提供kubeadm init 和 kubeadm join&#xff0c;用于快速部署Kubernetes集群。 二进制包 从GitHub下载发行版的二进制包&#xff0c;手动部署每个组件&#xff0c;组成…

Idea部署Tomcat项目位置问题

Tomcat部署路径问题 1 默认情况 Tomcat安装目录下有webapps,是部署项目的,项目就运行在那里。 但是IDEA会为每个项目都拷贝一份足够的Tomcat文件放在c盘 ${user.home}/.IntelliJIdea/system/tomcat 或者 ${user.home/AppData/Local/JetBrains/IntelliJIdea2021.1/tomcat这样做…

【MySQL新手到通关】第二章 MySQL卸载安装

文章目录 1. MySQL的卸载1.1 停止MySQL服务1.2 软件的卸载 2. MySQL的下载、安装、配置2.1 软件的下载2.2 MySQL8.0 版本的安装2.3 配置MySQL8.02.4 配置MySQL8.0 环境变量2.5 MySQL5.7 版本的安装、配置2.6 安装失败问题 3. MySQL 登录3.1 服务的启动与停止3.2 自带客户端的登…

提高效率与代码重用:使用React Native和小程序容器简化开发

React Native是一个强大的前端跨端框架&#xff0c;可以帮助开发者高效地构建移动应用程序&#xff0c;并充分利用跨平台开发的优势&#xff0c;同时提供接近原生应用程序的性能和用户体验。它具有许多技术上的优势&#xff1a; 跨平台开发&#xff1a;使用React Native&#x…

AIGC持续火爆大模型争相推出,庞大市场造就算力供应模式演变

本图由AI生成 文/王吉伟 近期的AIGC领域仍旧火爆异常。 但火的不只是AIGC应用&#xff0c;还有巨头之间的AI竞赛&#xff0c;以及接连不断上新的AI大模型&#xff08;LLM&#xff0c;Large Language Model&#xff09;。 面对ChatGPT带来的技术冲击&#xff0c;为了研发谷歌多…

Spring事务失效常见的五种方式及其解决方案【源码篇】

一、前言 在Web 开发中&#xff0c;Spring 框架已经成为了众多开发者的首选。Spring 的声明式事务管理是其中最重要的特性之一&#xff0c;它可以帮助我们简化业务逻辑的复杂度&#xff0c;并且确保在出现异常情况时数据的一致性。 事务失效情况很常见&#xff0c;但我们只要…

对计算机方向科研工作者的建议 - 易智编译EaseEditing

如果你正在进行计算机科学研究&#xff0c;以下是一些建议可以帮助你&#xff1a; 确定研究兴趣&#xff1a; 选择一个你感兴趣的研究领域或问题&#xff0c;并确保你对该领域有足够的知识基础和热情。 深入学习&#xff1a; 通过阅读学术论文、参加研讨会和课程&#xff0c;…

有意思的CVE-2022-0337复现

前言 前两天在刷tw&#xff0c;看到了个比较有意思的一个CVE漏洞&#xff0c;价值奖励是10000美&#x1f52a;&#xff0c;比较好奇的是价值10000美&#x1f52a;的漏洞是什么样子的[苦涩]&#xff0c;漏洞利用就是需要在浏览器中进行用户交互才能触发该漏洞&#xff0c;但由于…

vr船舶装配模拟驾驶平台直观形象呈现操作流程和原理

船舶由成千上万种零件构成&#xff0c;需要众多的工业部门共同合作才能够完成这一庞大工程。除特有的船体建造技术外&#xff0c;造船还涉及到机械、电气、冶金、建筑、化学以至工艺美术等各个领域&#xff0c;因此船舶建造是一项劳动密集型、技术密集型和资金密集型的产业。 船…

【OpenAI】DALL·E 2,让我来带你认识一下这位来自AI界的艺术家

个人主页&#xff1a;【&#x1f60a;个人主页】 文章目录 前言什么是DALL-E 2 &#xff1f;介绍的怎么厉害&#xff0c;它又能干啥呢&#xff1f;基本功能新功能编辑变体功能 总结 前言 DALL-E 2 是一种基于语言的人工智能图像生成器&#xff0c;可以根据文本提示创建高质量的…

【学习日记2023.5.22】 之 套餐模块完善

4. 功能模块完善之套餐模块 4.1 新增套餐 4.1.1 需求分析与设计 产品原型 后台系统中可以管理套餐信息&#xff0c;通过 新增功能来添加一个新的套餐&#xff0c;在添加套餐时需要添加套餐对应菜品的信息&#xff0c;并且需要上传套餐图片。 新增套餐原型&#xff1a; 当填…

PMP-项目经理的角色

一、项目经理的作用 项目经理在领导团队达成项目目标方面发挥着至关重要的作用。一般来说&#xff0c;项目经理从项目启动时就开始参与项目直至项目结束&#xff0c;在这个过程中&#xff0c;项目经理发挥着对项目的规划、协调、控制等作用&#xff0c;确保与产品保持一致&…

用 Python 进行办公自动化都需要学习什么知识呢?

Python 自动化办公&#xff0c;无外乎就是 excel&#xff0c;ppt&#xff0c;word&#xff0c;再加上数据分析、爬虫等技能 下面我就来逐一介绍各项技能的基本使用 基本知识 1. Python基础知识&#xff1a; 包括语法、变量、数据类型、条件语句、循环语句、函数等基本概念和用…

代码随想录训练营Day48|● 198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III

目录 学习目标 学习内容 198.打家劫舍 213.打家劫舍II 337.打家劫舍III 学习目标 198.打家劫舍 213.打家劫舍II 337.打家劫舍III 学习内容 198.打家劫舍 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/house-robber/ class Soluti…

Hexo博客查图片并调整位置大小

Hexo博客查图片并调整位置&大小 &#x1f308;Description&#xff1a; ​ Markdown写文章插入图片&#xff0c;在hexo博客中&#xff0c;图片的大小似乎没有按照个markdown的语法生效&#xff0c;本文将解决此问题。 现有问题描述 obsidian中插入图片的语法&#xff1a; !…

当四款AI大模型遇上考公真题,谁被难倒了?

在当今社会&#xff0c;人工智能&#xff08;AI&#xff09;正以不可思议的速度发展&#xff0c;并在各个领域崭露头角&#xff0c;给人们的生活和工作带来许多便利。AI大模型被誉为人类“第二大脑”&#xff0c;成为人们学习、生活、工作的 “智能助手”。 公务员考试在我国教…

firewalld防火墙

firewalld防火墙 1&#xff1a;firewalld概述 firewalld防火墙是Centos7系统默认的防火墙管理工具&#xff0c;取代了之前的iptables防火墙&#xff0c;也是工作在网络层&#xff0c;属于包过滤防火墙。firewalld和iptables都是用来管理防火墙的工具&#xff08;属于用户态&a…

如何使用ChatGPT对论文进行润色

本文提供两种基于chatGPT的润色方式&#xff1a; &#xff08;1&#xff09;在chatGPT中利用editGPT插件润色 &#xff08;2&#xff09;chatGPT对话框引导chatGPT按照具体的意见进行润色。 1. 安装editGPT插件 问&#xff1a;为什么安装 editGPT&#xff1f; 答&#xff1a;…

STM32手柄PS2

PS2手柄介绍 PS2手柄由手柄与接收器两部分组成&#xff0c;手柄主要负责发送按键信息&#xff1b;接收器与单片机&#xff08;也可叫做主机&#xff09;相连&#xff0c;用于接收手柄发来的信息&#xff0c;并传递给单片机&#xff0c;单片机也可通过接收器&#xff0c;向手柄…

提示词工程师入门 百度文心Prompt课之十大技巧(适用所有AI大模型)

Promot知识 大模型基本原理 给模型输入什么数据&#xff0c;模型就会尝试学习什么内容Prompt十个技巧 三大类 迭代法 1、定基础 优先保证任务生成主体能够生成出我们想要的内容细节形式 在给出任务生成主体的情况下&#xff0c;模型生成效果较差&#xff0c;可增加细节词也无济…