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

显示结果

欢迎大家一起交流讨论!

相关推荐
wohoo_wangzi3 小时前
苏州晟雅泰电子:关于W25Q128JVSIQ这个芯片物料的参数,规格及应用领域
嵌入式硬件
科芯创展5 小时前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件
集芯微电科技有限公司5 小时前
四通道2A输出集成功率电感降压模块专为紧凑型方案设计
人工智能·单片机·嵌入式硬件·生成对抗网络·计算机外设
踏着七彩祥云的小丑5 小时前
嵌入式测试学习第 37 天:异常场景测试:断电、拔插、干扰、非法指令
单片机·嵌入式硬件·学习
望眼欲穿的程序猿6 小时前
读取芯片内部温度传感器
嵌入式硬件·rust
望眼欲穿的程序猿6 小时前
ADC 模拟电压采集
嵌入式硬件·rust
IT方大同6 小时前
(嵌入式操作系统)信号量
嵌入式硬件·c#
Industio_触觉智能6 小时前
瑞芯微RK3576落地智能农业新生态,鸿蒙农机平板应用场景拓展
嵌入式硬件·openharmony·开源鸿蒙·核心板·鸿蒙开发板·rk3576·农机平板
意法半导体STM326 小时前
【官方原创】如何为STM32CubeMX2配置Visual Studio Code配置方案
vscode·stm32·单片机·嵌入式硬件·策略模式·stm32cubemx·嵌入式开发