GD32 iic收发数据
时间: 2024-02-17 07:28:33 浏览: 197
GD32_IIC(IO)_EEPROM.rar
GD32是一种高性能的微控制器,它通过IIC总线进行数据收发。以下是GD32 IIC收发数据的步骤:
1. 初始化IIC总线:将GPIO口配置为IIC功能,初始化IIC控制器。
2. 发送数据:将需要发送的数据放入IIC发送缓冲区,并将发送请求发送到IIC控制器。
3. 等待发送完成:等待IIC发送完成,并检查是否发送成功。
4. 接收数据:将需要接收的数据长度和接收缓冲区传递给IIC控制器,并发送接收请求。
5. 等待接收完成:等待IIC接收完成,并检查是否接收成功。
6. 处理数据:将接收到的数据从接收缓冲区读取并进行处理。
以下是GD32 IIC收发数据的示例代码:
```
/* IIC初始化 */
void IIC_Init(void)
{
GPIO_InitPara GPIO_InitStructure;
I2C_InitPara I2C_InitStructure;
RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOB, ENABLE);
RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_I2C1, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_PIN_6;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_OD;
GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_PIN_7;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_OD;
GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
GPIO_Init(GPIOB, &GPIO_InitStructure);
I2C_InitStructure.I2C_Mode = I2C_MODE_I2C;
I2C_InitStructure.I2C_OwnAddr = 0x00;
I2C_InitStructure.I2C_Ack = I2C_ACK_ENABLE;
I2C_InitStructure.I2C_AckAddr = I2C_ACKADDR_7BIT;
I2C_InitStructure.I2C_BitRate = 100000;
I2C_InitStructure.I2C_GeneralCall = I2C_GENERALCALL_DISABLE;
I2C_InitStructure.I2C_SlaveAddr = 0x00;
I2C_Init(I2C1, &I2C_InitStructure);
I2C_Enable(I2C1, ENABLE);
}
/* IIC发送函数 */
void IIC_SendData(uint8_t *buffer, uint32_t length)
{
while(length != 0)
{
I2C_DataTransmit(I2C1, *buffer++);
length--;
while(!I2C_GetBitState(I2C1, I2C_FLAG_TBE));
}
while(!I2C_GetBitState(I2C1, I2C_FLAG_BTC));
}
/* IIC接收函数 */
void IIC_ReceiveData(uint8_t *buffer, uint32_t length)
{
I2C_TargetAddressConfig(I2C1, 0x00, I2C_ACKADDR_7BIT);
I2C_DMALastTransferCmd(I2C1, ENABLE);
I2C_DMAReceiveConfig(I2C1, buffer, length);
I2C_DMAModeConfig(I2C1, I2C_DMA_RECEIVEMODE);
I2C_DMAEnable(I2C1, ENABLE);
while(!I2C_GetBitState(I2C1, I2C_FLAG_BTC));
}
```
阅读全文