描述
<div class="document">
<h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">* 1、项目介绍</h3>
<div class="lake-content">
<p id="u56996930" class="ne-p">桌面温湿度仪项目使用STM32G030K6T6芯片作为主控芯片,该芯片使用Arm Cortex-M0+内核;最大主频64Mhz;<br>具有32KB的Flash以及8K的SRAM,供电电压在2.0V~3.6V之间,用来检测温湿度,默认采用两节5号电池进行供电,考虑到功耗问题,默认不开机,进入睡眠模式;<br>当有按键按下时,触发中断,此时结束睡眠模式,执行按键判断,获取温湿度并启动数码管进行显示;同时启动定时器中断,循环显示两次数据后再次进入睡眠,等待下次唤醒。</p>
<div class="lake-content"><span class="ne-text"><span class="ne-text">直接使用STM32CubeMX软件进行基础代码生成与配置,图形化的方式可以减少学习的时间,快速上手一款芯片,</span></span>
<div class="lake-content"><span class="ne-text">代码均采用STM32CubeMX进行生成,默认会根据外设生成对应的文件</span></div>
</div>
<div class="lake-content">
<p class="ne-p"><span class="ne-text">在桌面温湿度仪上,有两个测试LED,一个接入单片机-PB7引脚用于测试GPIO输出功能;</span><span class="ne-text">另外一个接入74HC595用于测试移位寄存器输出功能;</span><span class="ne-text">本次实验通过使LED闪烁来测试单片机GPIO输出功能是否正常以及延时函数是否正常。</span>在LED灯的左侧是3V电源加入4.7K限流电阻,若此时GPIO输出高电平,两端没有电势差LED不点亮,若输出低电平,两端存在电势差,LED点亮,通过间接输出高电平与低电平来实现LED闪烁功能。</p>
<div class="lake-content">
<p id="uf45676af" class="ne-p"><span class="ne-text">中断是指单片机在运行过程中,出现了某种需要紧急处理的事件,此时单片机会暂停当前运行的代码,转而执行更加紧急的事件代码。处理完毕后又返回原来被暂停的程序中继续运行。</span></p>
<p id="u65d93181" class="ne-p"><span class="ne-text">STM32G030K6T6是Cortex ARM0+内核,具有NVIC(嵌套中断控制器)以及EXTI(外部中断事件控制器),支持4种优先级设置,且每一个GPIO均可作为外部中断/事件触发信号输入,通过这二者进行组合,使单片机能够对外部中断/事件进行快速响应。</span></p>
<p id="u422363a6" class="ne-p"><span class="ne-text">这里对PB7也就是WAKE引脚进行下降沿读取,当发生下降沿时,单片机进入中断处理,执行相关的代码操作,这样就无需在代码中一直轮询按键引脚是否是低电平了。</span></p>
</div>
<div class="lake-content">
<p class="ne-p"><span class="ne-text">在桌面温湿度仪上,有一个功能按键,通过这个按键可以用于执行各类操作,比如控制LED灯、读取温湿度或显示电池电量等信息;</span>通过按键按下来控制LED灯点亮或熄灭来测试GPIO的输入功能。在按键的左侧连接是GND,右侧连接的是GPIO-PB5,也就是说,当按键按下时,是低电平。如果想要单片机能够准确的知道按下的状态,则未按下时需要时引脚保持高电平,这样才有变化。</p>
<div class="lake-content">
<p id="ub16363bb" class="ne-p"><span class="ne-text">在STM32 HAL库中,有一套独立的中断/事件处理回调逻辑,假设此时按键按下,导致下降沿到来;</span></p>
<ul class="ne-ul">
<li id="ub6957bcf"><span class="ne-text">首先,系统会进入中断服务函数中(中断服务函数实现进行了弱定义,并在启动文件中进行声明);</span></li>
<li id="u6770433a"><span class="ne-text">在中断服务函数中,调用中断类型处理函数(一个中断服务函数会作用与多种中断类型,比如上升沿中断、下降沿中断等等)并清除该中断;该函数HAL库一般也写好了,我们仅需要找到该函数位置然后观察其中有什么内容即可;</span></li>
<li id="ucc38b197"><span class="ne-text">获取具体的中断类型后,执行对应的处理功能函数;HAL库一般会写好一个弱定义的函数,我们需要对这个函数进行重新定义并将内容编写在其中即可。</span></li>
</ul>
</div>
<p id="ud93e9aae" class="ne-p"></p>
</div>
</div>
<div class="lake-content">
<p id="ua82507aa" class="ne-p"><span class="ne-text">桌面温湿度仪上使用一个SHT40温湿度传感器模块用于检测温湿度,SHT40采用IIC进行通信,模块上R8、R9是IIC通信的上拉电阻,起到“线与”的作用,支持挂载多个设备。</span></p>
<p class="ne-p"> </p>
<div class="lake-content">
<p id="uec30c564" class="ne-p"><span class="ne-text">IIC是一种两线式双向同步串行总线协议,双向的意思是指通信双方均可发送与接受数据;同步是指通信双方具有相同的时钟脉冲(SCL线)。</span></p>
<p id="u46615239" class="ne-p"><span class="ne-text">在IIC中把设备分为主设备与从设备,一般来说,谁控制时钟线谁就是主设备;</span></p>
<p id="u13d4f639" class="ne-p"><span class="ne-text">IIC设备均有一个器件地址,在多个设备通信时,根据器件地址来进行辨别;</span></p>
<p id="u873b7b3a" class="ne-p"><span class="ne-text">IIC是半双工通信,同一时间内仅支持单向通信(只有一根数据线);</span></p>
<p id="ue23c6a1c" class="ne-p"><span class="ne-text">单片机的IIC引脚通常设置为开漏输出,通过外部的上拉电阻来输出高电平,这样做的好处是防止多个设备通信时,信号混乱。</span></p>
<p id="ubc3f08d2" class="ne-p"><span class="ne-text">在整个IIC通信过程中,主要包含以下几个过程;</span></p>
<ul class="ne-ul">
<li id="u8c6dc0df"><span class="ne-text">主机开始时序;</span></li>
<li id="u021084e3"><span class="ne-text">主机发送地址时序;</span></li>
<li id="uca9395b3"><span class="ne-text">主机等待从机应答时序;</span></li>
<li id="u816d6856"><span class="ne-text">主机发送读/写数据时序;</span></li>
<li id="ue3aabf3a"><span class="ne-text">主机等待从机应答时序;</span></li>
<li id="u7f1d0ceb"><span class="ne-text">停止时序;</span>
<p class="ne-p"><span class="ne-text">面温湿度仪使用两节5号电池用于整个系统供电,这里加入一个分压电阻用于检测电池电压,</span></p>
<div class="lake-content"><span class="ne-text">使用两个10K对电压值进行分压,然后通过单片机ADC进行电压读取,对于3V电池,其实可以直接输入到单片机的IO口进行读取,但是大多数情况都是使用分压电阻来进行</span></div>
<p id="uabba9e7d" class="ne-p"></p>
</li>
</ul>
<p><span style="font-size: 12pt;"><strong><span class="ne-text">软硬件部分见设计图,BOM与官方案例些许不同,部分元器件使用手头已有元件封装代替。</span></strong></span></p>
</div>
</div>
<p class="ne-p"> </p>
</div>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">*2、项目属性</h3>
<hr class="horizontal-splitline normal-bold-2">
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">项目由立创商城主办,盛思锐品牌冠名,训练营复刻,详细课程案例及教程步骤链接见:https://www.yuque.com/wldz/jlceda/dqetva01onq5tgdz</p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">* 3、开源协议</h3>
<hr class="horizontal-splitline normal-bold-2">
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">GPL3.0</p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt pap-left-indent-1.6em" style="line-height: 1.8;"> </p>
<h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </h3>
<hr class="horizontal-splitline normal-bold-2">
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt pap-left-indent-1.6em" style="line-height: 1.8;"> </p>
<h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </h3>
<span style="color: #95a5a6; font-size: 14px;"> </span>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">*4、大赛LOGO验证</h3>
<hr class="horizontal-splitline normal-bold-2">
<p style="line-height: 1.8;"><img src="//image.lceda.cn/oshwhub/c5839e6aa30d42328aad981a9f2f1b8a.png" width="293" height="235"></p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </h3>
<hr class="horizontal-splitline normal-bold-2">
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
</div>
评论(0)