当前位置: 首页 > news >正文

STM32-寄存器实现软件模拟IIC

I2C 通讯协议(Inter-Integrated Circuit)是由Phiilps公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。


实现函数

void Dri_I2C_Init(void);
void Dri_I2C_Start(void);
void Dri_I2C_Stop(void);
void Dri_I2C_SendByte(uint8_t byte);
uint8_t Dri_I2C_ReceiveByte(void);
uint8_t Dri_I2C_ReceiveAck(void);
void Dri_I2C_SendAck(uint8_t ack);

初始化

宏定义

#define SCL_LOW     (GPIOB->ODR &=~ GPIO_ODR_ODR10)
#define SCL_HIGH    (GPIOB->ODR |=  GPIO_ODR_ODR10)
#define SDA_LOW     (GPIOB->ODR &=~ GPIO_ODR_ODR11)
#define SDA_HIGH    (GPIOB->ODR |=  GPIO_ODR_ODR11)
#define READ_SDA    (GPIOB->IDR & GPIO_IDR_IDR11)
#define I2C_DELAY   Delay_us(10)

初始化

参考:

void Dri_I2C_Init(void){RCC->APB2ENR |= RCC_APB2ENR_IOPBEN ;GPIOB->CRH |= (GPIO_CRH_MODE10 | GPIO_CRH_MODE11 | GPIO_CRH_CNF10_0 | GPIO_CRH_CNF11_0 );GPIOB->CRH &=~(GPIO_CRH_CNF10_1 | GPIO_CRH_CNF11_1) ;SDA_HIGH ;SCL_HIGH ;I2C_DELAY;
}

在本STM32开发板中,IIC对应引脚为PB10PB11,由于IIC协议需要,引脚需被配置为开漏输出模式

开始

参考:

void Dri_I2C_Start(void){SCL_HIGH;SDA_HIGH;I2C_DELAY;SDA_LOW;SCL_LOW;I2C_DELAY;
}

停止

参考:

void Dri_I2C_Stop(void){SDA_LOW;I2C_DELAY;SCL_HIGH;I2C_DELAY;SDA_HIGH;I2C_DELAY;
}

发送字节

参考:

void Dri_I2C_SendByte(uint8_t byte){for (uint8_t i = 0; i < 8; i++){((byte & 0x80)==0) ? SDA_LOW : SDA_HIGH ;I2C_DELAY;SCL_HIGH;I2C_DELAY;SCL_LOW;I2C_DELAY;byte<<=1;}
}

接收字节

参考:

uint8_t Dri_I2C_ReceiveByte(void){uint8_t byte = 0 ;SDA_HIGH ;I2C_DELAY ;for (uint8_t i = 0; i < 8; i++){byte <<= 1 ;SCL_HIGH;I2C_DELAY;if(READ_SDA){byte |= 0x01;}SCL_LOW;I2C_DELAY ;}return byte ;
}

接收确认(ACK)信号

参考:

uint8_t Dri_I2C_ReceiveAck(){uint8_t ack = 0 ;SDA_HIGH ;I2C_DELAY;SCL_HIGH;I2C_DELAY;ack = READ_SDA ? 1 : 0 ;SCL_LOW ;I2C_DELAY ;return ack ;
}

发送确认(ACK)信号

void Dri_I2C_SendAck(uint8_t ack){ack ? SDA_HIGH : SDA_LOW ;SCL_HIGH ;I2C_DELAY ;SCL_LOW;I2C_DELAY ;
}
http://www.jsqmd.com/news/795294/

相关文章:

  • 如何用G-Helper让ROG笔记本重获精准色彩:从色彩失落到视觉盛宴的探索之旅
  • 构建本地AI记忆中枢:隐私优先的电脑活动追踪与智能查询系统
  • 从软件到硬件:FPGA流水线CPU设计与VHDL实践指南
  • 微信机器人WeixinBot完整指南:从零构建自动化微信应用
  • 3步实战部署Stream-rec:多平台直播录制完全指南
  • 2026年ORP仪选购指南:如何根据口碑、评价与品质选择合适品牌? - 品牌推荐大师
  • 从《羊毛战记》看芯片设计:EDA工具如何构建数字世界的“地堡”
  • 妇科凝胶厂家选购指南:如何选择靠谱的妇科凝胶生产厂家 - 速递信息
  • 2026年武汉GEO优化与短视频代运营完全指南:中小企业精准获客与转化闭环 - 优质企业观察收录
  • 动态频谱共享:从技术原理到实战部署的全面解析
  • 2026年无锡护墙板与实木柜定制选购指南 - 优质企业观察收录
  • QKeyMapper完全指南:免费实现Windows键鼠手柄全能映射的终极解决方案
  • ARM Thumb指令集架构与优化实践
  • Obsidian-Zettelkasten终极指南:20+模板构建你的第二大脑
  • NexusAgent:基于双层记忆与Harness Engineering的AI Agent开发框架解析
  • 广州金价暴跌前夜,福正美帮你先跑赢行情 - 福正美黄金回收
  • AI企业实操落地方案服务商|不玩虚的,聚焦技术落地、解决企业实际问题
  • 开发者技能图谱实战指南:从云原生到系统设计的全栈进阶
  • 南昌万寿宫周边景区酒店排行:核心区位旅居之选 - 奔跑123
  • 2026年青岛股权架构设计:三大核心趋势解读 - 速递信息
  • 3分钟AI图像分层终极指南:让复杂设计秒变可编辑图层
  • 如何高效清理游戏平台残留文件:SteamCleaner一站式解决方案指南
  • 常德黄金抛售最后窗口?福正美报价竟比同行高15% - 福正美黄金回收
  • 银座购物卡回收平台指南 - 购物卡回收找京尔回收
  • 西安包包回收头部商家|收的顶第一实至名归 - 奢侈品回收测评
  • 无锡实木柜定制|隐形增项陷阱曝光,透明报价的风佳木如何做到不加价? - 优质企业观察收录
  • 如何快速掌握SPT存档编辑:新手终极指南轻松定制你的逃离塔科夫单机体验
  • Honey Select 2终极增强补丁:一站式游戏优化解决方案
  • 如何通过PrismLauncher-Cracked实现Minecraft完全离线启动?
  • Java AI 框架三国杀:Solon AI vs Spring AI vs LangChain4j 深度对比