GD32F303 页写AT24C16
时间: 2024-01-14 16:03:07 浏览: 77
I2C驱动AT24C16
这是一段使用GD32F303向AT24C16写入数据的代码,仅供参考:
```c
#include "gd32f30x.h"
#define I2C_SCL_PIN GPIO_PIN_6
#define I2C_SDA_PIN GPIO_PIN_7
#define I2C_GPIO_PORT GPIOB
#define I2C_GPIO_CLK RCU_GPIOB
#define I2C_GPIO_AF GPIO_AF_1
#define I2C_GPIO_SPEED GPIO_SPEED_50MHZ
#define I2C_WRITE_ADDR 0xA0
void i2c_gpio_init(void)
{
rcu_periph_clock_enable(I2C_GPIO_CLK);
gpio_init(I2C_GPIO_PORT, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ, I2C_SCL_PIN | I2C_SDA_PIN);
gpio_pin_af_config(I2C_GPIO_PORT, I2C_SCL_PIN | I2C_SDA_PIN, I2C_GPIO_AF);
}
void i2c_config(void)
{
i2c_deinit(I2C0);
i2c_clock_config(I2C0, 400000, I2C_DTCY_2);
i2c_mode_addr_config(I2C0, I2C_I2CMODE_ENABLE, I2C_I2CMODE_ADDR_7BIT);
i2c_ack_config(I2C0, I2C_ACK_ENABLE);
i2c_enable(I2C0);
}
void i2c_write_byte(uint8_t addr, uint8_t data)
{
i2c_ackpos_config(I2C0, I2C_ACKPOS_NEXT);
i2c_master_trn_write(I2C0, I2C_WRITE_ADDR, &addr, 1, I2C_SEND_START);
i2c_master_trn_write(I2C0, data, &data, 1, I2C_SEND_STOP);
}
int main(void)
{
i2c_gpio_init();
i2c_config();
uint8_t addr = 0x00;
uint8_t data = 0x55;
i2c_write_byte(addr, data);
while(1);
}
```
这段代码使用了GD32F303的I2C0模块向AT24C16写入1个字节的数据。在代码中,首先定义了I2C的GPIO引脚、速度等信息,并在 `i2c_gpio_init()` 函数中进行了初始化。然后,在 `i2c_config()` 函数中进行了I2C模块的初始化和配置,包括I2C总线时钟、地址模式、应答等。
最后,在 `main()` 函数中,调用了 `i2c_write_byte()` 函数,向AT24C16指定地址写入1个字节的数据。
需要注意的是,这段代码仅供参考,实际项目中需要根据具体情况进行修改和调整。
阅读全文