ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
打印

[STM32F1] 没有一个人能把I2C的库函数讲清楚吗?

[复制链接]
2055|52
跳转到指定楼层
楼主
这是函数库I2C头文件里的内容,但是却没有找到一篇能把这段程序讲解清楚的中文资料。
请论坛里的隐藏高手帮忙解惑!跪谢大神留步
/* I2C Events */
/* EV1 */
#define  I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED       ((u32)0x00060082) /* TRA, BUSY, TXE and ADDR flags */
#define  I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED          ((u32)0x00020002) /* BUSY and ADDR flags */
#define  I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED ((u32)0x00860080)  /* DUALF, TRA, BUSY and TXE flags */
#define  I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED    ((u32)0x00820000)  /* DUALF and BUSY flags */
#define  I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED        ((u32)0x00120000)  /* GENCALL and BUSY flags */

/* EV2 */
#define  I2C_EVENT_SLAVE_BYTE_RECEIVED                     ((u32)0x00020040)  /* BUSY and RXNE flags */
     
/* EV3 */
#define  I2C_EVENT_SLAVE_BYTE_TRANSMITTED                  ((u32)0x00060084)  /* TRA, BUSY, TXE and BTF flags */

/* EV4 */
#define  I2C_EVENT_SLAVE_STOP_DETECTED                     ((u32)0x00000010)  /* STOPF flag */

/* EV5 */
#define  I2C_EVENT_MASTER_MODE_SELECT                      ((u32)0x00030001)  /* BUSY, MSL and SB flag */

/* EV6 */
#define  I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED        ((u32)0x00070082)  /* BUSY, MSL, ADDR, TXE and TRA flags */
#define  I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED           ((u32)0x00030002)  /* BUSY, MSL and ADDR flags */

/* EV7 */
#define  I2C_EVENT_MASTER_BYTE_RECEIVED                    ((u32)0x00030040)  /* BUSY, MSL and RXNE flags */

/* EV8 */
#define I2C_EVENT_MASTER_BYTE_TRANSMITTING                 ((u32)0x00070080) /* TRA, BUSY, MSL, TXE flags */

/* EV8_2 */
#define  I2C_EVENT_MASTER_BYTE_TRANSMITTED                 ((u32)0x00070084)  /* TRA, BUSY, MSL, TXE and BTF flags */
      
/* EV9 */
#define  I2C_EVENT_MASTER_MODE_ADDRESS10                   ((u32)0x00030008)  /* BUSY, MSL and ADD10 flags */
                                          
/* EV3_2 */
#define  I2C_EVENT_SLAVE_ACK_FAILURE                       ((u32)0x00000400)  /* AF flag */

#define IS_I2C_EVENT(EVENT) (((EVENT) == I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED) || \
                             ((EVENT) == I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED) || \
                             ((EVENT) == I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED) || \
                             ((EVENT) == I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED) || \
                             ((EVENT) == I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED) || \
                             ((EVENT) == I2C_EVENT_SLAVE_BYTE_RECEIVED) || \
                             ((EVENT) == (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_DUALF)) || \
                             ((EVENT) == (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_GENCALL)) || \
                             ((EVENT) == I2C_EVENT_SLAVE_BYTE_TRANSMITTED) || \
                             ((EVENT) == (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_DUALF)) || \
                             ((EVENT) == (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_GENCALL)) || \
                             ((EVENT) == I2C_EVENT_SLAVE_STOP_DETECTED) || \
                             ((EVENT) == I2C_EVENT_MASTER_MODE_SELECT) || \
                             ((EVENT) == I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) || \
                             ((EVENT) == I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED) || \
                             ((EVENT) == I2C_EVENT_MASTER_BYTE_RECEIVED) || \
                             ((EVENT) == I2C_EVENT_MASTER_BYTE_TRANSMITTED) || \
                             ((EVENT) == I2C_EVENT_MASTER_MODE_ADDRESS10) || \
                             ((EVENT) == I2C_EVENT_SLAVE_ACK_FAILURE))


沙发
| 2018-4-15 23:04 | 只看该作者
这里没程序,只有定义而已,没中文就看英文吧,做过也未必能全了解,扣得太多也没大用。

评论

时光宙宇 2018-4-16 14:27 回复TA
因为看了一篇讲调试的文章,里面说:如果想解决掉BUG,那么一定要先把手册读懂,可是我感觉网上的例程全都是是copy的一份源码而已,发帖人也没.... 
板凳
| 2018-4-16 07:56 | 只看该作者
I2C一直用的IO口模拟。。。

评论

时光宙宇 2018-4-16 14:30 回复TA
哦哦,谢谢,如果实在搞不懂的话,我也放弃硬件的 
地板
| 2018-4-16 08:33 | 只看该作者
像I2C、SPI这类对时序要求不严格的通讯,我一贯都是用模拟的,以确保程序的移植便捷性。除非SPI的速率比较高的情况下。

评论

时光宙宇 2018-4-16 14:32 回复TA
谢谢,我是读取mpu6050,却看不懂网上写的例程 
5
| 2018-4-16 09:11 | 只看该作者
I2C,我以前用过中断的方式。
优点是系统占用时间少,可以干些别的事情。
缺点是中断函数复杂,一堆的状态转换,需要了解I2C的整个过程以及各种意外处理。

评论

时光宙宇 2018-4-16 14:34 回复TA
我主要是对各种状态不懂,中文参考手册没有解释,英文的我却看不懂 
6
| 2018-4-16 09:52 | 只看该作者
如果st官方没有的话,这一点不够新唐做得好,至少在这些指令上,详细介绍了怎么用
7
 楼主 | 2018-4-16 14:35 | 只看该作者
挖东衣宇 发表于 2018-4-16 09:52
如果st官方没有的话,这一点不够新唐做得好,至少在这些指令上,详细介绍了怎么用 ...

谢谢,我去找找看
8
| 2018-4-16 21:47 | 只看该作者
STM32 硬件I2C 到底是不是个坑
9
| 2018-4-16 21:48 | 只看该作者
没用过I2C的库函数的小白路过
10
| 2018-4-16 21:48 | 只看该作者
太浪费时间了
11
| 2018-4-16 21:49 | 只看该作者
I2C的库函数可以借鉴别人的经验。
12
| 2018-4-16 21:49 | 只看该作者
为什么要使用I2C的库函数呢
13
| 2018-4-16 21:50 | 只看该作者
楼主是准备做什么使用呢
14
| 2018-4-16 21:50 | 只看该作者
STM32F1的IIC和SPI都没有搞明白。
15
| 2018-4-16 21:51 | 只看该作者
https://wenku.baidu.com/view/30763b48be1e650e52ea9979.html
16
| 2018-4-16 21:52 | 只看该作者
这个是ST的官网例程吗
17
| 2018-4-16 21:52 | 只看该作者
不会用。
18
| 2018-4-16 21:53 | 只看该作者
看别人的I2C代码设计的非常不错。
19
| 2018-4-16 21:53 | 只看该作者
调试根本找不到头绪了。
20
| 2018-4-16 21:53 | 只看该作者
经常使用模拟的,没有用硬件IIC
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

分享 快速回复 返回顶部 返回列表