IO口扩展
- //部分代码如下:完整代码请参考资料
- /******************************************************************************
- ***stm32 GPIO口扩展使用说明***
- 功能:6个GPIO口扩展出4个8位GPIO口共32个IO口
- 硬件:输入---4个74HC165 输出---4个74HC595
- 示例:
- 1.扩展IO的命名规则:P1、P2、P3、P4口,同C51单片机
- 2.P1_OUT(0xFD); //P1口输出数据0xFD
- 3.P11_H;P11_L; //P11引脚输出高电平,输出低电平
- 4.if(P12in==0) //读取P12引脚电平状态是否为0
- 5.if(P1_IN()==0xFD) //读取P1口数据是否为0xFD
- 6.如使用不到输入则可只用输出,输入部分可割舍
- *******************************************************************************/
- #ifndef _EXTENDGPIO_H
- #define _EXTENDGPIO_H
- /**************驱动接口定义(共6个GPIO口,移植需要修改的部分)**************/
- //(需配合stm32仿C51头文件使用,或自行修改)
- #define SO_IN PB0_IN
- #define SOin PB0in //IO状态读取数据线
- #define CLK_OUT PB1_OUT
- #define CLK_H PB1=1
- #define CLK_L PB1=0 //IO状态读取时钟线
- #define PL_OUT PB2_OUT
- #define PL_H PB2=1
- #define PL_L PB2=0 //IO状态读取功能使能线
- #define DS_OUT PB3_OUT
- #define DS_IN PB3_IN
- #define DS_H PB3=1
- #define DS_L PB3=0
- #define DSin PB3in //IO状态输出数据线
- #define SH_OUT PB4_OUT
- #define SH_H PB4=1
- #define SH_L PB4=0 //IO状态输出数据移位时钟线
- #define ST_OUT PB5_OUT
- #define ST_IN PB5_IN
- #define ST_H PB5=1
- #define ST_L PB5=0
- #define STin PB5in //IO状态输出数据锁存时钟线
- /*********************************************************/
- #define u8 unsigned char
- #define u16 unsigned short
- #define u32 unsigned int
-
- u32 EXTGPIOSTATE; //扩展IO状态缓存
- void EXTGPIO_SEND(u32 exdata)
- {
- u8 i;
- DS_OUT;//DS配置为输出状态
- SH_OUT;//SH配置为输出状态
- ST_OUT;//ST配置为输出状态
- EXTGPIOSTATE=exdata;//保存IO口状态
- for(i=0;i<32;i++)
- {
- if((exdata<<i)&0x80000000) DS_H;
- else DS_L;
- SH_L;
- SH_H; //上升沿,bit数据移位进入移位寄存器
- }
- ST_L;
- ST_H; //上升沿,移位寄存器数据进入数据寄存器
- DS_H; //拉高数据线
- }
复制代码
//文件包含程序+proteus仿真文件,在你的stm32f1工程里#include "extendgpio.h"即可使用。ps:proteus需要8.6版本或以上版本才能进行stm32仿真
全部资料51hei下载地址:
扩展程序 仿真文件.zip
(35.03 KB, 下载次数: 104)
|