【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时钟频率运行。
硬件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);
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;
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_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);
}
main程序代码
#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:
提取码: 2tke