【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显示 结果

显示结果

欢迎大家一起交流讨论!

相关推荐
嵌入式-老费13 小时前
esp32开发与应用(添加数据分区)
单片机·嵌入式硬件
嵌入式-老费14 小时前
esp32开发与应用(OTA升级)
嵌入式硬件
CYLAM202517 小时前
STC32G 单片机0.96“OLED 西历农历可调万年历 (1901-2100)
单片机·嵌入式硬件·stc32g·万年历·西历农历·0.96”oled 12864·4x4 矩阵键盘
Discipline~Hai17 小时前
ARM03-蜂鸣器和中断
c语言·arm开发·单片机·嵌入式硬件·嵌入式
KaifuZeng18 小时前
电源面试问题汇总一
单片机·嵌入式硬件·面试·电路
驱动探索者20 小时前
RISC-V PLIC 深度解析:从 Spec 到 Zephyr 驱动实现
单片机·嵌入式硬件·中断控制器
LCG元20 小时前
STM32 FreeRTOS 实战:任务调度 + 互斥锁 + 消息队列 + 串口命令解析器
stm32·单片机·嵌入式硬件
Hello_Damon_Nikola20 小时前
姿态式饮水量估算从原理到实战
嵌入式硬件
LCG元20 小时前
STM32 SPI Flash 读写实战:W25Q64 驱动 + FatFS 文件系统移植 + 日志存储系统
stm32·单片机·嵌入式硬件
不想学习!!21 小时前
【STM32 基础复习 01】初识 STM32F103ZET6:型号、封装、引脚编号与特殊引脚
stm32·单片机·嵌入式硬件