STM32,IIC总线。
来源:互联网 发布:淘宝卖家服务态度评分 编辑:程序博客网 时间:2024/05/29 15:13
IIC总线这块很难,确实研究了一段时间。基础知识、教程等就不写了,反正也是给自己看。其他都在手册里。
总体上看需要几部分:
1、选取端口设置成IIC总线,GPIO输出。并拉高。 预定义I2C_SCL I2C_SDA I2C_SDA_H I2C_SDA_L I2C_SCL_H I2C_SCL_L等。
2、编写函数,SDA输入输出,主要是配置GPIO模式。
3、根据IIC基础知识——时序图,
注意:1、在总线空闲的时候, SDA 和 SCL 都是高电平的。
2、在 SCL 为高电平期间, SDA 必须保持稳定。所以 SDA 改变状态最好在 SCL 为低电
平的时候改变,如果在高电平改变的话回被认为是一种有效信号(如:起始信号或者结束信
号) 。
编写:起始信号,终止信号,主机产生应答,主机不产生应答,等待从机应答(返回值:成功或失败)。
根据上述几个函数,再根据时序图编写,IIC上发送一个字节,读取一个字节。
4、弄清AT24C01/02/04/08/16/32/64/128等器件手册,多看几遍。主要看时序图。
5、编写通用程序。读AT24Cxx字节,写AT24Cxx字节。
主要看程序解释。 这里注意C16以上数据地址为u16,器件地址为a0。C16以下数据地址为u8.器件地址为a0+A2A1A0.
16以上,addr为纯数据地址。16以下,addr为器件地址加数据地址
/*******************************************************************************
* 函 数 名 : AT24Cxx_WriteOneByte
* 函数功能 : 24c02写一个字节地址 数据
* 输 入 : addr dt
* 输 出 : 无
*******************************************************************************/
void AT24Cxx_WriteOneByte(u16 addr,u8 dt)
{
I2C_Start();
if(EE_TYPE>AT24C16)
{
I2C_Send_Byte(0xA0);//器件地址
I2C_Wait_Ack();
I2C_Send_Byte(addr>>8);//发送数据地址高位
}
else
{
I2C_Send_Byte(0xA0+((addr/256)<<1));//器件地址
}
I2C_Wait_Ack();
I2C_Send_Byte(addr%256);//数据地址 16以上是数据地址低位
// 16以下是数据地址
I2C_Wait_Ack();
I2C_Send_Byte(dt);
I2C_Wait_Ack();
I2C_Stop();
delay_ms(10);
}
- STM32,IIC总线。
- 基于HAL库 Stm32虚拟IIC总线
- IIC总线从零梳理(结合STM32平台)
- IIC总线
- IIC总线
- IIC总线
- IIC总线
- IIC总线
- IIC总线
- IIC总线
- IIc总线
- iic总线
- iic总线
- IIC总线
- 总线基础--IIC总线
- STM32 IIC
- STM32-IIC
- 2、STM32基本接口驱动--IO 单总线 串口 SPI IIC
- Android stuido 打包 The same input jar is specified twice 问题
- 复杂链表复制
- linux下MongoDB客户端shell基本操作
- 让EditText不能自动获取焦点
- 仿淘宝、京东、美团使用ViewPager+GridView实现左右滑动查看更多分类导航功能
- STM32,IIC总线。
- 机器学习——DBN深度信念网络详解
- mysql
- C++递推算法求解兔子产仔问题
- 首次启动hadoop
- 解决android 软键盘在全屏下设置adjustResize无效的问题
- UML类图几种关系说明
- 蓝桥杯 ADV-227 算法提高 11-1实现strcmp函数
- Android 混淆问题记录can't find superclass or interface