gd32 i2c从机代码
时间: 2025-01-14 20:57:18 浏览: 96
### GD32 I2C从机模式代码示例
对于GD32微控制器,在I2C从机模式下的操作主要依赖于初始化配置以及中断处理程序来响应主机请求。下面展示了一个基本的实现方式,该实例展示了如何设置GD32作为I2C从设备并接收数据。
#### 初始化I2C外设为从模式
为了使能I2C接口工作在从属模式下,需要正确配置相应的寄存器参数:
```c
#include "gd32f1x0.h"
void i2c_slave_init(void){
/* 使能GPIOA和I2C时钟 */
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_I2C);
/* 配置PA6/7为复用推挽输出 */
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_OTYPE_OD, GPIO_PIN_6 | GPIO_PIN_7);
gpio_output_options_set(GPIOA, GPIO_OSPEED_50MHZ, GPIO_OPMODE_RESET, GPIO_PIN_6 | GPIO_PIN_7);
/* 设置I2C地址 */
i2c_addressing_mode_config(I2Cx, I2C_ADDRESSINGMODE_7BIT); // 使用7位寻址模式
i2c_ack_config(I2Cx, I2C_ACK_ENABLE); // 开启应答功能
i2c_dual_address_mode_config(I2Cx, DISABLE); // 关闭双地址模式
i2c_own_address_set(I2Cx, I2C_ADDFORMAT_7BITS, SLAVE_ADDRESS7); // 设定自己的7位硬件地址
/* 启动I2C*/
i2c_enable(I2Cx);
}
```
此部分代码完成了对I2C端口的基本设定,并指定了本节点所使用的唯一7-bit地址[^1]。
#### 处理接收到的数据
当有新的数据到来时会触发中断事件,因此还需要编写对应的ISR函数用于捕获这些信息:
```c
uint8_t received_data;
void I2C_EV_IRQHandler(void){
if(i2c_interrupt_flag_get(I2Cx, I2C_INT_FLAG_ADDR)){
i2c_clear_interrupt_flag(I2Cx, I2C_INT_FLAG_ADDR);
while(!i2c_interrupt_flag_get(I2Cx, I2C_INT_FLAG_RBNE));
received_data = i2c_receive_by_address(I2Cx, I2C_RECEIVE_DATA7_FORMAT);
}
}
int main(){
i2c_slave_init();
nvic_irq_enable(I2Cx_EV_IRQn, 0, 0);
while(1){
// 主循环可以在此处加入其他任务...
}
}
```
上述代码片段实现了简单的I2C从机逻辑,其中包含了对接收缓冲区非空中断标志(`RBNE`) 的检测以确保能够及时读取传入的信息。
阅读全文
相关推荐


















