概要
IIC(IIC,inter-Integrated circuit),两线式串行总线,用于MCU和外设间的通信。
IIC只需两根线:数据线SDA和时钟线SCL。以半双工方式实现MCU和外设之间数据传输,速度可达400kbps。
多主机I2C总线结构
注意SDA和SCL两根总线需要上拉,使总线处于空闲状态。
IIC协议
空闲状态
协议规定,SDA和SCL同时为高电平时,总线处于空闲状态。上拉电阻保证电平处于高电平。
起始信号和停止信号
起始信号:SCL为高电平时,SDA电平发生高到低的跳变
停止信号:SCL为高电平时,SDA电平发生低到高的跳变
应答信号
发送器每发送完一个字节(8个脉冲),在第9个脉冲间释放总线,接收器返回一个ACK信号,协议规定,低电平为有效应答,高电平为无效应答。
数据有效性
协议对有效数据进行了规定:即时钟信号为高电平期间,数据必须保持稳定,时钟信号低电平期间,数据线上的电平才允许变化。也就是说,数据在时钟信号到来前必须准备好,并保持到时钟信号的下降沿之后。
数据传输
I2C为同步传输,时钟控制数据位的传输,边沿触发。
驱动程序
直接引用实验中的代码。测试没问题。
起始信号
//产生IIC起始信号
void IIC_Start(void)
{
SDA_OUT(); //sda线输出
IIC_SDA=1;
IIC_SCL=1;
delay_us(4);
IIC_SDA=0;//START:when CLK is high,DATA change form high to low
delay_us(4);
IIC_SCL=0;//钳住I2C总线,准备发送或接收数据
}
停止信号
//产生IIC停止信号
void IIC_Stop(void)
{
SDA_OUT();//sda线输出
IIC_SCL=0;
IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
delay_us(4);
IIC_SCL=1;
IIC_SDA=1;//发送I2C总线结束信号
delay_us(4);
}
有效应答
//产生ACK应答
void IIC_Ack(void)
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=0;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
}
无效应答
//不产生ACK应答
void IIC_NAck(void)
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=1;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
}
发送单字节
//IIC发送一个字节
//返回从机有无应答
//1,有应答
//0,无应答
void IIC_Send_Byte(u8 txd)
{
u8 t;
SDA_OUT();
IIC_SCL=0;//拉低时钟开始数据传输
for(t=0;t<8;t++)
{
IIC_SDA=(txd&0x80)>>7;
txd<<=1;
delay_us(2); //对TEA5767这三个延时都是必须的
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
delay_us(2);
}
}
接收单字节
//读1个字节,ack=1时,发送ACK,ack=0,发送nACK
u8 IIC_Read_Byte(unsigned char ack)
{
unsigned char i,receive=0;
SDA_IN();//SDA设置为输入
for(i=0;i<8;i++ )
{
IIC_SCL=0;
delay_us(2);
IIC_SCL=1;
receive<<=1;
if(READ_SDA)receive++;
delay_us(1);
}
if (!ack)
IIC_NAck();//发送nACK
else
IIC_Ack(); //发送ACK
return receive;
}
EEPROM
24C02为IIC接口,容量为256字节。
封装如下图:
管脚定义:
设备地址的高四位固定,中间为地址线定义的地址,最后一位为读写位。
由于A0,A1,A2设置为0,所以
读的时候:Device Address = 0xA1;
写的时候:Device Address = 0xA0;
24C02字节写时序
起始信号
写设备地址,Device Address = 0xA0;
等待应答
确定写入的EEPROM地址即WORD ADDRESS
等待应答
向SDA数据线上写入数据DATA
等待应答
停止信号
//在AT24CXX指定地址写入一个数据
//WriteAddr :写入数据的目的地址
//DataToWrite:要写入的数据
void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{
IIC_Start();
if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0); //发送写命令
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr>>8);//发送高地址
}else IIC_Send_Byte(0XA0+((WriteAddr/256)<<1)); //发送器件地址0XA0,写数据
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr%256); //发送低地址
IIC_Wait_Ack();
IIC_Send_Byte(DataToWrite); //发送字节
IIC_Wait_Ack();
IIC_Stop();//产生一个停止条件
delay_ms(10);
}
24C02字节读时序
起始信号
写设备地址,Device Address = 0xA0;
等待应答
确定写入的EEPROM地址即WORD ADDRESS
等待应答
起始信号
读设备地址,Device Address = 0xA1;
等待应答
读SDA上数据
等待应答
停止信号
//在AT24CXX指定地址读出一个数据
//ReadAddr:开始读数的地址
//返回值 :读到的数据
u8 AT24CXX_ReadOneByte(u16 ReadAddr)
{
u8 temp=0;
IIC_Start();
if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0); //发送写命令
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr>>8);//发送高地址
}else IIC_Send_Byte(0XA0+((ReadAddr/256)<<1)); //发送器件地址0XA0,写数据
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr%256); //发送低地址
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(0XA1); //进入接收模式
IIC_Wait_Ack();
temp=IIC_Read_Byte(0);
IIC_Stop();//产生一个停止条件
return temp;
}
参考
STM32F3与 F4 系列 Cortex M4 内核编程手册
STM32F4xxx中文参考手册
STM32F4xxx英文参考手册
STM32F4 开发指南(寄存器版)
上一篇:STM32的IIC应用详解2
下一篇:STM32F030控制LED
推荐阅读
史海拾趣
Amphenol Piher 是 Amphenol 公司的一部分,专注于设计、制造和销售电子行业中的传感器和电位器等产品。以下是关于 Amphenol Piher 公司发展的五个相关故事:
创立与初期发展:Amphenol Piher 公司的历史可以追溯到20世纪60年代,在西班牙的Valencia成立。最初,公司主要致力于生产电位器和传感器等电子元器件,为不同行业的客户提供定制化的解决方案。随着市场需求的增长和公司技术实力的提升,Amphenol Piher 逐渐赢得了客户的信任和市场认可。
技术创新与产品多样化:Amphenol Piher 公司在技术研发方面持续投入,并不断推出新型的传感器和电位器产品。公司专注于提升产品性能、精度和可靠性,满足客户对高品质电子元器件的需求。除了传统的电位器和传感器,Amphenol Piher 还推出了一系列新型产品,如角位移传感器、线性位移传感器等,为不同应用领域提供多样化的解决方案。
客户合作与定制化解决方案:Amphenol Piher 公司与客户建立了紧密的合作关系,致力于开发定制化的传感器和电位器解决方案。公司的工程团队与客户密切合作,根据客户的需求和应用场景,设计和制造符合特定要求的产品。这种定制化解决方案能够满足客户个性化的需求,为客户提供更加专业和完善的服务。
质量控制与认证标准:Amphenol Piher 公司高度重视产品质量控制,并严格遵循国际质量管理体系标准。公司的生产工艺和质量管理体系符合ISO 9001质量管理体系认证标准,以确保产品质量的稳定性和可靠性。此外,Amphenol Piher 公司的产品还通过了各种行业和应用领域的认证标准,如汽车行业的TS16949认证等,确保产品符合行业标准和规定。
全球市场拓展与合作伙伴关系:除了在西班牙的生产基地外,Amphenol Piher 公司还在全球范围内设有多个销售办事处和代理商网络,拓展了国际市场份额。公司与全球各种行业领先企业建立了长期稳定的合作关系,共同推动产品的创新和市场拓展。通过全球市场拓展和合作伙伴关系,Amphenol Piher 公司不断扩大业务规模,增强了在电子行业中的市场竞争力。
这些故事展示了 Amphenol Piher 公司从成立初期到如今在技术创新、产品多样化、客户合作与定制化解决方案、质量控制与认证标准以及全球市场拓展与合作伙伴关系等方面取得的重要进展。
在光伏产业快速发展的背景下,GPS于2020年进军光伏逆变器市场。公司凭借其深厚的技术积累和创新能力,开发出了一系列高效、可靠的光伏逆变器产品。这些产品不仅转换效率高,而且具备智能监控和远程控制功能,大大提升了光伏电站的运行效率和安全性。GPS的光伏逆变器产品迅速获得市场认可,成为众多光伏项目的首选设备。
安碁科技在发展过程中,积极寻求与高校、研究机构的合作,以推动技术创新和人才培养。例如,2009年,公司与逢甲大学进行产学合作,共同研发超小型石英振动子。这种合作模式不仅为公司带来了先进的技术和研发资源,也促进了产学研之间的紧密合作和共同发展。此外,安碁科技还不断拓展业务领域,从石英振荡器逐步扩展到汽车电子、工业控制、消费电子等多个领域,实现了业务的多元化发展。
山西飞虹激光科技有限公司于2010年在中国山西成立,并迅速在北京设立分公司,将北京作为战略重心,拓展全国市场。仅两个月后,飞虹激光的研发&生产中心便设立并投入生产,展现了公司的强大执行力和决心。2012年,飞虹激光积极参与国际展会,如慕尼黑上海光博会,展示了其F3015激光切割机、激光熔覆系统等高端产品,不仅提升了公司知名度,也彰显了其在激光技术领域的专业水平和创新能力。
近年来,随着环保意识的提高,Don Connex Electronics积极响应绿色发展的号召,将环保理念融入产品设计和生产过程中。公司采用环保材料、节能减排的生产工艺,确保产品在使用过程中对环境的影响降到最低。同时,公司还积极参与环保公益活动,推动电子行业的绿色发展。
本帖最后由 paulhyde 于 2014-9-15 04:14 编辑 [local]2[/local]“TI”杯时我们三人的作品。 三角波参数测试仪。 … 查看全部问答∨ |
|
整快板子上的外设不是很多,但是存储器资源丰富。并预留了一个HSMC接口,可以用来扩展。有三张光盘,一张是介绍开发板的使用,例程,入门指导,另两张是Quartus2的软件,常用库,NIOS2开发资料。先简单介绍到这里,把开发板的资料传上来共享(全部 ...… 查看全部问答∨ |
|
【设计工具】Xilinx SRAM 型FPGA抗辐射设计技术研究 针对XILINX SRAM型FPGA在空间应用中的可行性,分析了Xilinx SRAM型 FPGA的结构,以及空间辐射效应对这种结构FPGA的影响,指出SRAM型的FPGA随着工艺水平的提高、器件规模的增大和核电压的降低,抗总剂量效应不断提高,抵抗单粒子效应,尤其是单粒子 ...… 查看全部问答∨ |
很给力哦,解决LaunchPad的 IO口不够用,很有价值~~~ 我用的开发板是g2553~~~ [ 本帖最后由 574937246 于 2012-7-20 14:46 编辑 ]… 查看全部问答∨ |
在协议栈中我操作定时器 1(T1)产生PWM波,避免与定时器3-4系统定时器冲突。在裸机中我用定时器1跑通PWM了的。可是我加载到协议栈貌似遇到很多问题,希望大家跟我给点建议。上图 这个是定时器TI的驱动程序。 这是电脑给协调器串口写数据并通 ...… 查看全部问答∨ |