#define ADDR_24CXX 0xA0
void I2C_24CXX_Write(u16 nAddr, u8* pDat, u16 nLen)
{
u16 i = 0;
/* Enable I2C1 acknowledgement if it is already disabled by other function */
//I2C_AcknowledgeConfig(I2C1, ENABLE);
STM32_I2c1_Regs->cr1.bit.ACK=1; // ACK:应答使能 1:在接收到一个字节后返回一个应答(匹配的地址或数据)
/* Send I2C1 START condition */
//I2C_GenerateSTART(I2C1, ENABLE);
STM32_I2c1_Regs->cr1.all|= I2C_EN|I2C_START;
/* Test on I2C1 EV5 and clear it */
// 【SB=1 起始条件已发送 读SR1,然后写数据DR 清零 】 MSL="1主模式" BUSY="1" 在总线上正在进行数据通讯 )
// while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)){;} /* EV5 */
while(!(STM32_I2c1_Regs->sr1.bit.SB & I2C_SB)) ;
/* Send slave address for write */
//I2C_Send7bitAddress(I2C1, ADDR_24CXX, I2C_Direction_Transmitter);
STM32_I2c1_Regs->dr.bit.DR=ADDR_24CXX;
/* Test on I2C1 EV6 and clear it */
// 【ADDR=1 地址发送结束;读SR1和SR2来清零 】。 TXE="1" 数据寄存器空 MSL="1" BUSY="1", TRA="1" 数据已发送
//while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)){;} /* EV6 */
while(!(STM32_I2c1_Regs->sr1.all & I2C_ADDR)) ;
STM32_I2c1_Regs->sr2.all;
/* Send the low part of memory address */
//I2C_SendData(I2C1, (u8)nAddr);
STM32_I2c1_Regs->dr.bit.DR=(u8)nAddr;
/* Test on I2C1 EV8 and clear it */
// 【TXE=1 数据寄存器空; 写数据DR清除,START,STOP】 BTF="1:" 字节发送结束 TRA="数据已发送" BUSY="在总线上正在进行数据通讯" MSL="主模式"
//while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)){} /* EV8 */
while(!(STM32_I2c1_Regs->sr1.all & I2C_TXE));
for(i=0;i
/* Send I2C1 data */
//I2C_SendData(I2C1, pDat[i]);
STM32_I2c1_Regs->dr.bit.DR=pDat[i];
/* Test on I2C1 EV8 and clear it */
// 【TXE=1 数据寄存器空; 写数据DR清除,START,STOP】 BTF="1:" 字节发送结束 TRA="数据已发送" BUSY="在总线上正在进行数据通讯" MSL="主模式"
//while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)){;} /* EV8 */
while(!(STM32_I2c1_Regs->sr1.all & I2C_TXE));
}
/* Send I2C1 STOP Condition */
//I2C_GenerateSTOP(I2C1, ENABLE);
STM32_I2c1_Regs->cr1.all|= I2C_EN|I2C_STOP;
while(STM32_I2c1_Regs->sr2.bit.MSL); // 0:从模式
}//end sub
//=============================================================================
//
//=============================================================================
void I2C_24CXX_Read(u16 nAddr, u8* pDat, u16 nLen)
{
u16 i = 0;
/* Enable I2C1 acknowledgement if it is already disabled by other function */
//I2C_AcknowledgeConfig(I2C1, ENABLE);
STM32_I2c1_Regs->cr1.bit.ACK=1; // ACK:应答使能 1:在接收到一个字节后返回一个应答(匹配的地址或数据)
/* Send I2C1 START condition */
//I2C_GenerateSTART(I2C1, ENABLE);
STM32_I2c1_Regs->cr1.all|= I2C_EN|I2C_START;
/* Test on I2C1 EV5 and clear it */
// 【SB=1 起始条件已发送 读SR1,然后写数据DR 清零 】 MSL="1主模式" BUSY="1" 在总线上正在进行数据通讯 )
//while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)){;} /* EV5 */
while(!(STM32_I2c1_Regs->sr1.bit.SB & I2C_SB)) ;
/* Send 24CXX slave address for write */
//I2C_Send7bitAddress(I2C1, ADDR_24CXX, I2C_Direction_Transmitter);
STM32_I2c1_Regs->dr.bit.DR=ADDR_24CXX;
/* Test on I2C1 EV6 and clear it */
// 【ADDR=1 地址发送结束;读SR1和SR2来清零 】。 TXE="1" 数据寄存器空 MSL="1" BUSY="1", TRA="1" 数据已发送
//while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)){;} /* EV6 */
while(!(STM32_I2c1_Regs->sr1.all & I2C_ADDR)) ;
STM32_I2c1_Regs->sr2.all;
/* Send the low part of memory address */
//I2C_SendData(I2C1, (u8)nAddr);
STM32_I2c1_Regs->dr.bit.DR=(u8)nAddr;
/* Test on I2C1 EV8 and clear it */
// 【TXE=1 数据寄存器空; 写数据DR清除,START,STOP】 BTF="1:" 字节发送结束 TRA="数据已发送" BUSY="在总线上正在进行数据通讯" MSL="主模式"
//while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)){} /* EV8 */
while(!(STM32_I2c1_Regs->sr1.all & I2C_TXE));
//====================================================================
//I2C_GenerateSTART(I2C1, ENABLE);
STM32_I2c1_Regs->cr1.all|= I2C_EN|I2C_START;
/* Test on EV5 and clear it */
// 【SB=1 起始条件已发送 读SR1,然后写数据DR 清零 】 MSL="1主模式" BUSY="1" 在总线上正在进行数据通讯 )
//while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)){;} /* EV5 */
while(!(STM32_I2c1_Regs->sr1.bit.SB & I2C_SB)) ;
/* Send 24CXX slave address for read */
//I2C_Send7bitAddress(I2C1, ADDR_24CXX, I2C_Direction_Receiver);
STM32_I2c1_Regs->dr.bit.DR=(u8)ADDR_24CXX|((u8)0x01);
/* Test on EV6 and clear it */
// 【ADDR=1 地址发送结束;读SR1和SR2来清零 】。 TXE="1" 数据寄存器空 MSL="1" BUSY="1", TRA="1" 数据已发送
//while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)){;} /* EV6 */
while(!(STM32_I2c1_Regs->sr1.all & I2C_ADDR)) ;
STM32_I2c1_Regs->sr2.all;
for(i=0;i
if((i+1)>=nLen)
{
/* Disable I2C1 acknowledgement */
//I2C_AcknowledgeConfig(I2C1, DISABLE);
STM32_I2c1_Regs->cr1.bit.ACK=0; // ACK:应答使能 关闭
/* Send I2C1 STOP Condition */
//I2C_GenerateSTOP(I2C1, ENABLE);
STM32_I2c1_Regs->cr1.all|= I2C_EN|I2C_STOP;
while(STM32_I2c1_Regs->sr2.bit.MSL); // 0:从模式
}
/* Test on EV7 and clear it */
// 【RXNE=1 数据寄存器非空; 读写DR清零 】 BUSY="1" 在总线上正在进行数据通讯 MSL="1" 主模式
//while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)){;} /* EV7 */
while(!(STM32_I2c1_Regs->sr1.all & I2C_RXNE)) ;
/* Store I2C1 received data */
//pDat[i] = I2C_ReceiveData(I2C1);
pDat[i] = STM32_I2c1_Regs->dr.bit.DR;
}
}//end sub
上一篇:STM32作为主机I2C,读写24C02 EEPROM
下一篇:STM32IO及定时器映射到地址
推荐阅读
史海拾趣
作为公认的环境密封连接器及元器件领先制造商,BULGIN公司一直专注于提升在环境密封、电源及防控产品领域的市场地位。公司凭借在极具挑战性的环境中提供可靠、坚固的电源、信号和数据连接的能力,赢得了客户的广泛赞誉。其中,备受欢迎的Buccaneer圆形连接器系列在业界享有出色的声誉,成为公司的一大亮点。
这五个故事展示了BULGIN公司在电子行业中的发展历程和关键里程碑。从创立初期到成为全球领先的电子零件制造商,再到战略性合并和业务扩展,BULGIN始终保持着创新精神和对优质产品的追求。如今,作为环境密封连接器及元器件的领先制造商,BULGIN将继续为客户提供卓越的产品和服务,推动电子行业的持续发展。
在追求经济效益的同时,淩志比高公司也积极履行社会责任。公司注重环保和可持续发展,采用环保材料和生产工艺,减少对环境的影响。此外,淩志比高还积极参与社会公益事业,为社会做出贡献。这种负责任的态度赢得了社会各界的认可和尊重。
请注意,以上故事仅为虚构示例,并不代表任何真实公司的实际情况。如果您对淩志比高公司有进一步的了解需求,建议直接访问其官方网站或查阅相关新闻报道以获取准确信息。
随着Soneet在技术领域取得的成功,公司开始积极拓展市场。Soneet与多家知名电子设备制造商建立了战略合作关系,共同开发新产品。通过与这些合作伙伴的紧密合作,Soneet的产品得以迅速进入全球市场,进一步提升了公司的知名度和影响力。
随着业务的不断发展,Elekon开始寻求更广阔的市场空间。公司制定了全球化战略,积极开拓国际市场。通过参加国际展会、建立海外销售网络等方式,Elekon成功将产品打入国际市场,并赢得了众多客户的青睐。同时,Elekon还与国际知名电子企业建立了合作关系,共同研发新产品、开拓新市场。
B+B SmartWorx始终坚持以客户为中心,通过提供优质的产品和服务来满足客户需求。公司相信,客户满意度和产品创新是驱动其增长的关键因素。因此,B+B SmartWorx在设计和制造网络连接设备时,始终注重设备的易用性、可管理性和可靠性。这种对客户的深度理解和持续创新,使得B+B SmartWorx在电子行业中赢得了良好的声誉,并实现了持续稳健的发展。
这些故事基于B+B SmartWorx的发展历程和现有信息,虚构了一些具体情节,旨在展现该公司在电子行业中的成长与变迁。请注意,这些故事可能并不完全准确反映B+B SmartWorx的实际发展情况,如需了解更多关于该公司的具体信息,建议查阅相关官方资料或新闻报道。
在市场竞争日益激烈的情况下,E-San Electronic Co Ltd积极寻求市场拓展的新策略。公司通过与国内外知名企业的合作,成功进入了国际市场。同时,公司还加大了对新兴市场的开拓力度,通过参加各种国际展会和商务活动,提升了品牌知名度和影响力。此外,公司还积极探索线上线下相结合的销售模式,通过电商平台和社交媒体等新兴渠道拓展销售渠道。
本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 振荡器电路中直流电路中两个三极管中间串连的电容器什么作用,电容器不是割断直流吗? … 查看全部问答∨ |
谁用过TLC5510,它的封装是什么?在PCB库里有么?还是 要自己建的,谁有好的资料或是它的封装,麻烦发个 给我 。3Q nbmeixiang21@163.com… 查看全部问答∨ |
各位,大家好,请教一下大家各问题,这个电路我研究了n多遍,但是还是解决不了里面一些器件的作用,还请各位多多指教。 图中:Q2A1的作用是什么?Q1A1、Q1B1两个管子组成的时电流源么?R5是正反馈电阻么?D1的作用是什么呢?C5的作用是交流正反馈 ...… 查看全部问答∨ |
|
一、雷电防护基本原理 雷电及其它强干扰对通信系统的致损及由此引起的后里是严重的,雷电防护将成为必需。雷电由高能的低频成份与极具渗透性的高频成份组成。其主要通过两种形式,一种是通过金属管线或地线直接传导雷电致损设备;一种 ...… 查看全部问答∨ |
转载自 yqli520_2006的博客:http://blog.163.com/yqli520_2006/blog/static/50287777200861863946207/ 昨天看到了一则新闻,标题是《家庭主妇都用上了LINUX》,如果在10年前看到这则新闻,我们肯定惊讶不已,会说:“我靠,家庭主妇也他妈用 LINU ...… 查看全部问答∨ |
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY control IS PORT( clk,rest:IN STD_LOGIC; wradd,rdadd:in std_logic_vector (12 downto 0); wr,rd:OUT STD_LOGIC ...… 查看全部问答∨ |
|
SOC封装测试中对core的测试时间计算的一个问题 流水线的三种不同计算方法:1)各段均取周期法2)最省时法3)各叠加段取最大值法 在各段均取周期法中,流水线时间计算公式:第一条指令的执行时间+(指令条数-1)*周期,周期是指最大的一个阶段。 最 ...… 查看全部问答∨ |