OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2225|回复: 2

STM32L0系列低功耗定时器的使用经验及疑问

[复制链接]

6

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
320
金钱
320
注册时间
2017-10-14
在线时间
80 小时
发表于 2019-10-15 11:47:27 | 显示全部楼层 |阅读模式
10金钱
最近在做一款低功耗 IOT Sensor,静态功耗18ua,使用的MCU是SM32L031,使用lora芯片SX1278上报数据给基站,即lora发送一包数据约需要250ms,多个Sensor在同一时间上报数据时,会发生数据冲撞,没有收到基站回复的sensor会补发数据,但如果很多一起重发,依旧会发生大量冲撞,为了避免这种现象,使用了随机延时重发的方法,以单片机RTC的实时时钟子秒SubSeconds为随机数种子,使用srand()种随机数,用rand()取随机数,并将取出的随机数对17取余,得出0-16范围内的随机数,再以300ms为步进值做随机延时,这样可以做到发生数据冲撞时各个Sensor可以随机分时补报(0ms-4800ms之间以300ms步进),最高补报15次,但若使用HAL_Delay()函数,延时期间MCU为全速运行状态,功耗达到7ma以上,会对使用寿命造成很大影响。故采用低功耗定时器hlptim1做定时唤醒,代码如下:                        Get_Now_Time();//获取RTC时间
                        srand((255-stimestructure.SubSeconds)*1000/256);//种随机数种子
                        DelayRand=((rand()%17))*300;//取随机数,并在0-4800ms之间按300ms的步进值切分
//                        if(LOG)
                        {
                                printf("DelayRand = %d\r\n",DelayRand);
                        }
                        DelayRand=(DelayRand*32)/125;//把毫秒转化为定时器的SubS

                        HAL_NVIC_DisableIRQ(EXTI4_15_IRQn);//进入低功耗模式前关闭外部中断
                       
                       
                        HAL_LPTIM_TimeOut_Start_IT(&hlptim1,DelayRand,DelayRand);        //使用低功耗定时器重发随机延时,延时期间进入低功耗模式 2019-07-30-1
                        EnterStopMode();//进入STOP模式

产品发布后,出现偶尔有死机现象,但并没有进入硬件错误,判断在某个死循环里,后来仿真发现,一直进入HAL_LPTIM_IRQHandler(),无法退出中断,而死机情况出现时前一次随机数为0,即定时0S后唤醒单片机,随后进入STOP模式,每次死机前一次随机数必然是0,但又不是每次随机延时0S都会导致死机。
当我把DelayRand=((rand()%17))*300;改为DelayRand=((rand()%17)+1)*300;,
再无死机现象出现,希望得到大家的意见,谢谢!





正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10569
金钱
10569
注册时间
2017-2-18
在线时间
1913 小时
发表于 2019-10-15 18:46:36 | 显示全部楼层
回复

使用道具 举报

12

主题

86

帖子

0

精华

高级会员

Rank: 4

积分
567
金钱
567
注册时间
2014-12-19
在线时间
139 小时
发表于 2020-3-11 16:58:16 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-22 08:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表