stm32f103c8t6 I2COLED
时间: 2023-07-23 21:12:40 浏览: 216
stm32f103c8t6接0.96寸OLED屏, 包含原理图和PCB,不含程序
5星 · 资源好评率100%
好的,以下是在STM32F103C8T6上使用I2C OLED的步骤:
1. 首先,您需要在STM32CubeMX中打开您的项目,并在“Pinout”选项卡中配置I2C和OLED引脚。选中SCL和SDA引脚,将其配置为I2C模式,并设置GPIO的输入/输出模式和速度。同时,您需要根据您的OLED型号选择正确的引脚并将其配置为输出模式。
2. 然后,在“Clock Configuration”选项卡中,启用I2C时钟,并设置I2C时钟的频率。
3. 接下来,在“Configuration”选项卡中,选择I2C外设,并根据您的需求进行配置。例如,您可以设置I2C的工作模式、地址长度、时钟占空比等。同时,您需要在代码中配置OLED的I2C地址和屏幕大小等参数。
4. 在代码中,您需要使用HAL库或其他库来初始化I2C外设,并设置I2C和OLED的参数。例如,您可以使用以下代码初始化I2C1和OLED:
```
I2C_HandleTypeDef hi2c1;
void MX_I2C1_Init(void)
{
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 100000;
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c1.Init.OwnAddress1 = 0;
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c1.Init.OwnAddress2 = 0;
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
if (HAL_I2C_Init(&hi2c1) != HAL_OK)
{
Error_Handler();
}
}
#define OLED_I2C_ADDR 0x78
#define OLED_WIDTH 128
#define OLED_HEIGHT 64
void OLED_Init(void)
{
HAL_Delay(100);
OLED_WR_Byte(0xAE, OLED_CMD); //关闭显示
OLED_WR_Byte(0xD5, OLED_CMD); //设置时钟分频因子,震荡频率
OLED_WR_Byte(0x80, OLED_CMD); //[3:0],分频因子;[7:4],震荡频率
OLED_WR_Byte(0xA8, OLED_CMD); //设置驱动路数
OLED_WR_Byte(0X3F, OLED_CMD); //默认0X3F(1/64)
OLED_WR_Byte(0xD3, OLED_CMD); //设置显示偏移
OLED_WR_Byte(0X00, OLED_CMD); //默认为0
OLED_WR_Byte(0x40, OLED_CMD); //设置显示开始行 [5:0],行数.
OLED_WR_Byte(0x8D, OLED_CMD); //电荷泵设置
OLED_WR_Byte(0x14, OLED_CMD); //bit2,开启/关闭
OLED_WR_Byte(0x20, OLED_CMD); //设置内存地址模式
OLED_WR_Byte(0x02, OLED_CMD); //[1:0],00,列地址模式;01,行地址模式;10,页地址模式;默认10;
OLED_WR_Byte(0xA1, OLED_CMD); //段重定向设置
OLED_WR_Byte(0xC0, OLED_CMD); //设置COM扫描方向;默认为逆向
OLED_WR_Byte(0xDA, OLED_CMD); //设置COM硬件引脚配置
OLED_WR_Byte(0x12, OLED_CMD); //[5:4]配置
OLED_WR_Byte(0x81, OLED_CMD); //对比度设置
OLED_WR_Byte(0xEF, OLED_CMD); //1~255;默认0X7F (亮度设置,越大越亮)
OLED_WR_Byte(0xD9, OLED_CMD); //设置预充电周期
OLED_WR_Byte(0xf1, OLED_CMD); //[3:0],PHASE 1;[7:4],PHASE 2;
OLED_WR_Byte(0xDB, OLED_CMD); //设置VCOMH 电压倍率
OLED_WR_Byte(0x40, OLED_CMD); //设置VCOMH 电压倍率
OLED_WR_Byte(0xA4, OLED_CMD); //全局显示开启;bit0:1,开启;0,关闭;(白屏/黑屏)
OLED_WR_Byte(0xA6, OLED_CMD); //设置显示方式;bit0:1,反相显示;0,正常显示
OLED_WR_Byte(0xAF, OLED_CMD); //开启显示
}
```
5. 接下来,您可以使用HAL库或其他库中提供的函数来向OLED写入数据。例如,您可以使用以下代码向OLED写入一个字节的数据:
```
HAL_I2C_Mem_Write(&hi2c1, OLED_I2C_ADDR, OLED_CMD, 1, &data, 1, 10);
```
6. 最后,不要忘记在使用I2C和OLED外设后及时释放总线,以便其他设备可以访问它。例如,您可以使用以下代码释放I2C总线:
```
HAL_I2C_ReleaseBus(&hi2c1);
```
希望这些步骤可以帮助您在STM32F103C8T6上使用I2C OLED。
阅读全文