首页 > 其他分享 >单片机 STM32 HAL IO扩展 74HC595 例子代码

单片机 STM32 HAL IO扩展 74HC595 例子代码

时间:2022-10-31 19:32:43浏览次数:106  
标签:74HC595 HAL PIN pin HC595 STM32 GPIO data port


#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

单片机 STM32 HAL IO扩展 74HC595 例子代码_数据

单片机 STM32 HAL IO扩展 74HC595 例子代码_移位寄存器_02

​74HC595中文资料.pdf​


标签:74HC595,HAL,PIN,pin,HC595,STM32,GPIO,data,port
From: https://blog.51cto.com/xuejianqiang/5810952

相关文章

  • STM32 HAL CPU Monitor 查询CPU使用率 查询CPU温度
    /*********************************************************************************@filecpu_utils.c*@authorMCDApplicationTeam*@versionV1.1.0......
  • stm32l4
    STM32L4seriesofultra-low-powerMCUsSThasbuiltanewarchitecturetoreachbest-in-classultra-low-powerfiguresthankstoitshighflexibility.STM32L4M......
  • STMicroelectronics STM32F103C8
    STMicroelectronics STM32F103C8ARMCortex-M3,72MHz,64kBROM,20kBRAMSTMicroelectronics'STM32F1seriesofmainstreamMCUscoverstheneedsofalar......
  • STM32 CAN 过滤器、滤波屏蔽器配置总结
    (27条消息)STM32CAN过滤器、滤波屏蔽器配置总结_jixiangrurui的博客-CSDN博客......
  • 【XSY4231】人赢(图论,Hall定理,Trie树,树形DP)
    首先二分答案,设为\(mid\)。现在的问题是:若\(a_i\oplusa_j\geqmid\),则\(i,j\)之间有一条连边,判断是否存在一种选边方式使得每个点都恰好在一个简单环上(可以是自环或......
  • Go中json的marshal解析
    转自:https://blog.csdn.net/zxy_666/article/details/801732881.JsonMarshal将数据结构编码成json字符串。Json(JavascriptObjectNanotation)是一种数据交换格式,常用......
  • 基于过程单片机CH32、STM32实现TM1640点亮16位共阴极数码管,显示“0~F”数字
    TM1640入门学习手册实例1EgTM1640——【基于CH32V103】本节我们目标是实现TM1640点亮16位共阴极数码管,显示“0~F”数字;1硬件设计GPIO初始化配置SCL(PB6)SDA(PB7);......
  • Let’s Encrypt Challenge and acme.sh Issue Mode
    Basicdnscname:将域名指向另外一个域名;txt:存储一个512长度内的文本,通常作SPF记录(SenderPolicyFramework反垃圾邮件);ns:将子域名指定其他的DNS服务器解析;dig​​linuxd......
  • stm32h750移植lvgl
    之前没做过ui,只用过lcd画几条线写点字,如果按键、菜单什么的全用线画也太麻烦了,所以需要一个ui库。听说lvgl用的人很多,就打算裸机移植一下用用。本文移植的lvgl版本是lvgl6......
  • vulnhub靶场之THALES: 1
    准备:攻击机:虚拟机kali、本机win10。靶机:THALES:1,网段地址我这里设置的桥接,所以与本机电脑在同一网段,下载地址:https://download.vulnhub.com/thales/Thales.zip,下载解压......