#include "extgpio.h"
#include "pcf8574.h"
#include "74hc595.h"
/******************
笔记:
1、X输入 Y输出
2、NPN(箭头向下)高电平时导通,PNP(箭头向上)低电平时导通;
3、PCF8574 IIC通讯  8个双向引脚 利用IIC引脚可写可读
4、74HC595 自带协议 8个单向引脚 引脚可写不可读
*******************/#define  FREE_CONTROL 0     //释放气缸控制权 (1 释放 0 不释放)const IIC_PIN pcf8574[3] =
{{.SCL_PORT  = IIC_SCL_GPIO_Port,.SCL_PIN   = IIC_SCL_Pin,.SDA_PORT  = IIC_SDA_GPIO_Port,.SDA_PIN   = IIC_SDA_Pin,.DelayTick = 10,.ADDR      = 0x42 //详细见PCF8574寻址},{.SCL_PORT  = IIC_SCL_GPIO_Port,.SCL_PIN   = IIC_SCL_Pin,.SDA_PORT  = IIC_SDA_GPIO_Port,.SDA_PIN   = IIC_SDA_Pin,.DelayTick = 10,.ADDR      = 0x44},{.SCL_PORT  = IIC_SCL_GPIO_Port,.SCL_PIN   = IIC_SCL_Pin,.SDA_PORT  = IIC_SDA_GPIO_Port,.SDA_PIN   = IIC_SDA_Pin,.DelayTick = 10,.ADDR      = 0x46}
};const T_GPIO_TYPE INPUT_PINS[8] =        //输入端子板(内部)
{{.port = GPIOB, .pin = GPIO_PIN_12},{.port = GPIOB, .pin = GPIO_PIN_13},{.port = GPIOB, .pin = GPIO_PIN_14},{.port = GPIOB, .pin = GPIO_PIN_15},{.port = GPIOC, .pin = GPIO_PIN_6},{.port = GPIOC, .pin = GPIO_PIN_7},{.port = GPIOC, .pin = GPIO_PIN_8},{.port = GPIOA, .pin = GPIO_PIN_11}
};const T_GPIO_TYPE OUTPUT_PINS[6] =       //输出端子板
{{.port = GPIOC, .pin = GPIO_PIN_5},{.port = GPIOC, .pin = GPIO_PIN_4},{.port = GPIOA, .pin = GPIO_PIN_7},{.port = GPIOA, .pin = GPIO_PIN_6},{.port = GPIOA, .pin = GPIO_PIN_5},{.port = GPIOA, .pin = GPIO_PIN_4}
};const T_GPIO_TYPE id_pin[4] =            //单板地址拨码选择
{{.port = GPIOA, .pin = GPIO_PIN_12},{.port = GPIOB, .pin = GPIO_PIN_4},{.port = GPIOB, .pin = GPIO_PIN_8},{.port = GPIOB, .pin = GPIO_PIN_9}
};U_INPUT   IN;
U_OUTPUT  OUT;/******************************
函数名:init_ext_gpio
功  能:初始化外部gpio器件
形  参:无
返回值:
备  注:74HC595器件 3位输入 8位输出
*******************************/
void init_ext_gpio(void)
{hc595Init(&hc595);
}/******************************
函数名:get_gpio_pins
功  能:读取内外部输入引脚的状态
形  参:pin--内外引脚的信息结构体
返回值:无,信息将直接赋予 结构体pin
备  注:
*******************************/
void get_gpio_pins(U_INPUT *pin)
{uint8_t i, XIN = 0;/*读外部扩展板PCF8574引脚*/for(i = 0; i < 3; i++){PCF8574ReadByte(&pcf8574[i], &pin->pin.EX[i]);}/*读内部MUC引脚*/for(i = 0; i < 8; i++){XIN >>= 1;if(HAL_GPIO_ReadPin(INPUT_PINS[i].port, INPUT_PINS[i].pin) == GPIO_PIN_RESET){XIN &= ~0x80;}else{XIN |= 0x80;}}pin->pin.X = XIN;
}/******************************
函数名:set_gpio_pins
功  能:设置74HC595的端口及MUC输出引脚状态
形  参:pout--内外引脚的状态结构体
返回值:无
备  注:
*******************************/
void set_gpio_pins(U_OUTPUT *pout)
{uint8_t i, XOUT;/*向74HC595发送引脚状态*/hc595WriteStr(&hc595, &pout->pin.EY[0], 3);XOUT = pout->pin.Y;for(i = 0; i < 6; i++){HAL_GPIO_WritePin(OUTPUT_PINS[i].port, OUTPUT_PINS[i].pin, XOUT & 0x01 ? GPIO_PIN_SET : GPIO_PIN_RESET);XOUT >>= 1;}
}/******************************
函数名:read_board_id
功  能:读取板子拨码开关状态
形  参:无
返回值:id--开关状态
备  注:此处默认拨码开关低电平有效,所以变量采用1作为有效位。
*******************************/
uint8_t read_board_id(void)
{uint8_t id, i;id = 0;for(i = 0; i < 4; i++){id >>= 1;if(HAL_GPIO_ReadPin(id_pin[i].port, id_pin[i].pin) == GPIO_PIN_RESET){id |= 0x08; //0000 1000}}return id;
}/******************************
函数名:get_led_state
功  能:获取外部扩展板的输出引脚
形  参:pout--引脚信息结构体  pled--外部引脚状态
返回值:0
备  注:引脚状态字节,低6位有效
*******************************/
uint8_t get_led_state(const U_OUTPUT *pout, uint8_t *pled)
{uint8_t i;for(i = 0; i < 6; i++){*pled++ = pout->pin.EY[i];}return 0;
}
#ifndef __EXT_GPIO_HEADER__
#define __EXT_GPIO_HEADER__
#include "main.h"typedef struct
{GPIO_TypeDef* port;uint16_t      pin;
} T_GPIO_TYPE;typedef union
{uint8_t  input[4];struct{uint8_t EX[3]; //棍꼬多신uint8_t X;     //코꼬多신} pin;uint32_t data;
} U_INPUT;typedef union
{uint8_t  output[4];struct{uint8_t EY[3]; //棍꼬多신uint8_t Y;     //코꼬多신} pin;uint32_t data;
} U_OUTPUT;extern U_INPUT   IN;
extern U_OUTPUT  OUT;
void init_ext_gpio(void);
void get_gpio_pins(U_INPUT *pin);
void set_gpio_pins(U_OUTPUT *pout);
uint8_t read_board_id(void);
uint8_t get_led_state(const U_OUTPUT *pout, uint8_t *pled);
#endif

单片机 STM32 HAL PCF8574 例子代码相关推荐

  1. 单片机 MM32 HAL 74hc595 例子 代码

    #include "74hc595.h"/****************** 功 能:定义HC595的功能引脚 备 注:变更引脚,由MX配置完成 **************** ...

  2. 温湿度传感器驱动SHT85 单片机STM32 HAL库

    功能介绍:读取传感器SHT85数据,转换成温度.湿度 .饱和水蒸气含量. 注意事项: SDA脚设置为开漏输出,外部上拉电阻10k.或者设置成推挽,软件切换SDA输入输出. 调试时可适当加长延时时间. ...

  3. VL53L0x TOF激光测距的 stm32 HAL库驱动代码

    VL53L0x 是ST公司生成的 TOF激光测距传感器,得益于非常小巧的尺寸,很容易放入手机.无人机中,提供更加精准.稳定的测距方式. 本文代码,使用 STM32F4xx的 HAL库. VL53L0x ...

  4. 单片机 STM32 HAL 网络模块 ENC28J60

    文章目录 一. 简介 二.特性 三.示例代码 一. 简介 ENC28J60 是带有行业标准串行外设接口(Serial Peripheral Interface,SPI)的独立以太网控制器.它可作为任何 ...

  5. 单片机 STM32 HAL 射频读卡器 RC522

    1.CubeMX 定义任意两个引脚,作为复位脚和片选脚,并对引脚作出如下配置: GPlO output level --High GPIO mode --Output Open Drain GPIO ...

  6. 单片机 STM32 HAL IO扩展 PCA9555

    描述 这个用于两线双向总线(I 2 C)的16位扩展器设计用于2.3V至5.5VV CC 运行.通过I 2 C接口[串行时钟(SCL),串行数据(SDA)],它为大多数微控制器系列产品提供通用远程I ...

  7. 单片机 STM32 HAL 步进电机 Motor

    /*************笔记**************** 1.CubeMX 定义任意四个引脚,作为ABCD相,并对引脚作出如下配置:GPlO output level --HighGPIO m ...

  8. 单片机 STM32 HAL 温湿度 DS18B20

    /*************笔记**************** 1.CubeMX 定义任意一个引脚,作为数据脚,并对引脚作出如下配置:GPlO output level --LOWGPIO mode ...

  9. 单片机 STM32 HAL 液晶屏 LCD16032

    笔记: 1.采用串行输出 2.器件 [16 NC(PSB)]引脚需要接地, H:并口通信 L:串口通信 3.LCD_CS_Pin LCD_CS_GPIO_Port //片选控制,0,无效 1有效 LC ...

最新文章

  1. 生活只是需要一种积极的态度
  2. 萌新发问:MyBatis日志到底是如何做到兼容所有常用日志框架的?
  3. 游戏中的整容术! 《Honey Select》捏人系统剖析
  4. python将小时数换成分钟_如何在Python中将datetime.timedelta转换为分钟、小时?
  5. Java 栈的存储过程
  6. 接口可以继承抽象类吗_Python接口类的多继承以及抽象类的单继承
  7. 我用Python帮朋友做了张猪肉数据分析图,结果。。。
  8. 总奖金7万美金,Kaggle近期可报名赛事,语音识别、图像识别分类领域
  9. cisco学习笔记(2)
  10. 【java学习之路】(java SE篇)009.IO
  11. 如何查看注解实现_SpringBoot的注解@ConditonOnClass注解是如何实现的?
  12. 构建QML项目报错:No rule to make target ‘**‘, needed by ‘debug/qrc_qml.cpp‘.
  13. AD选择板边覆铜教程
  14. 电脑中病毒以后,如何删掉右键残留的菜单
  15. 推荐多款好看的报表图表配色方案(转载)
  16. nova computer对instance的shut off
  17. C#随机生成姓名、电话类
  18. 手动连接wifi失败分析
  19. 走进音视频的世界——剖析exo播放器架构
  20. python模拟登录钉钉,Python—实现钉钉后台开发

热门文章

  1. 【数据科学】01 数据科学概述
  2. linux内核基本模型,Linux设备模型(1)_基本概念
  3. 高中数学必修二立体几何中的向量方法(经典案例讲解)
  4. 计算机相关专业提升学历的解决方案(本科及以下)
  5. 阿里内部隐藏「P」序列职级,「高P」光环或成过去式
  6. SpringBoot之模板引擎
  7. 学堂在线-清华大学-操作系统实验Lab1【练习5-6】
  8. LeetCode ---Fizz和Buzz
  9. .wine/drive_c/users/Public/Application Data/Source Insight/4.0
  10. 【181101】VC++电子地图绘制工具源代码