CH592
文章平均质量分 54
问了就是很菜
这个作者很懒,什么都没留下…
展开
-
i2c_slave_cb_register(&slave_user);假如此时是接收数据那 这里的&slave_user是什么
是slave_user结构体的地址,传递这个地址给后,I2C 驱动就知道当接收到数据时,应该调用slave_user中定义的on_receive函数(即),实现从设备数据接收的处理。原创 2024-09-07 11:33:19 · 230 阅读 · 0 评论 -
结构体的 定义和声明
使用提高了代码的可读性,明确了结构体成员的含义。使初始化顺序无关紧要,更灵活。可以部分初始化结构体成员,避免不必要的赋值。降低了顺序相关错误的风险。这是 C 语言中初始化结构体成员的常见好习惯,特别是在结构体包含多个成员或多个函数指针时。原创 2024-09-07 11:30:43 · 416 阅读 · 0 评论 -
i2c_on_slave_transmit_user是一个函数 不应该加上()吗
函数指针本质上保存了某个函数的地址,所以你可以通过它来调用这个函数。调用函数指针时也要加上。是一个函数名,如果你想直接调用这个函数,应该加上。原创 2024-09-07 11:08:36 · 138 阅读 · 0 评论 -
slave_cb->on_transmit 中 ->是什么意思
是通过结构体指针slave_cb访问成员,它指向了一个处理I2C数据发送的函数。在这个例子中,它最终指向并调用了函数。原创 2024-09-07 11:06:48 · 256 阅读 · 0 评论 -
I2C 事件中断有哪些
I2C 事件中断是指 I2C 硬件在发生特定事件时触发的中断。不同的 I2C 事件会影响通信过程,这些事件可以在 I2C 状态寄存器中监测。通常,这些事件与 I2C 总线的状态变化有关,例如生成START、接收ACK、完成数据传输等。原创 2024-09-06 10:30:07 · 733 阅读 · 0 评论 -
I2C_FLAG &= FLAG_Mask;
在函数中使用FLAG_Mask对I2C_FLAG进行掩码操作的目的是确保只保留感兴趣的标志位,而忽略其他不相关的位。让我们具体看看FLAG_Mask为0x00FFFFFFFLAG_Mask。原创 2024-09-03 16:43:27 · 255 阅读 · 0 评论 -
i2creg = I2C_FLAG >> 28作用
这个逻辑是基于以下几个假设: 1. 标志位掩码 在 `SR1` 和 `SR2` 寄存器的位定义中具有不同的高位模式。2. 寄存器偏移:`SR1` 和 `SR2` 寄存器的地址偏移量不同,这使得你可以通过计算寄存器地址来确定标志位的寄存器。这个技巧的背景是寄存器标志位的掩码值在位掩码定义中已经进行了编码,其中高 4 位(即右移 28 位后的结果)指示了标志位属于哪个寄存器。假设 `I2C_FLAG` 是 `0x10000040`,这意味着标志位属于 `SR1` 寄存器。标志位和寄存器的映射。原创 2024-09-03 16:37:54 · 153 阅读 · 0 评论 -
if(((*(__IO uint32_t *)i2cxbase) & I2C_FLAG) != (uint32_t)RESET) 分析下这行代码
1. `(__IO uint32_t *)i2cxbase` • `(__IO uint32_t *)` 是一个类型转换,将 `i2cxbase` 地址转换为一个指向 32 位无符号整数(`uint32_t`)的指针。• 如果 `((*(__IO uint32_t *)i2cxbase) & I2C_FLAG)` 不等于 `0`,表示在读取的寄存器值中 `I2C_FLAG` 掩码对应的位被设置了。这实际上是读取 I2C 的状态寄存器 `SR1` 或 `SR2` 的值。原创 2024-09-03 15:44:16 · 276 阅读 · 0 评论 -
基地址和偏移量用于定位寄存器 而掩码则是寄存器内部的地址
基地址(BA_I2C)定义了 I2C 外设的起始地址。偏移量(如0x14)用于定位具体的寄存器(如SR1)相对于基地址的地址位置。通过基地址加上偏移量,我们可以计算出该寄存器的实际内存地址。BA_I2C0x14SR1掩码(如0x00000001)用于在寄存器的值中访问特定位。掩码通常通过位运算(如等)来检查、设置或清除寄存器中的某个位。原创 2024-09-03 15:25:25 · 271 阅读 · 0 评论 -
基地址和偏移量与寄存器某一位bit的关系
是 I2C 状态寄存器 1(SR1) 中的一个标志位。寄存器与偏移量 假设 I2C 外设基地址 `BA_I2C` 为 `0x40004800`,在这个基地址的基础上,各寄存器的偏移量如下: • 状态寄存器 1(SR1) 的偏移量:`0x14` • 状态寄存器 2(SR2) 的偏移量:`0x18` `I2C_FLAG_SB` 的解释 `I2C_FLAG_SB`(`0x10000001`)实际上是一个 32 位值,其中: • 高 4 位(`0x1`)指定寄存器类型或组。原创 2024-09-03 14:41:08 · 369 阅读 · 0 评论 -
FLAG_Mask=0x00FFFFFF, I2C_FLAG &= FLAG_Mask的意义
通过与操作符,所有不在FLAG_Mask掩码范围内的位(高 8 位)都被置为 0,而保留了低 24 位。原创 2024-09-03 13:47:05 · 319 阅读 · 0 评论 -
CH592 UART收发数据 FIFO THR TSR
在数据发送过程中,FIFO(First In, First Out)缓冲区起着重要的作用,主要用于缓冲待发送的数据,以提高数据传输的效率和稳定性。原创 2024-08-07 11:23:33 · 202 阅读 · 0 评论