一、概述
最近做了一个烟雾报警的项目,其中碰到一些问题,总结起来
二、项目介绍
项目主要包含stm8L151G6单片机,烟感检测,红外检测,蜂鸣器,LED,NB-IOT模块,烟感检测采用红外对管,红外对管并不是直接对射,而是通过烟雾漫反射来检测。这个项目主要在于低功耗。
三、问题汇总
1、唤醒问题
为了实现功耗,单片机采用RTC唤醒,在设置这个RTC寄存器的时候碰到幻想不了的问题,最后发现是有个寄存器设置顺序的问题。如下
T_S32 DRIVER_RTC_Open(T_VOID)
{
memset(&g_RtcCtl, 0, sizeof(g_RtcCtl));
g_RtcCtl.u32WakeInt = RTC_DEFAULT_WAKE_INT;
///*
CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);
CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_1);
RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16); //32768/16 = 2048
RTC_SetWakeUpCounter(2048 * g_RtcCtl.u32WakeInt); //这个要放在开中断前
//*/
/*
CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);
CLK_RTCClockConfig(CLK_RTCCLKSource_HSE, CLK_RTCCLKDiv_64); //250000
RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16); //250000/16 = 15625
RTC_SetWakeUpCounter(15625);
*/
RTC_ITConfig(RTC_IT_WUT, ENABLE);
RTC_WakeUpCmd(ENABLE);
return RET_SUCCESS;
}
2、stm8 串口在唤醒后乱码
我主频本来是采用HSE的,但是在唤醒后,本来好的串口发送有问题。后来我把主频改成HSI就好了,这里具体什么原因还没分析清楚,后面再来看
3、NB-IOT模块
我们采用的m5310 的NB-IOT模块,模块在入网之后的电流还是挺小的只有3ua
4、串口
进入休眠时可以采取将串口置成输入口来降低功耗