stm32f103zet6 硬件iic 用固件函数 写一个ch455g显示数字程序
时间: 2023-06-17 15:06:11 浏览: 125
STM32F103ZET6_IIC_4针OLED(IIC)_oled在正点原子32上的使用_oled_iic四针_STM32F1
5星 · 资源好评率100%
首先,需要连接好STM32F103ZET6的硬件I2C接口和CH455G的I2C接口。然后,你需要使用STM32的固件库函数来实现I2C通信。以下是一个简单的程序示例,可以向CH455G显示数字:
```
#include "stm32f10x.h" // 包含 STM32F103ZET6 的头文件
#include "stm32f10x_i2c.h" // 包含 STM32F103ZET6 的 I2C 头文件
#define I2C_SPEED 100000 // I2C 通信速率为 100kHz
#define CH455G_ADDR 0x30 // CH455G 的 I2C 地址为 0x30
void I2C_Configuration(void) {
I2C_InitTypeDef I2C_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); // 打开 I2C1 时钟
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 打开 GPIOB 时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; // 配置PB6和PB7为I2C接口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; // 复用开漏输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO 速度为 50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure);
I2C_DeInit(I2C1); // I2C1 复位
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; // I2C 模式
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; // I2C 占空比为 2
I2C_InitStructure.I2C_OwnAddress1 = 0x00; // 本机地址为 0x00
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; // 自动应答
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; // 7 位地址
I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED; // I2C 通信速率
I2C_Cmd(I2C1, ENABLE); // 打开 I2C1
I2C_Init(I2C1, &I2C_InitStructure); // 初始化 I2C1
}
void I2C_WriteByte(uint8_t addr, uint8_t data) {
while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)); // 等待 I2C 总线空闲
I2C_GenerateSTART(I2C1, ENABLE); // 发送起始信号
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); // 等待起始信号发送完成
I2C_Send7bitAddress(I2C1, addr, I2C_Direction_Transmitter); // 发送设备地址和写信号
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); // 等待设备地址发送完成
I2C_SendData(I2C1, data); // 发送数据
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); // 等待数据发送完成
I2C_GenerateSTOP(I2C1, ENABLE); // 发送停止信号
}
int main(void) {
I2C_Configuration(); // 配置 I2C
I2C_WriteByte(CH455G_ADDR, 0x8A); // 将 CH455G 的显示位置设置为第一个数字位
I2C_WriteByte(CH455G_ADDR, 0x01); // 显示数字 1
while(1);
return 0;
}
```
该程序的主要功能是将数字1显示在CH455G上。其中,`I2C_Configuration()`函数用于配置STM32的I2C接口,`I2C_WriteByte()`函数用于向CH455G发送数据。在`main()`函数中,我们首先配置I2C接口,然后向CH455G发送两个字节的数据,第一个字节是0x8A,用于设置显示位置为第一个数字位,第二个字节是0x01,用于显示数字1。
注意:以上代码仅供参考,具体实现可能需要根据你的硬件连接和具体需求进行修改。
阅读全文