数码之家

 找回密码
 立即注册
搜索
查看: 1677|回复: 7

[STM] 移植好U8g2图形库的STM32F407标准库工程模板,0.96寸OLED驱动程序

[复制链接]
发表于 2023-6-12 19:34:59 | 显示全部楼层 |阅读模式
移植好U8g2图形库的STM32F407标准库工程模板,用的0.96寸OLED屏(SSD1306),用硬件IIC驱动。

花了一晚上时间去移植。开发板主控MCU用的是STM32F407VET6,I2C接口用I2C1,SCL接PB6,SDA接PB7。


U8g2简介
U8g2图形库是一个用于嵌入式设备的单色图形库,支持多种单色OLED和LCD显示控制器,如SSD1306,ST7920等。U8g2库可以从Arduino IDE的库管理器安装,也可以移植到STM32等平台。U8g2库支持三种绘图模式:全屏缓存模式,页面缓存模式和U8x8字符模式。U8g2库的使用需要选择合适的构造函数,初始化显示器,设置引脚号,编写回调函数和绘图指令。
U8g2图形库的优点是可以使用多种字体,支持中文显示,提供丰富的图形程序,如线条,框,圆,位图等。U8g2图形库的缺点是需要占用一定的内存空间,速度较慢,不支持无控制器的显示屏。U8g2图形库的应用场景有:显示传感器数据,制作时钟,显示菜单,显示动画等。U8g2图形库是一个功能强大,兼容性好,易于使用的单色图形库。

效果图

关于晶振的问题
我晶振用的8Mhz的,时钟树配置那PLL参数我修改过,使MCU工作主频168Mhz,如果换用其他频率的晶振需要修改参数,具体怎么改自行百度。

修改的地方如下:
stm32f4xx.h 文件的137行。

#define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
// 这里的8000000改成你的晶振频率,单位Hz

system_stm32f4xx.c 文件的364行和394行。

#if defined(STM32F40_41xxx) || defined(STM32F427_437xx) || defined(STM32F429_439xx) || defined(STM32F401xx) || defined(STM32F469_479xx)
/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
#define PLL_M      4
// 这里4对应下面时钟树图片中的 /M 的 /4

#if defined (STM32F40_41xxx)
#define PLL_N      168
// 这里168对应下面时钟树图片中的 *N 的 x168





元件购买地址代码
完整工程文件下载:https://url.zeruns.tech/JUoKJ    提取码:t6wt



开源项目推荐推荐阅读

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
发表于 2023-6-12 20:01:27 | 显示全部楼层
工作好评,下载地址太坑...
回复 支持 反对

使用道具 举报

发表于 2023-6-12 21:44:03 | 显示全部楼层
本帖最后由 inthsunshine 于 2023-6-12 21:46 编辑

还要除以P,才是SYSCLK

PLL_N只能取[192,432]之间,约束比较多,需要组合成合法的分频比
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-12 21:56:50 | 显示全部楼层
inthsunshine 发表于 2023-6-12 21:44
还要除以P,才是SYSCLK

PLL_N只能取[192,432]之间,约束比较多,需要组合成合法的分频比

实测PLL_N取168没问题,标准库和HAL库里都没问题
回复 支持 反对

使用道具 举报

发表于 2023-6-13 10:34:04 | 显示全部楼层
本帖最后由 inthsunshine 于 2023-6-13 10:52 编辑

zeruns 发表于 2023-6-12 21:56
实测PLL_N取168没问题,标准库和HAL库里都没问题

我重新看了下407手册,PLL_N范围是50-432, 所以你用168没问题;  之前我用的F402是192-432,想当然认为F4的都一样,其实不是,大意了

PS: 不但PLL_N有取值范围,VCO输出频率也有要求,F407是100M-432M, 而F402是192M-432M

此外,PLL输入频率(HSE/PLL_M或者HSI/PLL_M)要设在1M-2MHz之间

时钟设置限制蛮多的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-13 12:57:54 | 显示全部楼层
inthsunshine 发表于 2023-6-13 10:34
zeruns 发表于 2023-6-12 21:56
实测PLL_N取168没问题,标准库和HAL库里都没问题
我重新看了下407手册,PLL ...

学到了,谢谢。
VCO是什么?为什么PLL输入频率要在1-2M之间
回复 支持 反对

使用道具 举报

发表于 2023-6-13 22:41:17 | 显示全部楼层
本帖最后由 inthsunshine 于 2023-6-13 22:44 编辑
zeruns 发表于 2023-6-13 12:57
学到了,谢谢。
VCO是什么?为什么PLL输入频率要在1-2M之间

VCO就是锁相环里的压控振荡器



参考手册在解释PLL_M时有提到
文中写的是1-2M,应该是笔误,毕竟输入不会才1Hz, 应该是1M-2MHz




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 1家元 +20 收起 理由
zeruns + 20 精彩回帖

查看全部打赏

回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-1 12:13 , Processed in 0.218400 second(s), 10 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表