【WCH】CH32F203基于硬件I2C + SSD1306 OLED跑图形库

news/2024/10/18 1:36:41/

【WCH】CH32F203基于硬件I2C + SSD1306 OLED跑图形库


  • 🎈基于STM32图形库开源项目地址:https://github.com/hello-myj/stm32_oled
  • 📌相关篇《【WCH】CH32F203硬件I2C驱动SSD1306 OLED》
  • 📍《【WCH】CH32F203软件I2C驱动SSD1306 OLED》
  • 🧲《【WCH】基于STM32F1标准库程序烧录到CH32F203中运行方法》

✨如果不知道如何使用stm32标准库程序烧录到CH32F203当中,请看上面的相关篇内容。

  • ✨原工程是基于STM32f 103的工程,只是顺手匹配到CH32F203上面来运行。
  • 🔖工程已经添加了96MHz和144MHz时钟配置以及相关时钟初始化函数,默认以144MHz时钟频率运行。

在这里插入图片描述

  • 🔰需要注意的是,时钟频率以144MHz运行,驱动OLED显示没有问题,但是串口打印输出会是乱码,96MHz不会出现串口乱码问题。
    在这里插入图片描述

  • 🔨DIY用户可以根据个人需求自行添加图形显示函数。

📑硬件I2C引脚

  • 🔖工程是基于硬件I2C接口驱动显示的,原作者在程序重预留有SPI接口,个人没有进行测试。
		#define IIC_GPIOX                		GPIOB#define IIC_SCL_Pin_X						GPIO_Pin_8#define IIC_SDA_Pin_X        				GPIO_Pin_9

⛳个人移植注意事项

  • ⚡除了需要参考上面相关篇内容意外,本项目工程在I2C引脚初始函数中,需要添加相关的引脚重映射函数,不然不会显示,这一点,折腾了好久才发现。
void I2C_Configuration(void)
{I2C_InitTypeDef  I2C_InitStructure;GPIO_InitTypeDef  GPIO_InitStructure;RCC_APB1PeriphClockCmd(IIC_RCC_APB1Periph_I2CX, ENABLE);RCC_APB2PeriphClockCmd(IIC_RCC_APB2Periph_GPIOX, ENABLE);/*WCH  CH32F203必须加上下面的内容*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);GPIO_PinRemapConfig(GPIO_Remap_I2C1, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);GPIO_InitStructure.GPIO_Pin =  IIC_SCL_Pin_X | IIC_SDA_Pin_X;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;//I2C必须开漏输出GPIO_Init(IIC_GPIOX, &GPIO_InitStructure);I2C_DeInit(I2CX);I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_16_9;I2C_InitStructure.I2C_OwnAddress1 = 0x30;//主机的I2C地址,随便写I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;I2C_InitStructure.I2C_ClockSpeed = 400000;I2C_Cmd(I2CX, ENABLE);I2C_Init(I2CX, &I2C_InitStructure);
//	WaitTimeMs(200);
}

📝main程序代码

/********************************************************************************* @file    OLED_I2C.c* @author  fire* @version V1.0* @date    2014-xx-xx* @brief   128*64点阵的OLED显示测试工程,仅适用于SD1306驱动IIC通信方式显示屏******************************************************************************* @attention** 实验平台:野火 ISO STM32 开发板 * 论坛    :http://www.firebbs.cn* 淘宝    :https://fire-stm32.taobao.com*********************************************************************************/ #include "stm32f10x.h"
#include "delay.h"
#include "bsp_usart.h"
#include "test.h"
#include "draw_api.h"
#include "stdio.h"int main(void)
{/* 嵌套向量中断控制器组选择 */NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);DelayInit();USART_Config();Usart_SendString( USART1,"Hello World! \r\n");InitGraph();	Usart_SendString( USART1,"Init! \r\n");while(1){demo();	}
}

📚工程源码


链接: https://pan.baidu.com/s/1nUTlwYkFpEuE2mornxeJbw
提取码: 2tke

http://www.ppmy.cn/news/327773.html

相关文章

SuperIo-Nct6106d

SuperIo的调试 SuperIo简称SIO,是一款Lpc设备芯片,支持多接口扩展. 文章目录 SuperIo的调试SIO 包含哪些功能?如何通过Lpc来初始化SIO?Global Controller RegisterUART Func SIO 包含哪些功能? 虽不同款芯片支持的功能可能不尽相同,但是大体流程和基本功能还是很相近的,下面…

D17 K108-K161

K108 1.Array对象属性 2.定义和用法 3.push&#xff08;&#xff09; 该方法可以向数组的末尾添加一个或多个元素&#xff0c;并返回数组的新的长度 1&#xff09;可以将要添加的元素作为方法的参数传递 这些元素将自动添加到数组的末尾 <script>…

Python函数的默认参数和关键字参数(通过故事来学习)

曾经有一个小企鹅&#xff0c;他是一位烤饼师。他喜欢为他的朋友制作各种口味的烤饼。有些朋友只喜欢单一的口味&#xff0c;有些则喜欢在烤饼上加一些额外的材料。 有一天&#xff0c;他遇到了一只聪明的狐狸。狐狸告诉小企鹅可以使用可变参数来处理不同数量的口味和额外材料…

SCT2601TVBR、LMR16006XDDCR、MP2456GJ-Z参数

SCT2601TVBR P2P LMR16006XDDCR和MP2456GJ-Z SCT2601TVBR参数如下&#xff1a; 宽输入范围&#xff1a;4.5V-60V 高达0.6A的连续输出电流 0.765V2.5%反馈参考电压 集成500mΩ高压侧MOSFET 低静态电流为80uA 轻负载下的脉冲跳过模式&#xff08;PSM&#xff09; 最小接通…

组织列表-python

在你创建的列表中&#xff0c;元素的排列顺序常常是无法预测的&#xff0c;因为你并非总能控制用户提供数据的顺序。这虽然在大多数情况下都是不可避免的&#xff0c;但你经常需要以特定的顺序呈现信息。有时候&#xff0c;你希望保留列表元素最初的排列顺序&#xff0c;而有时…

【uni-app】使用uni-app实现简单的登录注册功能

文章目录 前言一、页面布局二、注册页面1.注册接口使用2.注册成功提示3.注册成功页面跳转4.完整代码 三、登录页面1.登录接口使用2.本地存储使用3.完整代码 总结 前言 大家好&#xff0c;今天和大家分享一下如何在uni-app中实现简单的登录注册功能。 首先你需要掌握一下知识点…

使用AIGC工具巧用Linux系统

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

【LIN通讯出现问题】

LIN信号发出了&#xff0c;但是没有收到响应的原因 如果你发送了LIN&#xff08;局域网互连&#xff09;信号&#xff0c;但没有收到响应&#xff0c;可能有以下几个原因&#xff1a; 线路故障&#xff1a;检查信号线路是否连接正确&#xff0c;可能存在接触不良、开路或短路等…