
#第九届立创电赛#温湿度检测仪
简介
基于STM32G303F6P6的低功耗温湿度检测仪,通过TM1616驱动芯片驱动数码管显示,采用盛思锐传感器SHT40温湿度传感器进行数据采集,使用两节7号电池进行供电。
简介:基于STM32G303F6P6的低功耗温湿度检测仪,通过TM1616驱动芯片驱动数码管显示,采用盛思锐传感器SHT40温湿度传感器进行数据采集,使用两节7号电池进行供电。开源协议
:Public Domain
(未经作者授权,禁止转载)描述
一、项目功能介绍
基于STM32G303F6P6的温湿度检测仪,通过TM1616数码管驱动芯片驱动六位共阴极数码管显示温湿度,采用盛思锐传感器SHT40进行温湿度数据采集,使用两节7号电池进行供电。(因为手头刚好有这些元器件所以直接更换了原本的驱动内容,芯片引脚更少而且刚好用一下新买的数码管驱动芯片)
二、硬件部分
原理图与官方例程相似;
1.数码管驱动改用TM1616,TM1616是LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数字接口、数据锁存器、LED 高压驱动等电路。
由芯片时序可知,数码管驱动可以采用SPI协议,就无需自己写模拟时序,经实测SPI速率最大可达8Mbits/S。
由芯片引脚可知可驱动四位七段数码管,无法驱动数码管的小数点DP位。因为SEG引脚P管开漏输出,GRID引脚N管开漏输出,所以仅驱动共阴极数码管。
2.因为使用多个一位式共阴数码管,引脚多走线多,可以采用下面将段码先串联然后接入驱动IO(仅个人经验,合理性有待验证,使用暂未发现问题)
3.因数码管驱动无法点亮小数点DP位,所以将MCU剩余IO用到数码管DP位驱动,小数点位仅需拉高IO即可。
三、软件部分
STM32有三种低功耗模式:
睡眠模式:Cortex-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时钟(SysTick)等仍在运行;
停止模式:所有时钟都已停止。
待机模式:1.8V内核电源关闭。
1.软件最早使用功耗最低的待机模式,通过PA0外部唤醒。(但因为进入低功耗前忘记延时进入导致程序无法继续下载,然后擦除了整个寄存器,之后程序就无法正常唤醒了...)
__HAL_RCC_PWR_CLK_ENABLE();/* 使能电源时钟 */
if (__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET)//检查并检查系统是否从待机模式恢复
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);/* 使能KEY_UP引脚的唤醒功能 */
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF);/* 需要清此标记,否则将保持唤醒状态 */
HAL_PWR_EnterSTANDBYMode();/* 进入待机模式 */
2.然后使用功耗次低的停止模式,通过PA0外部中断唤醒。
HAL_SuspendTick(); //关闭 tick 中断,防止唤醒睡眠状态的 MCU
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI);/*进入停止模式*/
SystemClock_Config();//恢复时钟
3.也可以使用睡眠模式。
HAL_SuspendTick(); //关闭tick中断,防止唤醒睡眠状态的MCU
HAL_PWR_EnterSLEEPMode(PWR_SLEEPENTRY_WFI);//进入睡眠模式
HAL_ResumeTick();//恢复tick中断计时
四.演示效果
设计图

BOM


评论