自己做了一塊74HC595的IO擴展板卡,出于靈活考慮,沒有都采用級聯的方式,而是2組多芯片級聯的結構。基于STM32平臺設計。
結構示意圖
74HV595內部結構圖
頭文件:
#ifndef __74HC595_H__
#define __74HC595_H__
#include "main.h"
typedef struct{
GPIO_TypeDef* GPIOx;
uint16_t GPIO_Pin;
}strHC595_Port;
//非級聯74HC595芯片組數
#define HC595_GROUP_NUMBER 2
/* 第一組芯片 */
//使能
#define HC595_OE1_RCC_GPIOX_EN __HAL_RCC_GPIOA_CLK_ENABLE()
#define HC595_OE1_GPIO GPIOA
#define HC595_OE1_PIN GPIO_PIN_4
//鎖存
#define HC595_RCLK1_RCC_GPIOX_EN __HAL_RCC_GPIOA_CLK_ENABLE()
#define HC595_RCLK1_GPIO GPIOA
#define HC595_RCLK1_PIN GPIO_PIN_6
//時鐘
#define HC595_SRCLK1_RCC_GPIOX_EN __HAL_RCC_GPIOA_CLK_ENABLE()
#define HC595_SRCLK1_GPIO GPIOA
#define HC595_SRCLK1_PIN GPIO_PIN_7
//清除
#define HC595_SRCLR1_RCC_GPIOX_EN __HAL_RCC_GPIOA_CLK_ENABLE()
#define HC595_SRCLR1_GPIO GPIOA
#define HC595_SRCLR1_PIN GPIO_PIN_5
//數據
#define HC595_DATA1_RCC_GPIOX_EN __HAL_RCC_GPIOC_CLK_ENABLE()
#define HC595_DATA1_GPIO GPIOC
#define HC595_DATA1_PIN GPIO_PIN_4
/* 第二組芯片 */
//使能
#define HC595_OE2_RCC_GPIOX_EN __HAL_RCC_GPIOA_CLK_ENABLE()
#define HC595_OE2_GPIO GPIOB
#define HC595_OE2_PIN GPIO_PIN_3
//鎖存
#define HC595_RCLK2_RCC_GPIOX_EN __HAL_RCC_GPIOB_CLK_ENABLE()
#define HC595_RCLK2_GPIO GPIOB
#define HC595_RCLK2_PIN GPIO_PIN_5
//時鐘
#define HC595_SRCLK2_RCC_GPIOX_EN __HAL_RCC_GPIOB_CLK_ENABLE()
#define HC595_SRCLK2_GPIO GPIOB
#define HC595_SRCLK2_PIN GPIO_PIN_6
//清除
#define HC595_SRCLR2_RCC_GPIOX_EN __HAL_RCC_GPIOB_CLK_ENABLE()
#define HC595_SRCLR2_GPIO GPIOB
#define HC595_SRCLR2_PIN GPIO_PIN_4
//數據
#define HC595_DATA2_RCC_GPIOX_EN __HAL_RCC_GPIOB_CLK_ENABLE()
#define HC595_DATA2_GPIO GPIOB
#define HC595_DATA2_PIN GPIO_PIN_7
extern void HC595_Init(void);
extern uint8_t HC595_write(uint8_t group,uint8_t nbit,uint32_t datas);
#endif /*__74HC595_H__*/
源文件:
#include "74HC595.h"
strHC595_Port HC595_OE_Port[HC595_GROUP_NUMBER]=
{
{HC595_OE1_GPIO,HC595_OE1_PIN},
{HC595_OE2_GPIO,HC595_OE2_PIN},
//元素個數與HC595_GROUP_NUMBER對應
};
strHC595_Port HC595_RCLK_Port[HC595_GROUP_NUMBER]=
{
{HC595_RCLK1_GPIO,HC595_RCLK1_PIN},
{HC595_RCLK2_GPIO,HC595_RCLK2_PIN},
//元素個數與HC595_GROUP_NUMBER對應
};
strHC595_Port HC595_SRCLK_Port[HC595_GROUP_NUMBER]=
{
{HC595_SRCLK1_GPIO,HC595_SRCLK1_PIN},
{HC595_SRCLK2_GPIO,HC595_SRCLK2_PIN},
//元素個數與HC595_GROUP_NUMBER對應
};
strHC595_Port HC595_SRCLR_Port[HC595_GROUP_NUMBER]=
{
{HC595_SRCLR1_GPIO,HC595_SRCLR1_PIN},
{HC595_SRCLR2_GPIO,HC595_SRCLR2_PIN},
//元素個數與HC595_GROUP_NUMBER對應
};
strHC595_Port HC595_DATA_Port[HC595_GROUP_NUMBER]=
{
{HC595_DATA1_GPIO,HC595_DATA1_PIN},
{HC595_DATA2_GPIO,HC595_DATA2_PIN},
//元素個數與HC595_GROUP_NUMBER對應
};
//操作接口宏定義
#define HC595_OE_PIN(X) HC595_OE_Port[X].GPIO_Pin
#define HC595_OE_GPIO(X) HC595_OE_Port[X].GPIOx
#define HC595_OE_H(X) HAL_GPIO_WritePin(HC595_OE_GPIO(X), HC595_OE_PIN(X), GPIO_PIN_SET)
#define HC595_OE_L(X) HAL_GPIO_WritePin(HC595_OE_GPIO(X), HC595_OE_PIN(X), GPIO_PIN_RESET)
#define HC595_RCLK_PIN(X) HC595_RCLK_Port[X].GPIO_Pin
#define HC595_RCLK_GPIO(X) HC595_RCLK_Port[X].GPIOx
#define HC595_RCLK_H(X) HAL_GPIO_WritePin(HC595_RCLK_GPIO(X), HC595_RCLK_PIN(X), GPIO_PIN_SET)
#define HC595_RCLK_L(X) HAL_GPIO_WritePin(HC595_RCLK_GPIO(X), HC595_RCLK_PIN(X), GPIO_PIN_RESET)
#define HC595_SRCLK_PIN(X) HC595_SRCLK_Port[X].GPIO_Pin
#define HC595_SRCLK_GPIO(X) HC595_SRCLK_Port[X].GPIOx
#define HC595_SRCLK_H(X) HAL_GPIO_WritePin(HC595_SRCLK_GPIO(X), HC595_SRCLK_PIN(X), GPIO_PIN_SET)
#define HC595_SRCLK_L(X) HAL_GPIO_WritePin(HC595_SRCLK_GPIO(X), HC595_SRCLK_PIN(X), GPIO_PIN_RESET)
#define HC595_SRCLR_PIN(X) HC595_SRCLR_Port[X].GPIO_Pin
#define HC595_SRCLR_GPIO(X) HC595_SRCLR_Port[X].GPIOx
#define HC595_SRCLR_H(X) HAL_GPIO_WritePin(HC595_SRCLR_GPIO(X), HC595_SRCLR_PIN(X), GPIO_PIN_SET)
#define HC595_SRCLR_L(X) HAL_GPIO_WritePin(HC595_SRCLR_GPIO(X), HC595_SRCLR_PIN(X), GPIO_PIN_RESET)
#define HC595_DATA_PIN(X) HC595_DATA_Port[X].GPIO_Pin
#define HC595_DATA_GPIO(X) HC595_DATA_Port[X].GPIOx
#define HC595_DATA_H(X) HAL_GPIO_WritePin(HC595_DATA_GPIO(X), HC595_DATA_PIN(X), GPIO_PIN_SET)
#define HC595_DATA_L(X) HAL_GPIO_WritePin(HC595_DATA_GPIO(X), HC595_DATA_PIN(X), GPIO_PIN_RESET)
void HC595_delay_us(uint8_t t_us)
{
//修改為系統中對應的微秒級延時函數,根據實際需求可以換成更小的ns級延時
delay_us(t_us);
}
/*
*描述:初始化HC595_GROUP_NUMBER組芯片對應的控制引腳
*/
void HC595_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
uint8_t i = 0;
/* GPIO Ports Clock Enable */
//第一組芯片引腳時鐘
HC595_OE1_RCC_GPIOX_EN;
HC595_RCLK1_RCC_GPIOX_EN;
HC595_SRCLK1_RCC_GPIOX_EN;
HC595_SRCLR1_RCC_GPIOX_EN;
HC595_DATA1_RCC_GPIOX_EN;
//第二組芯片引腳時鐘
HC595_OE2_RCC_GPIOX_EN;
HC595_RCLK2_RCC_GPIOX_EN;
HC595_SRCLK2_RCC_GPIOX_EN;
HC595_SRCLR2_RCC_GPIOX_EN;
HC595_DATA2_RCC_GPIOX_EN;
/*Configure GPIO pin */
for(i=0; i
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
STM32
+關注
關注
2273文章
10926瀏覽量
357772 -
時鐘
+關注
關注
11文章
1747瀏覽量
131854 -
GPIO
+關注
關注
16文章
1217瀏覽量
52436 -
74HC595
+關注
關注
7文章
193瀏覽量
30956 -
擴展板卡
+關注
關注
0文章
2瀏覽量
1222
發布評論請先 登錄
相關推薦
74HC595芯片的作用是什么
74HC595是在單片機系統中常用的芯片之一他的作用就是把串行的信號轉為并行的信號,常用在各種數碼管以及點陣屏的驅動芯片, 使用74HC595可以節約單片機mcu的io口資源,用3個io
發表于 07-22 07:05
單片機IO直連控制74HC595
最近在調74HC595,單片機IO直連控制74HC595,單片機輸出3.3v, 而74HC595是5v供電。發現74HC595輸出時好時壞,
發表于 12-02 07:20
74HC595怎么使用
一、74HC595使用方法74HC595的數據端Q0--Q7:八位并行輸出端,可以直接控制數碼管的8個段。Q7:級聯輸出端。將它接下一個595的DS端。DS:串行數據輸入端,級聯的話接上一級的Q7
發表于 12-07 06:46
如何實現74HC595驅動數碼管顯示
?4、數碼管顯示數碼管驅動電路采用2片74HC595芯片進行IO擴展,僅僅只需3Pin即可驅動需要16位引腳的數碼管。74HC595是一個8位串行輸入、并行輸出的位移緩存器。只有對
發表于 12-07 07:29
74HC595多組芯片多組級聯代碼分享
?自己做了一塊74HC595的IO擴展板卡,出于靈活考慮,沒有都采用級聯的方式,而是2組多芯片級聯的結構?。基于STM32平臺設計?。?結構示意圖7
發表于 12-07 06:43
MCU驅動74hc595的方法
MCU驅動74hc595下圖關于595數據手冊上的介紹,使用比較簡單兩片級聯控制擴展IO輸出端口,可以用最少三個GPIO控制16路輸出單片機驅動59
發表于 02-08 06:04
IO口擴展芯片74HC165和74HC595的使用實例代碼免費下載
IO口擴展芯片,主要是解決單片機IO口太少。 74HC165:數據從并轉串 74HC595:數據從串轉并兩種芯片,都是通過時序電路,加上移
發表于 09-19 17:20
?51次下載
![<b class='flag-5'>IO</b>口<b class='flag-5'>擴展</b>芯片<b class='flag-5'>74HC</b>165和<b class='flag-5'>74HC595</b>的使用實例代碼免費下載](https://file.elecfans.com/web1/M00/A7/04/o4YBAF2DPXmAfJb7AAcqjm8uwWw969.png)
74HC595 3.3V 單片機 驅動繼電器
最近在調74HC595,單片機IO直連控制74HC595,單片機輸出3.3v, 而74HC595是5v供電。將 74HC595改成3.3V供
發表于 11-23 17:36
?33次下載
![<b class='flag-5'>74HC595</b> 3.3V 單片機 驅動繼電器](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
74HC595多組芯片多組級聯代碼
?自己做了一塊74HC595的IO擴展板卡,出于靈活考慮,沒有都采用級聯的方式,而是2組多芯片級聯的結構?。基于STM32平臺設計?。?結構示意圖7
發表于 11-24 10:51
?58次下載
![<b class='flag-5'>74HC595</b>多組芯片多組級聯代碼](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
MCU驅動74hc595
MCU驅動74hc595下圖關于595數據手冊上的介紹,使用比較簡單兩片級聯控制擴展IO輸出端口,可以用最少三個GPIO控制16路輸出單片機驅動59
發表于 12-05 10:36
?61次下載
![MCU驅動<b class='flag-5'>74hc595</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論