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

【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时钟频率运行。

【WCH】CH32F203基于硬件I2C + SSD1306 OLED跑图形库_第1张图片

  • 需要注意的是,时钟频率以144MHz运行,驱动OLED显示没有问题,但是串口打印输出会是乱码,96MHz不会出现串口乱码问题。
    【WCH】CH32F203基于硬件I2C + SSD1306 OLED跑图形库_第2张图片

  • 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

你可能感兴趣的:(WCH,-,CH32F203系列,CH32F203,ssd1306,图形库)