[STM32] STM32 移植 U8g2库

前言

  • 开发平台:Keil + 标准库
  • 硬件平台:STM32F103RCT6
  • 显示器件:OLED 128 * 64(中景园) 驱动SH1106
  • 通信方式:硬件SPI

1. 准备

  • u8g2代码获取:链接
  • 确保OLED屏和板卡正确连接

2. 移植步骤

2.1 建立有效的通信

  OLED支持多种通信方式(80xx、I2C和SPI),从速度来说,80xx > SPI > I2C。考虑引脚数量问题这里选择了硬件SPI。
  硬件SPI的配置使用了CubeMx,根据生成的LL库代码顺序用标准库对SPI进行初始化。我使用了SPI2,初始化代码如下:

    /*OLED管脚初始化     SPI2初始化*/
    {
   
        SPI_InitTypeDef SPI_InitStruct;
        GPIO_InitTypeDef GPIO_InitStruct;

       	RCC_APB2PeriphClockCmd(RCC_OLED, ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);

        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; 
        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
        GPIO_Init(OLED_PORT, &GPIO_InitStruct);

        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; 
        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_14;
        GPIO_Init(OLED_PORT, &GPIO_InitStruct);

        SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
        SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
        SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
        SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;
        SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;
        SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;
        SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
        SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;
        SPI_InitStruct.SPI_CRCPolynomial 
  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
你好!对于将 U8g2 移植STM32 上,你需要按照以下步骤进行操作: 1. 首先,确保你已经安装了适当的开发环境,包括 STM32CubeMX 和 STM32Cube HAL 。如果没有,请先下载和安装它们。 2. 打开 STM32CubeMX,并创建一个新的工程。选择适合你的 STM32 芯片型号,并配置所需的引脚和外设。 3. 在 "Middleware" 部分中,找到 "Graphics" 并选择 "U8g2"。 4. 根据你的需求选择所需的显示屏控制器和接口类型。U8g2 支持多种不同的控制器和接口。 5. 在 "Configuration" 选项中,配置 U8g2 的其他参数,比如显示屏分辨率、字体等。 6. 生成代码并打开工程。 7. 在生成的代码中,找到 "main.c" 文件,并添加以下代码来初始化 U8g2 : ```c #include "u8g2.h" u8g2_t u8g2; int main(void) { // 初始化代码 u8g2_Setup_<Controller>_<Interface>_u8g2(&u8g2, <rotation>, <u8x8_byte_fn>, <u8x8_gpio_and_delay_fn>); u8g2_InitDisplay(&u8g2); // 其他初始化代码 while (1) { // 显示内容更新代码 } } ``` 注意替换 `<Controller>` 和 `<Interface>` 为你选择的控制器和接口类型。`<rotation>` 是显示屏旋转角度,`<u8x8_byte_fn>` 和 `<u8x8_gpio_and_delay_fn>` 是用于与硬件通信的函数指针。 8. 在 `while (1)` 循环中,你可以使用 U8g2 提供的函数来更新显示屏上的内容。 这只是一个简单的示例,你可能还需要根据具体需求进行其他配置和修改。请参考 U8g2 的文档和示例代码来了解更多细节。希望对你有帮助!如果你有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Haley__xu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值