MC74HC595驱动

本文详细介绍了如何使用STM32微控制器来驱动MC74HC595 Shift Register,包括连接方式、配置GPIO、数据传输等关键步骤,帮助读者掌握扩展输出口的方法。
摘要由CSDN通过智能技术生成
/**
  ******************************************************************************
  * @file    V_MC74HC595.h
  * @author  LuJ
  * @version V3.5.0
  * @date    2015-03-31
  * @brief   移位寄存器头文件管理
  ******************************************************************************
  * (C) Copyright Vango Technoglogy, Inc. 2015
  ******************************************************************************
  */
#ifndef __V_MC74HC595_H
#define __V_MC74HC595_H  

#include "stm32f10x.h"

//位带操作,实现51类似的GPIO控制功能
//具体实现思想,参考<<CM3权威指南>>第五章(87页~92页).
#define V_74TCLK_OUT  *((volatile unsigned long *)((((GPIOF_BASE+12) & 0xF0000000)+0x2000000+(((GPIOF_BASE+12) &0xFFFFF)<<5)+(4<<2)))) 
#define V_74HCLK_OUT  *((volatile unsigned long *)((((GPIOF_BASE+12) & 0xF0000000)+0x2000000+(((GPIOF_BASE+12) &0xFFFFF)<<5)+(5<<2)))) 
#define V_74OE_OUT    *((volatile unsigned long *)((((GPIOF_BASE+12) & 0xF0000000)+0x2000000+(((GPIOF_BASE+12) &0xFFFFF)<<5)+(6<<2)))) 
#define V_74SDI_OUT   *((volatile unsigned long *)((((GPIOF_BASE+12) & 0xF0000000)+0x2000000+(((GPIOF_BASE+12) &0xFFFFF)<<5)+(7<<2)))) 

#define MC74HC595_OUT_V_SELA                 ((uint32_t)0x00000001)//MC74HC595移位寄存器
#define MC74HC595_OUT_V_SELB                 ((uint32_t)0x00000002)
#define MC74HC595_OUT_V_SELC                 ((uint32_t)0x00000004)
#define MC74HC595_OUT_V_SEL_EN               ((uint32_t)0x00000008)
#define MC74HC595_OUT_V_SEL_PWM1             ((uint32_t)0x00000010)
#define MC74HC595_OUT_V_SEL_PWM2             ((uint32_t)0x00000020)
#define MC74HC595_OUT_V_SEL_UART             ((uint32_t)0x00000040)
#define MC74HC595_OUT_V_RSTn                 ((uint32_t)0x00000080)
#define MC74HC595_OUT_V_VDCIN                ((uint32_t)0x00000100)
#define MC74HC595_OUT_V_V3V                  ((uint32_t)0x00000200)
#define MC74HC595_OUT_VT_MODE0               ((uint32_t)0x00000400)
#define MC74HC595_OUT_VT_MODE1               ((uint32_t)0x00000800)
#define MC74HC595_OUT_V_DVCC_ctr2            ((uint32_t)0x00001000)
#define MC74HC595_OUT_V_DVCC_ctr1            ((uint32_t)0x00002000)
#define MC74HC595_OUT_V_LDO33_ctr2           ((uint32_t)0x00004000)
#define MC74HC595_OUT_V_LDO33_ctr1           ((uint32_t)0x00008000)
#define MC74HC595_OUT_V_vPower_ctr1          ((uint32_t)0x00010000)
#define MC74HC595_OUT_V_vPower_ctr2          ((uint32_t)0x00020000)
#define MC74HC595_OUT_V_vPower_ctr3          ((uint32_t)0x00040000)
#define MC74HC595_OUT_V_SPI1_CS1             ((uint32_t)0x00080000)
#define MC74HC595_OUT_V_SPI1_CS2             ((uint32_t)0x00100000)
#define MC74HC595_OUT_V_W25Q_CS              ((uint32_t)0x00200000)
#define MC74HC595_OUT_V_DS3231_ctr1          ((uint32_t)0x00400000)
#define MC74HC595_OUT_V_DS3231_ctr2          ((uint32_t)0x00800000)
#define MC74HC595_OUT_V_LED1                 ((uint32_t)0x01000000)
#define MC74HC595_OUT_V_LED2                 ((uint32_t)0x02000000)
#define MC74HC595_OUT_V_LED3                 ((uint32_t)0x04000000)

#define Target_SET_DVCC_ctr1                 ((uint8_t)0x01)//DVCC控制,ctr1和ctr2不同时打开
#define Target_SET_DVCC_ctr2                 ((uint8_t)0x02)
#define Target_RESET_DVCC_ctr                ((uint8_t)0x80)
#define Target_SET_LDO33_ctr1                ((uint8_t)0x01)//LDO33控制
#define Target_SET_LDO33_ctr2                ((uint8_t)0x02)
#define Target_RESET_LDO33_ctr               ((uint8_t)0x80)
#define Target_SET_vPower_ctr1               ((uint8_t)0x01)//Target的电源供给控制
#define Target_SET_vPower_ctr2               ((uint8_t)0x02)
#define Target_SET_vPower_ctr3               ((uint8_t)0x04)
#define Target_RESET_vPower_ctr              ((uint8_t)0x80)
#define Target_SET_DS3231_ctr1               ((uint8_t)0x01)//DS3231秒脉冲和32KHz输出控制
#define Target_SET_DS3231_ctr2               ((uint8_t)0x02)
#define Target_RESET_DS3231_ctr              ((uint8_t)0x80)
#define STM32_SET_LED_1                      ((uint8_t)0x01)//STM32外围LED灯控制
#define STM32_SET_LED_2                      ((uint8_t)0x02)
#define STM32_SET_LED_3                      ((uint8_t)0x04)
#define STM32_RESET_LED_x                    ((uint8_t)0x80)

#define ADG1408_Type_SEGx                    ((uint8_t)0x01)//模拟开关类型选择,可选择SEG/UART/PWM1/PWM2
#define ADG1408_Type_UARTx                   ((uint8_t)0x02)
#define ADG1408_Type_PWM1                    ((uint8_t)0x04)
#define ADG1408_Type_PWM2                    ((uint8_t)0x08)
#define ADG1408_Type_AllClose                ((uint8_t)0x80)
#define ADG1408_Channel_1                    ((uint8_t)0x00)//模拟开关通道1-8选择
#define ADG1408_Channel_2                    ((uint8_t)0x01)
#define ADG1408_Channel_3                    ((uint8_t)0x02)
#define ADG1408_Channel_4                    ((uint8_t)0x03)
#define ADG1408_Channel_5                    ((uint8_t)0x04)
#define ADG1408_Channel_6                    ((uint8_t)0x05)
#define ADG1408_Channel_7                    ((uint8_t)0x06)
#define ADG1408_Channel_8                    ((uint8_t)0x07)

extern uint32_t mc74hc595_val;

void V_74HC595_Init(void);//初始化
void V_74HC595_ShiftOuput(u32 shift_val);
void T_ADG1408_Select(uint8_t ADG1408_Type_x,uint8_t ADG1408_Channel_x);
void T_Target_RSTn(void);
void T_Target_VDCIN(BitAction BitVal);
void T_Target_V3V(BitAction BitVal);
void T_Target_MODEx(BitAction BitMode0,BitAction BitMode1);
void T_Target_DVCC_ctr(uint8_t DVCC_ctr_x);
void T_Target_LDO33_ctr(uint8_t LDO33_ctr_x);
void T_Target_vPower_ctr(uint8_t vPower_ctr_x);
void T_ADS8332_SPI1_CS1(BitAction BitVal);
void T_TLV5618_SPI1_CS2(BitAction BitVal);
void W25Q80_W25Q_CS(BitAction BitVal);
void V_DS3231_ctr(uint8_t DS3231_ctr_x);
void STM32_V_LEDx(uint8_t STM32_SET_LED_x);
void V_74HC595_Test(void);
      
#endif


/**
  ******************************************************************************
  * @file    V_MC74HC595.c
  * @author  LuJ
  * @version V3.5.0
  * @date    2015-03-31
  * @brief   MC74HC595移位寄存器 驱动
  ******************************************************************************
  * (C) Copyright Vango Technoglogy, Inc. 2015
  ******************************************************************************
  */
#include "st_lib.h"
#include "V_MC74HC595.h"

uint32_t mc74hc595_val=0x07380980;//全局变量,控制移位寄存器输出状态
 
/**
  * 函数功能:移位寄存器IO配置.初始化PF4/PF5/PF6/PF7为输出口,并使能这两个口的时钟
  * 输入参数:无
  * 输出参数:无
* 全局变量:无
* 作者:LuJ
* 修改日期:2015/03/31
* 备注:无
  */
void V_74HC595_Init(void)
{
GPIO_InitTypeDef  GPIO_InitStructure;
GPIO_TypeDef* GPIOx;
uint16_t GPIO_Pin_x;

GPIOx = GPIOF;
GPIO_Pin_x = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//移位寄存器硬件对应IO
 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);//使能PF端口时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_x;//74HC595端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//IO口速度为50MHz
GPIO_Init(GPIOx, &GPIO_InitStructure);//根据设定参数初始化GPIOx
GPIO_ResetBits(GPIOx,GPIO_Pin_x);//输出低
}
 
/**
  * 函数功能:移位寄存器移位输出
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值