打印
[STM32F1]

这段程序讲解清楚

[复制链接]
1596|62
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xxmmi|  楼主 | 2020-7-4 19:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是函数库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))

使用特权

评论回复
沙发
yufe| | 2020-7-4 19:40 | 只看该作者
这里没程序,只有定义而已,没中文就看英文吧,做过也未必能全了解,扣得太多也没大用。

使用特权

评论回复
板凳
wangzsa| | 2020-7-4 19:44 | 只看该作者
I2C一直用的IO口模拟。。。

使用特权

评论回复
地板
huwr| | 2020-7-4 19:47 | 只看该作者
像I2C、SPI这类对时序要求不严格的通讯,我一贯都是用模拟的

使用特权

评论回复
5
songqian17| | 2020-7-4 19:53 | 只看该作者
对,以确保程序的移植便捷性

使用特权

评论回复
6
stly| | 2020-7-4 19:57 | 只看该作者
除非SPI的速率比较高的情况下。

使用特权

评论回复
7
hanwe| | 2020-7-4 19:59 | 只看该作者
I2C,我以前用过中断的方式。

使用特权

评论回复
8
xxrs| | 2020-7-4 20:03 | 只看该作者
优点是系统占用时间少,可以干些别的事情。

使用特权

评论回复
9
xxmmi|  楼主 | 2020-7-4 20:08 | 只看该作者
缺点是中断函数复杂,一堆的状态转换,需要了解I2C的整个过程以及各种意外处理。

使用特权

评论回复
10
xxmmi|  楼主 | 2020-7-4 20:12 | 只看该作者
我去找找看

使用特权

评论回复
11
yufe| | 2020-7-4 20:15 | 只看该作者
STM32 硬件I2C 到底是不是个坑

使用特权

评论回复
12
zhanglli| | 2020-7-4 20:17 | 只看该作者
没用过I2C的库函数的小白路过

使用特权

评论回复
13
zhuhuis| | 2020-7-4 20:23 | 只看该作者
太浪费时间了

使用特权

评论回复
14
zwll| | 2020-7-4 20:26 | 只看该作者
I2C的库函数可以借鉴别人的经验。

使用特权

评论回复
15
dingy| | 2020-7-4 20:28 | 只看该作者
为什么要使用I2C的库函数呢

使用特权

评论回复
16
liuzaiy| | 2020-7-4 20:32 | 只看该作者
楼主是准备做什么使用呢

使用特权

评论回复
17
lium| | 2020-7-4 20:35 | 只看该作者
STM32F1的IIC和SPI都没有搞明白。

使用特权

评论回复
18
supernan| | 2020-7-4 20:42 | 只看该作者
https://wenku.baidu.com/view/30763b48be1e650e52ea9979.html

使用特权

评论回复
19
chenjunt| | 2020-7-4 20:46 | 只看该作者
这个是ST的官网例程吗

使用特权

评论回复
20
guoyt| | 2020-7-4 20:50 | 只看该作者
不会用。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

369

主题

4278

帖子

2

粉丝