一、前言(为什么放弃硬件IIC) 承接前文:GPIO、定时器、ADC、DMA、RS485、Modbus全套外设,项目开发高频遇到IIC痛点:
二、软件IIC底层时序深度解析 2.1 软硬件IIC核心区别
- 硬件IIC:片上外设自动输出时序,占用硬件资源,引脚固定,容错低。
- 软件IIC:GPIO高低电平模拟时序,纯代码实现,IO自由选配,不占用硬件IIC外设,永不冲突。 2.2 标准IIC四大核心时序(代码一一对应)
三、实战项目介绍 3.1 项目功能 主控STM32F103C8T6,搭建双路独立软件IIC总线:
- 无需开启硬件IIC时钟,彻底规避硬件寄存器bug。
- 任意GPIO随意更换,布线随心所欲。
- 一套驱动,挂载全部IIC协议外设,不用改写时序代码。
四、结构体通用模块化代码 分层文件:soft_iic.h + soft_iic.c,结构体绑定IO,新建一路IIC仅初始化结构体,不用改写底层时序。 4.1 soft_iic.h 头文件 #ifndef __SOFT_IIC_H #define __SOFT_IIC_H #include “stm32f10x.h”
//IIC电平定义 #define IIC_HIGH 1 #define IIC_LOW 0
//IO操作结构体 【核心通用设计】 //更换IIC、更换引脚,仅新建结构体赋值即可,不改底层时序 typedef struct {
//端口+引脚定义 GPIO_TypeDef *scl_port; uint16_t scl_pin; GPIO_
