<div style="padding-bottom: 5px; line-height: 1.5; background-color: rgb(255,255,255); margin: 0px; padding-left: 5px; padding-right: 5px; color: rgb(0,0,0); font-size: 12px; padding-top: 5px"><a name="_Toc342394250">27.1 IIC简介
IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上。
I2C总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。IIC总线时序图如图27.1..1所示:
ALIENTEK战舰STM32开发板板载的EEPROM芯片型号为24C02。该芯片的总容量是256个字节,该芯片通过IIC总线与外部连接,我们本章就通过STM32来实现24C02的读写。
目前大部分MCU都带有IIC总线接口,STM32也不例外。但是这里我们不使用STM32的硬件IIC来读写24C02,而是通过软件模拟。STM32的硬件IIC非常复杂,更重要的是不稳定,故不推荐使用。所以我们这里就通过模拟来实现了。有兴趣的读者可以研究一下STM32的硬件IIC。
本章实验功能简介:开机的时候先检测24C02是否存在,然后在主循环里面检测两个按键,其中1个按键(WK_UP)用来执行写入24C02的操作,另外一个按键(KEY1)用来执行读出操作,在TFTLCD模块上显示相关信息。同时用DS0提示程序正在运行。
<a name="_Toc342394252">27.3 软件设计
打开上一章的工程,首先在HARDWARE文件夹下新建一个24CXX的文件夹。然后新建一个24cxx.c、myiic.c的文件和24cxx.h、myiic.h的头文件,保存在24CXX文件夹下,并将24CXX文件夹加入头文件包含路径。
打开myiic.c文件,输入如下代码:
#include "myiic.h"
#include "delay.h"
//初始化IIC
void IIC_Init(void)
{
RCC->APB2ENR|=1CRH|=0X00003300;
GPIOB->ODR|=37;
<div style="margin: 5px 0px"> txd |