描述
<h3 style="line-height:1.8">* 1、项目功能介绍</h3>
<hr>
<p style="line-height:1.8">一款基于STM32G030K6T6的温湿度传感器,使用盛思锐的SHT40传感器获取温度和湿度,使用ADC读取电池电压,应且将这三种数值显示在数码管上.整体采用4.2v锂电池进行供电,并且电路板内置了TP4056充电管理模块,可插入Typec进行锂电池充电,当插入Typec即断开电池供电,拔下即可恢复电池供电,有两个指示灯当未充满电则红灯亮,充满则绿灯亮。</p>
<h3 style="line-height:1.8">*2、硬件部分</h3>
<hr>
<p style="line-height:1.8"><strong>1.Typec接口</strong></p>
<p style="line-height:1.8"><img src="//image.lceda.cn/oshwhub/03c4d19a80044a76a4aec9ce9411deb5.png"></p>
<p style="line-height:1.8">这里我为使用串口所以将D+和D-打×,仅用到它的供电。</p>
<p style="line-height:1.8"><strong>2.3.3V供电部分</strong></p>
<p style="line-height:1.8"><img src="//image.lceda.cn/oshwhub/601c001473174fd68c741d3ffb5ca59c.png"></p>
<p style="line-height:1.8">D1为防反接采用低压降肖特基二极管,输入和输出开用大电容和小电容滤除杂波使得最后的供电稳定。</p>
<p style="line-height:1.8"><strong>3.锂电池充电电路</strong></p>
<p style="line-height:1.8"><strong><img src="//image.lceda.cn/oshwhub/f082d51534404b829ded007d1a29ce41.png"></strong></p>
<p style="line-height:1.8">二号引脚是充电电路设置根据公式<img src="//image.lceda.cn/oshwhub/b4d43762f2844232b216082e7dccb010.png" width="154" height="42">,计算出我这里设置充电电流为3.85A,5号引脚为电池接口,这里我是用XH2.54-2P接口,6,7号引脚为电池充电状态指示灯。</p>
<p style="line-height:1.8"><strong>Typec和锂电池自动切换电路</strong></p>
<p style="line-height:1.8"><strong><img src="//image.lceda.cn/oshwhub/e1124e96db50476a9bb7d3fa869b8490.png"></strong></p>
<p style="line-height:1.8">当未接入typec,锂电池供电时,MOS管导通VBAT_OUT等于VBAT即为电池供电,当接入Typec时候MOS管断开VBAT_OUT等于Typec即为Typec供电。</p>
<p style="line-height:1.8"><strong>STH40温湿度模块</strong></p>
<p style="line-height:1.8"><strong><img src="//image.lceda.cn/oshwhub/bdb836a9e3324d77b8aec244f296791d.png"></strong></p>
<p style="line-height:1.8">采用IIC通讯,1,2号引脚外部上拉,因为STM32引脚内部IIC是开漏输出无法获得高电平,因此采用外部上拉,这里电阻大小要适宜,一般10k。</p>
<h3 style="line-height:1.8">*3、软件部分</h3>
<hr>
<p style="line-height:1.8"><span style="color:#95a5a6;font-size:14px">请输入内容…</span></p>
<p style="line-height:1.8">采用CUBEMX配置STM32单片机生成代码,然后通过Keil打开在里面编写代码,省去了硬件层,只要写应用层即可</p>
<p style="line-height:1.8"><img src="//image.lceda.cn/oshwhub/110648b4dab74923a65a74e44def31e1.png"></p>
<p style="line-height:1.8">上图为配置界面,如果为STLINK或者Daplink下载需要在Syetem Core里面的SYS要勾选Serial Wire。还有在Connectivity里面勾选I2C速度选择100KHZ的即可,剩余的即为普通GPIO引脚按需求配置即可。</p>
<p style="line-height:1.8"><img src="//image.lceda.cn/oshwhub/17541a1c056d456b92e9ce3636376a26.png"></p>
<p style="line-height:1.8">软件代码要卸载USER CODE BEGIN 3和USER CODE END 3中这样重新配置就不会被删除。</p>
<p style="line-height:1.8">本次代码里面我变量全采用结构体和联合体的形式方面代码的阅读和管理</p>
<div>typedef enum{</div>
<div>Key_No_Press = 0,</div>
<div>Key_Press,</div>
<div>Sleep_No,</div>
<div>Sleep_Yes,</div>
<div>}Key_UPORDOW;</div>
<div>这里是定义的一个枚举体用来判断按键状态,因为我要通过按键来切换状态。</div>
<div> </div>
<div>typedef struct{</div>
<div>volatile uint8_t KeySataus;</div>
<div>volatile uint8_t SleepStatus;</div>
<div>uint8_t Key_Value;</div>
<div>uint8_t Nixie_Flag;</div>
<div>}Device_param_t;</div>
<div>这里是模式参数的设置</div>
<div>
<div>void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){</div>
<div>if(htim->Instance == TIM14){</div>
<div>if(device_param.Nixie_Flag == 1){</div>
<div>Cnt++;</div>
<div>if(Cnt == 1000){</div>
<div>Cnt = 0;</div>
<div>Cnt_Sleep++;</div>
<div>}</div>
<div>if(Cnt_Sleep < 2){</div>
<div>ShowNum(1,1,sht40.Temp/100);</div>
<div>ShowNum(1,2,sht40.Temp/10%10);</div>
<div>ShowNum(1,3,sht40.Temp%10);</div>
<div>ShowNum(2,1,sht40.humi/100);</div>
<div>ShowNum(2,2,sht40.humi/10%10);</div>
<div>ShowNum(2,3,sht40.humi%10);</div>
<div>}else if(Cnt_Sleep <= 4){</div>
<div>ShowNum_Battery(1,battery.Battery_V/100);</div>
<div>ShowNum_Battery(2,battery.Battery_V/10%10);</div>
<div>ShowNum_Battery(3,battery.Battery_V%10);</div>
<div>}</div>
<div>if(Cnt_Sleep >= 5){</div>
<div>// __HAL_TIM_SetCounter(&htim14,0);</div>
<div>Led_off();</div>
<div>device_param.Nixie_Flag = 0;</div>
<div>device_param.SleepStatus = Sleep_Yes;</div>
<div>SN74595_Send_Data(SN_DIG,0XFF);</div>
<div>SN74595_Send_Data(SN_LED1,0X00);</div>
<div>SN74595_Send_Data(SN_LED2,0X00);</div>
<div>HAL_TIM_Base_Stop_IT(&htim14);</div>
<div>Cnt_Sleep = 0;</div>
<div>}else{</div>
<div>HAL_TIM_Base_Start_IT(&htim14);</div>
<div>}</div>
<div>}</div>
<div>}</div>
<div>}</div>
<div>在定时器里面进行数码管的动态刷新和显示。</div>
</div>
评论(0)