历史上的今天

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

正在发生

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

发布者:电子设计探索者 来源: eefocus关键字:stm8  I2C库  低功耗 手机看文章 扫描二维码
随时随地手机看文章

一.前言


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

关键字:stm8  I2C库  低功耗 引用地址:stm8的I2C库的使用

上一篇:STM8S103之GPIO
下一篇:stm8s105调试I2C记录

推荐阅读

  2017年年末,国家能源局、国务院扶贫办联合发布了《关于下达“十三五”第一批光伏扶贫项目计划的通知》,并正式下发“十三五”第一批光伏扶贫项目,作为国家级贫困县的山西省代县便出现在首批扶贫名单之中。“十三五”第一批光伏扶贫项目计划显示,代县建档立卡贫困村236个,帮扶户数6483个,计划建设光伏电站数量217座,建设规模达42.8MW。   代县...
  本文介绍了一个基于PC的示波器参考设计。重点介绍了MAX1393 ADC和MAX1396 EV (评估)板,文中给出了电路图、软件及软件功能说明。  引言  本参考设计提供了构建一个示波器所需的全部电路(图1),设计采用MAX1396EVKIT (参考设计要求用MAX1393ETB ADC替代MAX1396ETB ADC)和一台PC,并提供了电路图、Windows?软件和微控制器固件。固件示例程序采用...
汽车功能电子化是无排放交通的一项关键技术,已成为未来大热趋势之一。日益严格的能改及坏保法规,推动汽车功能电子化趋势的不断增强和混合电动汽车 / 电动汽车(HEV/EV)的日渐普及。这加大了对高能效和高性能的电源和功率半导体需求。安森美半导体作为汽车功能电子化的领袖之一和全球第二大功率分立器件模块半导体供应商,提供广泛的高能效和高可靠性...
尝试使用nfs挂载跟文件系统时一直失败,错误信息如下eth0: link downIP-Config: Complete: device=eth0, addr=192.168.56.102, mask=255.255.255.0, gw=192.168.56.1, host=192.168.56.102, domain=, nis-domain=(none), bootserver=192.168.56.101, rootserver=192.168.56.101, rootpath=Root-NFS: unknown option: nfsve...

史海拾趣

问答坊 | AI 解惑

时钟抖动和相位噪声对采样系统的影响

随着直接中频采样的更高分辨力数据转换器的上市,系统设计师必须对低抖动时钟电路做出有助于性能与成本折衷的抉择。制造商用来规定时钟抖动的很多传统方法并不适用于数据转换器,或者说,充其量也只能反映问题的一部分。如果对时钟电路的规范和设计 ...…

查看全部问答∨

DCAC控制电路

大家可以好好好看…

查看全部问答∨

发个小日本做的mega8 USB to 232

刚看到的 手头无AVR片子 没试 …

查看全部问答∨

大赛论文设计报告实例模板分析

本帖最后由 paulhyde 于 2014-9-15 03:33 编辑 有人总结出来的报告,这是一个模板的例子 后面都有另外加的说明 如果对于论文报告没有什么想法的可以参考参考    …

查看全部问答∨

焊盘知识

焊盘知识,介绍的很清楚!…

查看全部问答∨

手机遥控家中电器,未尝不可—LED光学无线网络

手机遥控家中电器,未尝不可—LED光学无线网络  。以下信息即是答案: 近日,波士顿工程大学对 LED 进行了深入研究发现, LED 不仅是未来的照明系统必备组件,而且也将成为下一代无线网络的骨干。 该大学教授 Thomas Little 声称, ...…

查看全部问答∨

grub-0.97 文件写操作函数的实现(grub_write)

各位好:     最近在 x86下进行单板引导的开发,在此过程中 遇到了一点问题 希望与大家共同探讨一下;     1 单板上电后 首先读取 单板上EEPROM中存储的启动信息;     2 使用grub-0.97 的grub_read 函数读配置 ...…

查看全部问答∨

为什么旋转屏幕后显示不同

我有个用visual2005写的应用程序(ZJY.EXE),它运行后是一个界面,会有几个按钮和几个选择框,比如第一个按钮,对应的前面会有个选择框,选择后,里面会显示个对勾 首先,没有旋转屏幕的时候我运行ZJY.EXE,界面显示很漂亮,比如,对勾是浅绿色的,按钮也很有 ...…

查看全部问答∨

谈谈变频器~~~

研究过,设计过,使用过变频器的大侠们,进来谈谈对变频器器的认识,应用,市场情况~~~ 大家也可以借此加深对变频器的认识。…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved