GD32F103软件模拟IIC向器件发送多个字节数据
时间: 2023-08-10 15:08:55 浏览: 46
以下是使用软件模拟IIC向器件发送多个字节数据的示例代码:
```c
#define I2C_SCL_PIN GPIO_PIN_10
#define I2C_SDA_PIN GPIO_PIN_11
#define I2C_SCL_PORT GPIOB
#define I2C_SDA_PORT GPIOB
#define I2C_SCL_HIGH() HAL_GPIO_WritePin(I2C_SCL_PORT, I2C_SCL_PIN, GPIO_PIN_SET)
#define I2C_SCL_LOW() HAL_GPIO_WritePin(I2C_SCL_PORT, I2C_SCL_PIN, GPIO_PIN_RESET)
#define I2C_SDA_HIGH() HAL_GPIO_WritePin(I2C_SDA_PORT, I2C_SDA_PIN, GPIO_PIN_SET)
#define I2C_SDA_LOW() HAL_GPIO_WritePin(I2C_SDA_PORT, I2C_SDA_PIN, GPIO_PIN_RESET)
#define I2C_SDA_READ() HAL_GPIO_ReadPin(I2C_SDA_PORT, I2C_SDA_PIN)
void I2C_Delay(void)
{
uint16_t i = 50;
while (i--)
{
__NOP();
__NOP();
}
}
void I2C_Start(void)
{
I2C_SDA_HIGH();
I2C_SCL_HIGH();
I2C_Delay();
I2C_SDA_LOW();
I2C_Delay();
I2C_SCL_LOW();
}
void I2C_Stop(void)
{
I2C_SDA_LOW();
I2C_Delay();
I2C_SCL_HIGH();
I2C_Delay();
I2C_SDA_HIGH();
I2C_Delay();
}
uint8_t I2C_SendByte(uint8_t data)
{
uint8_t i = 8;
uint8_t ack = 0;
while (i--)
{
if (data & 0x80)
{
I2C_SDA_HIGH();
}
else
{
I2C_SDA_LOW();
}
I2C_Delay();
I2C_SCL_HIGH();
I2C_Delay();
I2C_SCL_LOW();
I2C_Delay();
data <<= 1;
}
I2C_SDA_HIGH();
I2C_Delay();
I2C_SCL_HIGH();
I2C_Delay();
ack = I2C_SDA_READ();
I2C_SCL_LOW();
I2C_Delay();
return ack;
}
void I2C_SendData(uint8_t addr, uint8_t *data, uint16_t size)
{
I2C_Start();
I2C_SendByte(addr << 1);
while (size--)
{
I2C_SendByte(*data++);
}
I2C_Stop();
}
```
使用示例:
```c
uint8_t data[] = {0x12, 0x34, 0x56};
I2C_SendData(0x50, data, sizeof(data));
```
其中,`I2C_SCL_PIN`和`I2C_SDA_PIN`分别为IIC时钟线和数据线的引脚号,`I2C_SCL_PORT`和`I2C_SDA_PORT`分别为时钟线和数据线所在的GPIO端口。`I2C_Delay()`函数用于延时,根据实际情况可以进行适当调整。`I2C_SendData()`函数用于向指定地址的器件发送数据。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)