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

[STM32F1] 这段程序讲解清楚

[复制链接]
247|62
 楼主 | 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))

使用特权

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

使用特权

评论回复
| 2020-7-4 19:44 | 显示全部楼层
I2C一直用的IO口模拟。。。

使用特权

评论回复
| 2020-7-4 19:47 | 显示全部楼层
像I2C、SPI这类对时序要求不严格的通讯,我一贯都是用模拟的

使用特权

评论回复
| 2020-7-4 19:53 | 显示全部楼层
对,以确保程序的移植便捷性

使用特权

评论回复
| 2020-7-4 19:57 | 显示全部楼层
除非SPI的速率比较高的情况下。

使用特权

评论回复
| 2020-7-4 19:59 | 显示全部楼层
I2C,我以前用过中断的方式。

使用特权

评论回复
| 2020-7-4 20:03 | 显示全部楼层
优点是系统占用时间少,可以干些别的事情。

使用特权

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

使用特权

评论回复
 楼主 | 2020-7-4 20:12 | 显示全部楼层
我去找找看

使用特权

评论回复
| 2020-7-4 20:15 | 显示全部楼层
STM32 硬件I2C 到底是不是个坑

使用特权

评论回复
| 2020-7-4 20:17 | 显示全部楼层
没用过I2C的库函数的小白路过

使用特权

评论回复
| 2020-7-4 20:23 | 显示全部楼层
太浪费时间了

使用特权

评论回复
| 2020-7-4 20:26 | 显示全部楼层
I2C的库函数可以借鉴别人的经验。

使用特权

评论回复
| 2020-7-4 20:28 | 显示全部楼层
为什么要使用I2C的库函数呢

使用特权

评论回复
| 2020-7-4 20:32 | 显示全部楼层
楼主是准备做什么使用呢

使用特权

评论回复
| 2020-7-4 20:35 | 显示全部楼层
STM32F1的IIC和SPI都没有搞明白。

使用特权

评论回复
| 2020-7-4 20:42 | 显示全部楼层
https://wenku.baidu.com/view/30763b48be1e650e52ea9979.html

使用特权

评论回复
| 2020-7-4 20:46 | 显示全部楼层
这个是ST的官网例程吗

使用特权

评论回复
| 2020-7-4 20:50 | 显示全部楼层
不会用。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表