最近一直在研究STM32F0的IIC,因为项目要用到IIC,master/slave mode都需要,实现数据通信和IAP功能。
网上有关于这部分资料特别少,所以共享一下,只晒出初始化和中断部分的代码的框架。代码在附件 .c里面,
如果有不对的地方,欢迎指正,大家互相学习一下!
STM32F0相对于STM32F1和STM8S 有很大变化,支持时钟延长即I2C_CR1_NOSTRETCH,并且支持SMBUS。
1,初始化部分:配置时钟和引脚,不使用时钟延长的功能
2,I2C1_IRQHandler 主要处理中断事件
在I2C_ISR_ADDR事件时,如果设置了多个地址,要判断是那个地址,并且要清除中断标志位。
根据I2C1->ISR&I2C_ISR_DIR 的结果判断是发送数据还是接收数据。
(1)发送数据,流程如下
这里要区别一下I2C_ISR_TXIS,I2C_ISR_TXE,描述如下
(2) 接收数据,流程如下
|