在线时间315 小时
UID2083020
ST金币1929
蝴蝶豆85
注册时间2018-4-25
该用户从未签到
金牌会员
- 最后登录
- 2021-3-19
|
最近需要用到I2C控制OLED,想先用硬件I2C试试,这样方便一点。用的是OLED商家的代码,比较简单。
I2C1设置为快速模式,400K。
main函数里只写了初始化和一个显示代码。
- MX_GPIO_Init();
- MX_I2C1_Init();
- /* USER CODE BEGIN 2 */
- OLED_Init();
- /* USER CODE END 2 */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- HAL_Delay(10);//延时10毫秒
- OLED_ItoC_Show(34,5,debug1,16);//显示获取的I2C数据
- debug1++;
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- }
复制代码
要注意I2C的SCL,SDA IO口是否一致
- //初始化SSD1306
- void OLED_Init(void)
- {
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9|GPIO_PIN_10, GPIO_PIN_SET);
-
- HAL_Delay(800);//必须要延时
复制代码
用这个HAL库函数(HAL_I2C_Mem_Write)进行I2C的写入操作
- /*
- * 函数功能: 通过硬件I2C向OLED写入命令或数据
- * 输入参数: dat 数据,cmd 命令
- * 返 回 值: 无
- * 说 明:无
- */
- void OLED_WR_Byte(unsigned char dat,unsigned char cmd)
- {
- if(cmd) {HAL_I2C_Mem_Write(&hi2c1,OLED_SLAVE_ADDRESS,OLED_dat_ADDRESS,I2C_MEMADD_SIZE_8BIT,&dat,1,I2C2_TIMEOUT_MAX);}
- else {HAL_I2C_Mem_Write(&hi2c1,OLED_SLAVE_ADDRESS,OLED_cmd_ADDRESS,I2C_MEMADD_SIZE_8BIT,&dat,1,I2C2_TIMEOUT_MAX);}
- }
复制代码
|
|