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

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


✨如果不知道如何使用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值