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