本次的内容是复习IIC协议和实现OLED屏幕(基于IIC协议)
1. IIC 历史上为什么被发明?
IIC 最早由Philips 公司在 1980 年代初发明,最初是为了给电视机内部的 CPU 和外围芯片提供更简单的连接方式。
当时的嵌入式系统常采用内存映射 I/O方式连接外设:每个芯片都要单独接数据线、地址线、片选线,外设越多,MCU 引脚占用越多,PCB 走线越复杂,还需要额外的地址解码芯片,成本高、噪声干扰也大。
所以 IIC 被发明出来,就是为了解决这个问题:
- 减少 MCU 引脚占用
- 减少 PCB 走线和外部逻辑芯片
- 降低板级硬件成本
- 让多个低速外设共享同一组总线
2. 它解决了什么问题?
它主要解决的是:同一块电路板上,多个芯片之间如何用最少的线可靠通信。
传统并行连接方式需要很多线;而 IIC 只用两根线就能挂多个设备,并通过设备地址区分不同从机,从而大幅简化板级互联。
3. 什么是 IIC 协议?
IIC 全称Inter-Integrated Circuit,中文常叫集成电路间总线或I²C 总线。它是一种:
- 串行:数据一位一位传输
- 同步:由 SCL 时钟线控制传输节奏
- 半双工:同一时刻只能一个方向传输
- 多主从:支持多个主机和多个从机
- 两线制:只需要SDA 数据线和SCL 时钟线
总线上的每个从设备都有唯一地址,主机先发送地址,选中对应从机后再进行读写。
4. 为什么这样设计?
因为它追求的是低成本、少引脚、易扩展。
- 两根线:SDA + SCL,布线简单,节省 MCU 引脚。
- 开漏 + 上拉电阻:设备只能把线拉低,高电平由上拉电阻提供,方便多个设备共享总线。
- 地址寻址:不需要像 SPI 那样每个设备一根片选线。
- ACK/NACK 应答:每传一个字节都有应答,能判断对方是否收到。
- 主从控制:主机发起通信、产生时钟,协议简单可靠。
5. 它有什么用?
嵌入式里,IIC 常用于连接各种低速外设:
- 传感器:温湿度、气压、加速度计等
- 存储器件:EEPROM,如 AT24Cxx
- 实时时钟:DS3231、PCF8563
- 显示屏:SSD1306 OLED、LCD1602 转接板
- IO 扩展:PCF8574、MCP23017
- 电源管理、音频编解码器、ADC/DAC 配置
一句话总结:IIC 是为了让板级芯片之间用最少的线、最低的成本连接多个低速外设而发明的;它之所以这样设计,是因为它强调引脚少、布线简单、地址寻址和应答可靠;它的用途主要是 MCU 与传感器、EEPROM、时钟、屏幕、电源芯片等板级器件通信。
然后根据原理图需要连接的是PB6和PB7
PB7 → 屏 SCL,是时钟线
PB6 → 屏 SDA,是数据线
接地和电源根据原理图有固定连线这里不写,然后因为江科大的oled屏幕按照教程直接能用,所以直接连接就行了,如最上图就行了
然后这里实现软件模拟IIC协议
时钟线低的时候,可以改数据线;时钟线高的时候,数据线不能动
然后已经了解IIC协议了
对应代码都在下面,还有上次根据案例写的舵机,但是经过测试还是麻烦
感觉后续这里是可以模板化的,根据位置算字然后直接生成字模
然后就是开发对应的案例
这里以IIC协议的江科大配套的OLED屏幕
这块屏不能按字设置颜色,它只能按屏幕区域显示黄或蓝
目的是让屏幕输出想要的字符
例如:卡拉肖克
然后把这些放入数组中,然后更新到例程的
然后增加输出函数
修改引脚,然后计算距离后输出
根据原理图,灯是PC13
然后先测试灯,直接改就行了
然后根据需要修改引脚
更换原本的hello world
然后根据原理图烧录后成功
代码放在百度网盘了,自行下载(如果需要)
通过网盘分享的文件:舵机_stm32江科大版本
链接: https://pan.baidu.com/s/1OAHXGsa_XTWv_X1jq04zbw?pwd=6ywa 提取码: 6ywa
--来自百度网盘超级会员v5的分享