【STM32】I2C协议原理、HAL读写与OLED显示操作

### 文章目录

  • [@toc](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [一、I2C程序层次](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [1.1 设备间的通信方式](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [1.2 硬件原理图](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [1.3 硬件框图和软件层次](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [二、I2C 协议](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [2.1 硬件连接(一主多从)](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [2.2 数据传输 类比](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [2.3 IIC 传输数据的格式](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [2.4 IIC 总线的信号类型](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [三、IIC HAL 编程](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [3.1 STM32CubeMX 配置](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [3.2 查询方式](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [3.2.1 Master 模式函数](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [3.2.2 MEM 模式函数](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [3.3 中断方式](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [3.3.1 Master 模式函数](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [3.3.2 MEM 模式函数](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [3.3.3 DMA 模式](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [四、OLED 操作原理](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [4.1 SOC控制OLED原理框架](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [4.1.1 如何分辨 cmd /data?](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [4.1.2 显存和像素的关系](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [4.2 自动设置行列 ==> 地址模式](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [五、在OLED上显示汉字](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [5.1 取模软件使用](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [5.2 完整程序](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [5.3 部分程序](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)
  • [5.4 OLED显示 结果](#文章目录 @[toc] 一、I2C程序层次 1.1 设备间的通信方式 1.2 硬件原理图 1.3 硬件框图和软件层次 二、I2C 协议 2.1 硬件连接(一主多从) 2.2 数据传输 类比 2.3 IIC 传输数据的格式 2.4 IIC 总线的信号类型 三、IIC HAL 编程 3.1 STM32CubeMX 配置 3.2 查询方式 3.2.1 Master 模式函数 3.2.2 MEM 模式函数 3.3 中断方式 3.3.1 Master 模式函数 3.3.2 MEM 模式函数 3.3.3 DMA 模式 四、OLED 操作原理 4.1 SOC控制OLED原理框架 4.1.1 如何分辨 cmd /data? 4.1.2 显存和像素的关系 4.2 自动设置行列 ==> 地址模式 五、在OLED上显示汉字 5.1 取模软件使用 5.2 完整程序 5.3 部分程序 5.4 OLED显示 结果)

一、I2C程序层次

1.1 设备间的通信方式

  • UART(异步 全双工)& 1.1.2 I2C(同步 半双工)
UART串口 I2C 协议

1.2 硬件原理图

c 复制代码
// OLED实物图 教程见
https://blog.csdn.net/Super_Fisher_man/article/details/135613284?spm=1001.2014.3001.5501
OLED实物图 OLED原理图

1.3 硬件框图和软件层次

硬件框图
软件层次


二、I2C 协议

2.1 硬件连接(一主多从)

I2C在硬件上的接发

2.2 数据传输 类比

I2C 数据传输类比图

2.3 IIC 传输数据的格式

IIC 传输数据的格式
  • IIC 像快递系统,只负责把包裹送到指定设备;包裹里面装的是什么、怎么解释,由具体芯片的数据手册决定。

  • 拿OLED为例:S + Dev + w + 显存地址 + data0 + data1 ...

    2.4 IIC 总线的信号类型

I2C 总线的信号类型
芯片手册上的图
  • IIC 总线的 SDA 和 SCL 通常采用开漏输出结构 (Open-Drain)。设备只能主动拉低总线,不能主动输出高电平;当需要输出高电平时,设备释放总线,由上拉电阻将信号线拉高。这样可以避免多个设备同时驱动总线时产生电平冲突。详情: 【STM32】HAL库的本质 及 芯片内部GPIO模块细节
输出 0 (驱动) 输出 1 (释放)
GPIO 主动拉低 SDA/SCL GPIO 变成高阻态,由上拉电阻拉高(由外部电路决定)
  • 主从设备,任意一方 觉得要等一等,表示我这边还没准备好,都可以把 SCL (时钟)拉低;任意一方拉低,结果都是 0;

三、IIC HAL 编程

IIC_读写

3.1 STM32CubeMX 配置

  • I2C1 ==> Parameter Settings ==> GPIO Settings

3.2 查询方式

3.2.1 Master 模式函数
c 复制代码
// Master 模式函数
HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress,
uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress,
uint8_t *pData, uint16_t Size, uint32_t Timeout);
参数 说明
I2C_HandleTypeDef *hi2c 使用哪个 I2C 控制器
uint16_t DevAddress 设备地址,需要把 7 位地址左移 1 位
uint8_t *pData 数据 buffer
uint16_t Size 数据个数
uint32_t Timeout 超时时间,单位是 Tick,一般是 1ms
返回值 HAL_OK:成功HAL_ERROR:错误HAL_BUSY:总线忙HAL_TIMEOUT:超时
3.2.2 MEM 模式函数
c 复制代码
// MEM 模式函数 
HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t
MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t
MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);
参数 说明
I2C_HandleTypeDef *hi2c 使用哪个 I2C 控制器
uint16_t DevAddress 设备地址,需要把 7 位地址左移 1 位
uint16_t MemAddress 存储地址, 即 I2C 设备上的寄存器地址或存储地址
uint16_t MemAddSize 存储地址的大小,有 2 种取值: I2C_MEMADD_SIZE_8BIT:存储地址为 1 字节,就是 MemAddress 的低字节I2C_MEMADD_SIZE_16BIT:存储地址为 2 字节,先发送 MemAddress 的高字节,再发送低字节
uint8_t *pData 数据 buffer
uint16_t Size 数据个数
uint32_t Timeout 超时时间,单位是 Tick,一般是 1ms
返回值 HAL_OK:成功HAL_ERROR:错误HAL_BUSY:总线忙HAL_TIMEOUT:超时

3.3 中断方式

3.3.1 Master 模式函数
c 复制代码
// Master 模式函数
HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress,
uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress,
uint8_t *pData, uint16_t Size);

/* 主设备发送完成回调函数 */
void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c);
/* 主设备接收完成回调函数 */
void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c);
/* 出错回调函数 */
void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c)
参数 说明
I2C_HandleTypeDef *hi2c 使用哪个 I2C 控制器
uint16_t DevAddress 设备地址,需要把 7 位地址左移 1 位
uint8_t *pData 数据 buffer
uint16_t Size 数据个数
返回值 HAL_OK:成功HAL_BUSY:总线忙
3.3.2 MEM 模式函数
c 复制代码
// MEM 模式函数
HAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress,
uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t
MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);

/* MEM模式发送完成回调函数 */
void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c);
/* MEM模式接收完成回调函数 */
void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c);
/* 出错回调函数 */
void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c)
参数 说明
I2C_HandleTypeDef *hi2c 使用哪个 I2C 控制器
uint16_t DevAddress 设备地址,需要把 7 位地址左移 1 位
uint16_t MemAddress 存储地址, 即 I2C 设备上的寄存器地址或存储地址
uint16_t MemAddSize 存储地址的大小,有 2 种取值: I2C_MEMADD_SIZE_8BIT:存储地址为 1 字节,就是 MemAddress 的低字节I2C_MEMADD_SIZE_16BIT:存储地址为 2 字节,先发送 MemAddress 的高字节,再发送低字节
uint8_t *pData 数据 buffer
uint16_t Size 数据个数
返回值 HAL_OK:成功HAL_BUSY:总线忙
3.3.3 DMA 模式
  • 将中断模式中的IT改为DMA 即可;

四、OLED 操作原理

4.1 SOC控制OLED原理框架

SOC控制OLED原理框架
4.1.1 如何分辨 cmd /data?
分辨 cmd / data
4.1.2 显存和像素的关系
像素点_显存(GDDRAM)大小 显存和像素的关系
  • 写显存: ① 设置 Page n (n=0~7) ② 设置 列 m (m= 0~127) ③ 写入 1 byte 的数据

  • 一定要一个个设置吗?

4.2 自动设置行列 ==> 地址模式

页地址模式
行地址 模式
列地址模式

五、在OLED上显示汉字

5.1 取模软件使用

C 复制代码
//软件地址
通过网盘分享的文件:PCtoLCD2002.zip
链接: https://pan.baidu.com/s/1eORhBJW78vXzYZH6XJcWew?pwd=wjyf 提取码: wjyf
取模软件_PCtoLCD2022完美版
c 复制代码
坤(0) 坤(1)  // 16*16 + 16*16

{0x20,0x20,0x20,0xFF,0x20,0x20,0x00,0xF8,0x88,0x88,0xFF,0x88,0x88,0xF8,0x00,0x00},
{0x10,0x30,0x10,0x0F,0x08,0x08,0x00,0x1F,0x08,0x08,0xFF,0x08,0x08,0x1F,0x00,0x00},/*"坤",0*/

{0x20,0x20,0x20,0xFF,0x20,0x20,0x00,0xF8,0x88,0x88,0xFF,0x88,0x88,0xF8,0x00,0x00},
{0x10,0x30,0x10,0x0F,0x08,0x08,0x00,0x1F,0x08,0x08,0xFF,0x08,0x08,0x1F,0x00,0x00},/*"坤",1*/

5.2 完整程序

c 复制代码
通过网盘分享的文件:i2c_chinese.7z
链接: https://pan.baidu.com/s/1hktCwfMTZ80wHkBal4235Q?pwd=ny43 提取码: ny43

5.3 部分程序

c 复制代码
void OLED_PrintChinese(uint8_t x, uint8_t y)
{   
	extern uint8_t g_chinese_fonts[5][32];

	uint8_t page = y;
	uint8_t col  = x*8;
	
	if (y > 7 || x > 15)
			return;
	
	int i;
	for (i = 0; i < sizeof(g_chinese_fonts)/sizeof(g_chinese_fonts[0]); i++)
	{
		/* 设置位置: page,col */
    OLED_SetPosition(page, col);

		/* 发送16字节数据(汉字的上半部) */
    OLED_WriteNBytes((uint8_t*)&g_chinese_fonts[i][0], 16);

		/* 设置位置: page+1,col */
    OLED_SetPosition(page+1, col);
		
		/* 发送16字节数据(汉字的下半部) */
    OLED_WriteNBytes((uint8_t*)&g_chinese_fonts[i][16], 16);

		/* 更新下一个字符的位置:page不变,col+=16 */	
		col += 16;
	}
}
c 复制代码
// chinese_font.c
#include <stdint.h>

/* 16*16, 32byte */
uint8_t g_chinese_fonts[2][32] = {
	{0x20,0x20,0x20,0xFF,0x20,0x20,0x00,0xF8,0x88,0x88,0xFF,0x88,0x88,0xF8,0x00,0x00, 
   0x10,0x30,0x10,0x0F,0x08,0x08,0x00,0x1F,0x08,0x08,0xFF,0x08,0x08,0x1F,0x00,0x00},/*"坤",0*/

	{0x20,0x20,0x20,0xFF,0x20,0x20,0x00,0xF8,0x88,0x88,0xFF,0x88,0x88,0xF8,0x00,0x00,
	 0x10,0x30,0x10,0x0F,0x08,0x08,0x00,0x1F,0x08,0x08,0xFF,0x08,0x08,0x1F,0x00,0x00},/*"坤",1*/
};

5.4 OLED显示 结果

显示结果

欢迎大家一起交流讨论!

相关推荐
碧海银沙音频科技研究院7 小时前
基于炬芯ATS3089X的usb U盘/usb audio声卡/usb cdc虚拟串口/录音dump到本地功能实现
stm32·单片机·嵌入式硬件
CC180253944867 小时前
具有强大的图像和语音处理能力的高性能 MCU芯片ESP32-P4NRW32X
单片机·嵌入式硬件
恒锐丰科技林技术员9 小时前
EG1416 低侧栅极驱动芯片:小封装下的功率驱动利器
经验分享·嵌入式硬件·硬件工程
桀人11 小时前
I2C概念引入
stm32·单片机·嵌入式硬件
神一样的老师11 小时前
RA4M2 + AHT20 温湿度传感器实战
单片机·嵌入式硬件
我是人✓12 小时前
STM32上跑FreeRTOS:实时任务调度全解析
stm32·单片机·嵌入式硬件
HQB202614 小时前
EG1195S|屹晶微电子 120V 外置 MOS 异步降压 DC‑DC 控制器
嵌入式硬件·硬件工程
俊基科技15 小时前
A-59P 多功能语音处理模组:一芯集成 AI 降噪、消回音与波束成形,重塑全双工通话体验
嵌入式硬件·硬件开发·ai降噪·语音模块·回音消除
POMAGTOR16 小时前
硬件接口选型|磁吸式连接器原理与应用,不止磁吸充电
网络·嵌入式硬件·电脑
2501_9226395816 小时前
率能半导体 SS6226双通道直流电机驱动芯片:7.2V/1.4A双路,覆盖玩具、小家电、直流有刷电机三大应用场景
单片机·嵌入式硬件·硬件工程