CH32V103学习笔记之五——硬件IIC
1、前言
距离上篇文章更新已经过去一个半月了,期间并没有在摸鱼,而是探索了不少有实际意义的知识点。结合目前正着手移植的程序,重点解决了硬件IIC的连续读写和SPI DMA读写问题。现在将学习结果做些小结分享出来。
本篇文章主要总结硬件IIC的配置流程,结合使用IIC通信的OLED液晶屏和MPU6050模块来说明硬件IIC的使用。
2、IIC的初始化流程
IIC作为嵌入式MCU一个常见外设,配置流程和其他外设并没有区别。使能外设IO时钟、复用外设IO(必要时重映射IO),使能IIC时钟、初始化IIC工作模式、使能IIC。
iic.c
iic.h
在使用IIC模块之前,需要调用IIC初始化函数完成IIC的初始化。
3、使用IIC向从设备读、写一字节数据
为了能简单明了说明IIC的通信时序,这里截取了某品牌M32F4参考手册中IIC章节内容,CH32V103参考手册IIC章节没有此说明图表。
写一字节数据配置流程

读一字节数据配置流程

EV事件超时处理函数
5、中断对IIC通讯的影响
先上一张逻辑分析仪抓的时序图。在时序图中可以看到,IIC在被中断前会完成当前字节的传输,并发送出ACK信号。再拉低SCL,释放SDA,再中断函数执行完之后会继续完成IIC通讯。

5、小结
最开始接触32位MCU的时候,能找到的关于IIC的资料,多以普通IO模拟IIC通讯时序实现数据传输,介绍硬件IIC使用的资料没有多少。流传的原因无非是早年某品牌MCU IIC的硬件BUG容易造成程序卡死,造成很多人习惯了使用软件模拟的IIC。CH32V103R8作为一种新架构的MCU在设计IIC应该是注意过此问题,经过实际验证,硬件IIC和其他片内外设一样,并没有什么问题,可以正常使用。
下一篇将介绍IIC连续读写数据与OLED液晶屏和MPU6050通讯。
