第一次用I2C的从模式,之前用的是主模式,用的IO模拟的,在很多设备都用上了,没什么问题。在使用I2C从模式之前,也在网上看到很多人说这个是坑。自己花了几天的时间,终于跳过了这个坑,再次总结下:
1. 最困难的地方:因为需要两个平台对接,主端用的是LINUX系统,芯片是TI335X,从端是STM32F030,我两端的程序都没写过,所以出现问题了,无法判定是哪一边的问题,这个很痛苦。
2. 例子。虽然“拿来主义”不太厚道”,但是站在巨人的肩膀上,往往是最快的。
1) STM32F030的代码:http://www.openedv.com/forum.php?mod=attachment&aid=NDczMzV8N2FkMWE1NWZ8MTU0MTUwMjI3MnwwfDY0NTIy
2)Linux的代码:http://blog.sina.com.cn/s/blog_13087b7fa0102wcyg.html
3. 实际上STM32F030写的已经很好了,只是我在调试过程中,总是huiy怀疑这怀疑那的,改了很多代码,做了很多打印信息,实际上证明我的怀疑都是错的。
4. Linux才是很大的坑,毕竟我很少在Linux下编程。
1)ioctl返回的是成功失败的标志位,而我一开始以为是返回成功的字节数,这里花了半天时间,老是返回1,实际上就是成功的,而我认为应该范围我需要的长度。
2) 在读、写同时操作的时候,必须先读后写。我在调试的时候,先调试写的代码,是OK的,在调试度的代码,也是OK,最后合并的时候,也是OK。但是发现一断电重开机就不行,折腾几下右可以了。最后把读放在写前面就没在出现异常了。
以上,做个记录。
关键字:STM32F030 I2C 从模式 中断编程
引用地址:
STM32F030 I2C 从模式中断编程
推荐阅读最新更新时间:2024-03-16 16:26
PIC16c54的I2C读写程序
TITLE TWO WIRE/I2C BUS INTERFACE WITH PIC16C5x ; LIST P=16C54 ;***************************************************************************** ;** Two wire/I2C Bus READ/WRITE Sample Routines of Microchip's ;** 24Cxx / 85Cxx serial CMOS EEPROM interfacing to a ;** PIC16C54 8-bit CMOS single chip microcomputer ;** R
[单片机]
从千万到百万,国产减速器专机制造模式引领成本变革
撰文 | 歌者 “RV减速机由于其传动比大、传动效率高、刚性强、高可靠性等特点一直被广泛应用于工业机器人领域。但在经历了40余年的发展中,RV减速机现在的精度水平、刚性指标并未得到显着提高,表明其依赖的摆线传动技术路线已经封顶。实际上,如果另辟蹊径用渐开线齿轮实现传动,不仅传动效率能够由原来的88%提升至98%以上,且精度、可靠性和寿命都能得到大幅提升,这就是底层原理创新带来的产品革新。 六环传动院长王俊岭 在2021年高工机器人年会上再次表明了原理创新是国产减速器突破的方向和未来。 在精密机械传动领域深耕半个世纪,王俊岭已经充分认识到,机器人关节减速器在工作中既要传递很大的转矩和过载冲击,空间又要求是上百倍减速比扁平化的
[机器人]
普通IO口模拟IIC(I2C)接口通讯的程序代码
I2C总线是Philips公司提出的一种集成电路IC器件之间相连接的总线协议,其目的是使电子系统(不只 限于单片机系统)各个IC器件之间的连线变得容易。因为使用传统的并行总线在IC器件之间连接,往往会使得IC之间连线较多,显得非常复杂。而I2C总线 则使IC器件之间只需SDA、SCL两条连线就可以传送数据,因而十分方便。由于I2C在印刷体中不容易书写(需要上标),所以实际书写时,还常见到 IIC、I2C等书写方法,本文采用IIC的写法,敬请注意。关于IIC总线的知识,请参阅相关书籍,此处不再做进一步介绍。 下面我们用一个使用IIC总线连接器件的例子来简单说明IIC总线的仿真。 例.EEPROM24C02是采用IIC接口的一种常用2
[单片机]
MSP430F5529 DriverLib 库函数I2C驱动OLED屏幕
平台:Code Composer Studio 10.4.0 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) I2C驱动代码 P3.0为SDA,P3.1为SCL MSP430F5529_I2C.c #include driverlib.h #define I2C_USCI_BASE USCI_B0_BASE #define I2C_USCI_VECTOR USCI_B0_VECTOR #define I2C_USCI_IV UCB0IV #define I2C_BUF_LENGTH 32 static char i2c_buf ; static
[单片机]
单片机编程技巧-功能强大的时钟中断
功能强大的时钟中断 在单片机 程序设计中,设置一个好的时钟中断,将能使一个CPU发挥两个CPU的功效,大大方便和简化程序的编制,提高系统的效率与可操作性。我们可以把一些例行的及需要定时执行的程序放在时钟中断中,还可以利用时钟中断协助主程序完成定时、延时等操作。 下面以6MHz时钟的AT89C51系统为例,说明时钟中断的应用。 定时器初值与中断周期 时钟中断无需过于频繁,一般取20mS(50Hz)即可。如需要百分之一秒的时基信号,可取10mS(100Hz)。这里取20mS,用定时器T0工作于16位定时器方式(方式1)。T0的工作方式为:每过一个机器周期自动加1,当计满0FFFFh,要溢出时,便会产生中断,并由硬件设
[单片机]
stm32F4之使用I2C读写24C02
一.24C02简单介绍 1.串行E2PROM是基于I2C-BUS 的存储器件, 2.可以支持100万次擦除,数据可以保存100年, 3.支持每次读写1字节 4.写周期最大5ms(即最好保证在5ms后进行读写,否则可以数据将会读取错误) 二.24C02的读写时序图 从手册中可以找到以下两个读写图,我也将以以下两个图为例进行函数编写,其他读写图请查手册 三.用模拟的I2C协议封装24C02的读与写 该设备为IIC设备,因此我们要先确定其设备地址,STM32F4探索者的开发板上为2K的E2PROM,A2=A1=A0 因此设备地址为(0XA0/0xA1) 根据下图进行编程: 字节写: 使用封装好
[单片机]
【51单片机快速入门指南】4.2: SSD1306 OLED屏(0.96寸、1.3寸)的I2C控制详解
普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 2022/1/12 重制,统一了SPI版和I2C版本的代码 硬知识 摘自SSD1306-OLED驱动芯片中文手册 排版比较神秘 SSD1306简介 SSD1306 是一个单片 CMOS OLED/PLED 驱动芯片,可以驱动有机/聚合发光二极管点阵图形显示系统。由 128 segments 和 64 Commons 组成。该芯片专为共阴极 OLED 面板设计。 SSD1306 中嵌入了对比度控制器、显示 RAM 和晶振,并因此减少了外部
[单片机]
DM642的I2C总线配置与应用
随着国民经济的快速发展,数字图像处理广泛应用于社会生活的各个领域。DM642作为高性能的视频处理芯片,被广泛应用到视频处理的很多领域,但是DM642的I2C应用容易遇到I2C、VP等死锁,以及SAA7115的从地址不能正确设置的问题。本文主要介绍的就是基于DM642的视频采集处理系统中I2C模块的正确初始化,以及通过I2C总线正确地对视频解码芯片SAA7115的寄存器读/写程序。 1 I2C总线控制器的初始化 为了正确使用DM642内置的I2C模块,首先需要正确的初始化。 1.1 解锁DM642中的I2C模块 在DM642的I2C应用中,容易遇到不能使用初始化I2C模块的问题,原因在于没有先解锁并使能I2C模块。在DM64
[嵌入式]