[STM32L0] STM32L073实现丝滑的滚时钟与SHT30温湿度计

[复制链接]
21123|3
 楼主| lulugl 发表于 2023-12-13 20:16 | 显示全部楼层 |阅读模式
#申请原创#
【原理图下载方法】
打开stm32cubeIDE,重建工程,选择开发板,在docs&Resouces下面可以找到开发板的原理图,版本号,可以在开发板的背面找到。
3cd3a8ba3131979b58f3e94b8b0e3fbd
【i2c选择】
1、经查看开发板,开发板标注的SDA与SCL为D14、D15,在原理图上找到他们的定义为PB8、PB9,在stm32CubeIDE中我们选好i2c为I2C1:
d26fdcf879306852a3a9c472f90f93ed
我们打开RTC用于获取时间,来实时更新时钟:
e985668b16972094a99325b93646fd95
071bdd6859244f1f57d562572668f047
并打开中断函数:
867f58b94fd763a555ef8ea1ddc5f640
配置时钟为32M,配置RTC为外部低速时钟。
7df01c855fbdb07f4c158a73198f0ff3
使用stm32CubeIde生成代码。
在stm32CubeIDE中,我们拷入oled与时钟的代码,以及sht30的代码,分别创建两个文件用于存放,创建目录在Drivers/BSP/目录之下:
158ee10db9c93a4852c24d36afad81cf
修改i2c硬件发送一个字节与命令的函数。在stm32HAL库中,我们使用阻塞式的发送函数:HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)来实现对一组数据的发送。
eede3536f729f996cf81fa7c3d91189c
9a0a01d3c033f1352b67954c6f3597b5
同时我们把oled的显存的缓冲区修改为一次发送:
fcf3050697ae56955bd9511cb0405c2f
为了达到定时更新时间,我们在RTC定时器中断回调函数中,实现每1秒钟读取时间并把显示变量的时间更新到缓存中,实现实时时钟。代码如下:
d13cada5422096dc91a265b08bc2769e
同时为了流畅的显示时间的动画,我们每10秒钟采集一次数据并显示到OLED屏上面:
0a91adafc72050622f9f79ff5e7c0591
【实验效果】
bc3004cce03af79d545c480f40cb3c27
【总结】stm32L073可以使用stm32CubeIDE进行开发,前期的外设设置全部采用图形化配置,相同的外设如OLED屏、SHT30等常用外设,可以实现少理的代码就可以实现在不同MCU之时的快速移植。这款开发板虽然只有32M的主频,但是也可以实现丝滑的时钟滚动显示效果。
附工程源码:
stm32L073_OLED.zip (796.54 KB, 下载次数: 19)
附视频效果:


评论

感谢大佬分享!奖励500家园币!申请原创,文章需达到800字!欢迎补充后继续申请  发表于 2023-12-21 15:23
鲜衣怒马 发表于 2024-1-10 17:04 | 显示全部楼层
动画效果不错,学习了
wangwu1976@ 发表于 2024-1-13 10:58 | 显示全部楼层
说实话,做得真不错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

188

主题

843

帖子

12

粉丝
快速回复 在线客服 返回列表 返回顶部