历史上的今天
返回首页

历史上的今天

今天是:2024年11月09日(星期六)

正在发生

2019年11月09日 | stm8的I2C库的使用

2019-11-09 来源:eefocus

一.前言


stm8是一款低功耗的MCU芯片,它具备stm32库函数和资源丰富的优势。也同时具有价格便宜,低功耗的特点。在一些项目中,能起到很好的作用。下面我介绍一下stm8的IIC硬件库函数驱动代码及实现。


二.IIC基本操作


iic基本操作分为读操作和写操作,这两个操作就可以对设备进行一些基本的操作了。还要知道设备的地址就ok了,具体的IIC时序大家可以上网看看。


三.实现代码


1.先要启动IIC的时钟,保证可以正常工作。 CLK_PeripheralClockConfig (CLK_Peripheral_I2C1,ENABLE);//开启IIC1时钟


2.再对IIC进行初始化的操作


 void Init(void)   

 {  

I2C_DeInit();  

I2C_Init(I2C_Speed, 0x88, I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_7BIT, 16);

  I2C_Cmd(ENABLE);  

 } 

可以用来对IIC的通信时间和主机地址以及从机地址等参数进行设置。IICSPEED最好不要超过400K,会造成通信的不稳定,最好在100K左右就可以了,host_address是主机的地址,可以自己设定。


3.IIC的写操作


/****************************************************************************

* 名称:I2C_WriteByte(uint8_t addr,uint8_t data)

* 功能:进行IIC的写操作。

* 入口参数: uint8_t addr 寄存器的地址

* uint8_t data 写入的数据 

* 出口参数:无

* 说明:对触摸屏的寄存器进行写入操作,变量都是16进制

****************************************************************************/


void I2C_WriteByte(uint8_t addr,uint8_t data)  

{  

  

while(I2C_GetFlagStatus( I2C_FLAG_BUSBUSY));

  

I2C_GenerateSTART( ENABLE);//开启I2C1  

while(!I2C_CheckEvent( I2C_EVENT_MASTER_MODE_SELECT));/*EV5,主模式*/  

  

I2C_Send7bitAddress( I2C1_WRITE_ADDRESS7, I2C_DIRECTION_TX );//器件地址 -- 默认0xD0  

while(!I2C_CheckEvent( I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));  

  

I2C_SendData( addr);//寄存器地址  

while (!I2C_CheckEvent( I2C_EVENT_MASTER_BYTE_TRANSMITTED));  

  

I2C_SendData( data);//发送数据  

while (!I2C_CheckEvent( I2C_EVENT_MASTER_BYTE_TRANSMITTED));  

I2C_AcknowledgeConfig(ENABLE);  

  

I2C_GenerateSTOP( ENABLE);//关闭I2C1总线  

}


上面的代码是IIC的写函数,可以对设备的寄存器进行写操作。I2C1_WRITE_ADDRESS7代表设备IIC的写入地址,根据器件地址的不同改变就可以。每一步都是调用的IIC的库函数,如果进行单步调试,地址寄存器都对的话,就可以看见每操作一步从机都会有一个应答信号。


4.IIC的读操作


uint8_t I2C_ReadByte(uint8_t addr)  

{  

uint8_t i;  

  

while(I2C_GetFlagStatus( I2C_FLAG_BUSBUSY));  

  

I2C_GenerateSTART( ENABLE);//开启I2C1  

while(!I2C_CheckEvent( I2C_EVENT_MASTER_MODE_SELECT));/*EV5,主模式*/  

  

I2C_Send7bitAddress( I2C1_WRITE_ADDRESS7, I2C_DIRECTION_TX );//器件地址 -- 默认0xD0  

while(!I2C_CheckEvent( I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));  

  

I2C_SendData( addr);//寄存器地址  

while (!I2C_CheckEvent( I2C_EVENT_MASTER_BYTE_TRANSMITTED));  

  

  

  

I2C_GenerateSTART( ENABLE);//开启I2C1  

while(!I2C_CheckEvent( I2C_EVENT_MASTER_MODE_SELECT));/*EV5,主模式*/  

  

I2C_Send7bitAddress( I2C1_READ_ADDRESS7, I2C_DIRECTION_RX );//器件地址 -- 默认0xD1  

while(!I2C_CheckEvent( I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));  

  

  

while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_RECEIVED));  

  

i=I2C_ReceiveData();//读取数据  

  

I2C_AcknowledgeConfig(DISABLE);  

  

I2C_GenerateSTOP( ENABLE);//关闭I2C1总线  

  

  

return i;  

  


IIC的读操作,跟写操作不同的是.读操作首先要先进行写操作,写一下要读的寄存器地址,当然地址也要发送写入的地址。然后再写入器件读取地址,要读取的寄存器地址,把数据读取出来。I2C1_READ_ADDRESS7为器件的读取地址,写操作和读操作两个操作的应答变量也不一样,这个要注意一下。


四.总结


硬件IIC的库函数实现通信,代码实现量小,调通以后的稳定性高,速度快。缺点是可能会占一部分内存空间,调试不方便,因为都是用的库函数,不容易找问题。

推荐阅读

史海拾趣

AdaptivEnergy公司的发展小趣事

AdaptivEnergy是一家专注于能量收集和管理技术的公司,以下是该公司发展的五个相关故事:

  1. 公司成立与初期发展: AdaptivEnergy成立于2007年,总部位于美国马里兰州的克拉克斯堡市。公司的创始人是一群在能源管理和微型能源收集技术领域具有丰富经验的工程师和科学家。初期,公司主要专注于研发微型能源收集器件,旨在利用环境中的振动、热能等能源,为便携设备提供持续的电源支持。

  2. 技术创新与专利保护: AdaptivEnergy在能量收集和管理领域取得了多项技术突破,并获得了相关的专利保护。公司开发的微型能量收集器件具有高效、小型化和低成本的特点,广泛应用于智能手机、传感器、医疗设备等领域。同时,公司还不断改进其技术,并积极寻求新的技术创新和专利保护,以保持竞争优势。

  3. 产品推出与市场应用: 随着技术的成熟和产品的不断完善,AdaptivEnergy推出了一系列的微型能量收集器件和解决方案。这些产品可以通过环境中的振动、光照、温差等能源源源不断地为设备提供电力支持,解决了传统电池供电存在的限制和问题。这些产品在便携式电子设备、无线传感器网络、智能健康监测等领域得到了广泛应用。

  4. 市场拓展与合作伙伴关系: AdaptivEnergy积极拓展国内外市场,并与各类客户和合作伙伴建立了稳固的合作关系。公司与电子设备制造商、系统集成商、科研机构等进行合作,共同开发定制化的能量收集解决方案,满足不同客户的需求。同时,公司还与行业协会、学术界等建立合作关系,共同推动微型能量收集技术的发展和应用。

  5. 未来展望与持续创新: 作为一家专注于微型能量收集技术的领先企业,AdaptivEnergy将继续致力于持续创新和技术提升。公司将继续投入研发资源,推出更加高效、可靠的微型能量收集器件和解决方案,以满足日益增长的市场需求。未来,AdaptivEnergy将继续在能量收集和管理领域发挥领先优势,为客户提供更加智能、便携的能源解决方案。

Easy Braid公司的发展小趣事

Easy Braid公司,从一家名不见经传的小型电子制造商起家,其发展的故事始于一次技术创新。在公司成立初期,面对市场上繁多的线缆管理方案,Easy Braid的创始人意识到传统方法的局限性,于是带领团队研发了一种新型的线缆编织技术——Easy Braid技术。这种技术不仅提高了线缆的耐用性和美观度,还大大简化了安装过程。随着这一技术的推出,Easy Braid开始逐渐在电子行业中崭露头角。

ABL Heatsink公司的发展小趣事

早期,ABL Heatsink公司主要生产通用型散热器,但随着市场竞争的加剧,公司意识到必须调整市场定位。于是,公司开始专注于研发针对特定电子设备的高性能散热器。通过深入了解客户需求,ABL Heatsink成功开发出一系列定制化产品,赢得了市场的青睐。

B&K Precision公司的发展小趣事

为了进一步拓展国际市场,B&K Precision在全球范围内设立了多个分公司和办事处。其中,2012年在中国设立的分公司百科中国仪器有限公司是一个重要的战略布局。这一举措不仅加强了公司在亚洲市场的地位,也为各地客户提供了更为迅速和便捷的售后服务保障。同时,通过与国际知名企业的合作与交流,B&K Precision不断吸收先进的技术和管理经验,为公司的持续发展注入了新的动力。

以上五个故事,展现了B&K Precision公司从车库起步到成为全球电子测量领域领导者的发展历程。通过不断创新和拓展业务,公司成功应对了市场变化和挑战,成为了电子行业中的佼佼者。

ATOP_Technologies公司的发展小趣事

随着技术的不断进步,ATOP Technologies意识到要想在激烈的市场竞争中保持领先地位,必须不断进行技术创新和产品升级。因此,公司加大了在研发方面的投入,积极引进高端人才,加强与高校和研究机构的合作。经过多年的努力,ATOP Technologies成功开发出了一系列具有自主知识产权的工业自动化产品,并在市场上取得了良好的口碑。

Fluke公司的发展小趣事

随着技术的不断进步,ATOP Technologies意识到要想在激烈的市场竞争中保持领先地位,必须不断进行技术创新和产品升级。因此,公司加大了在研发方面的投入,积极引进高端人才,加强与高校和研究机构的合作。经过多年的努力,ATOP Technologies成功开发出了一系列具有自主知识产权的工业自动化产品,并在市场上取得了良好的口碑。

问答坊 | AI 解惑

RealView MDK 3.24评估版已正式发布

软件大小:99.14M 下载地址:http://www.realview.com.cn/down-list.asp?id=584 注意:MDK中国版例程服务包请前往http://www.realview.com.cn/down-list.asp?id=585下载 RealView MDK 3.24更新说明 ================== 1. ...…

查看全部问答>

arm Linux中的IPv6协议怎么用起来?

两块板子,一块单片机板子,一块ARM9板子。单片机板子上没有操作系统,ARM9板子上加载了Linux操作系统。 一方面,在ARM9板子上,需要把单片机板子通过无线传送过来的IPv6包解析,并最终把包中应用层的数据传给PC机服务器;另一方面,ARM9板子要接 ...…

查看全部问答>

关于单片机发射红外信号的问题

最近在做毕业设计,要求发射红外信号,得知红外信号是38K的载波PAM调制形成的,现在是用的定时器中断9us一次再在中断处理中实现PAM,但是在Protues里面显示的波形却是40us的。请问这是怎么回事?请问各位大牛有什么更好的办法实现上述要求。谢谢。…

查看全部问答>

有关流接口驱动程序的问题

最近调试流接口驱动程序出了些问题,麻烦论坛里的牛牛们指教,问题描述如下: 三星2440平台,wince5.0,调试ADC的流接口驱动程序,我只为了测试所以很多功能都简化了,就是往寄存器里写一次,直接读回,用了virtualalloc和virtualcopy函数映射地址 ...…

查看全部问答>

wince6下能不能用ACESS数据库?

如题。。wince6下能不能用ACESS数据库? 做个CE5下用EVC写ACESS比较麻烦。。 CE6能不能直接用VS2005连ACESS?…

查看全部问答>

串口驱动中的一个问题

编译出现以下的错误: BUILD: [00:0000000078:PROGC ] Building LINK Pass in D:\\WINCE600\\PLATFORM\\LPC32XX\\src\\drivers\\SERIAL\\ directory. BUILD: [01:0000000089:PROGC ] Linking D:\\WINCE600\\platform\\LPC32XX\\target\\ARMV4I\\d ...…

查看全部问答>

FPGA板子哪家的板子比较好

本人想买FPGA板子,不知道哪家提供的板子和服务比较好,请大家帮忙说说啊!…

查看全部问答>

有两个恒流源的运放电路不太理解,希望请教一下大家

书上说左边的电路Io=Vin/R2,我能理解到根据负反馈,运放工作于虚短的状态,R2上的电压为Vin,根据KCL定理,Vin/R2=Io+Ir1(FET 源漏极电流),书里没有说为什么可以忽略这个源漏极电流,想请教一下大家。 另外右边的电路,是引入了正反馈,不能用虚 ...…

查看全部问答>

51单片机开发板 原理图 集合下载

51单片机开发板 原理图 集合下载 ,欢迎下载学习 [ 本帖最后由 y789 于 2012-5-14 15:33 编辑 ]…

查看全部问答>

谁做过超声波发射电路,用的是升压中周,有谁做过吗。。帮忙指点一下电路

不知道他的工作原理(中周不了解)按着焊好,又不行。。急死了…

查看全部问答>