【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