搜索
bottom↓
回复: 11

STM32L0的RTC 1秒定时唤醒居然会随着应用代码的添加而变化

[复制链接]

出55入4汤圆

发表于 2020-4-17 18:23:09 | 显示全部楼层 |阅读模式
本帖最后由 ChenXC1121 于 2020-4-18 16:20 编辑

使用STM32L011的RTC功能实现1秒唤醒一次单片机STOP低功耗模式,并进行ADC采样和把数据写入EEPROM,之后又进入STOP模式。一开始还没实现ADC采样和EEPROM功能,只是在RTC中断中对PB1实现电平翻转,然后用50M的逻辑分析仪测得PB1的脉宽为1.000018S,并且这时在退出STOP模式后增加HAL_Delay(50) 50ms的延时,测得PB1的脉宽仍为1.000018S,之后增加ADC采样和EEPROM功能,RTC的初始化函数没修改,只是将前面的50ms延时换成了ADC采样函数和EEPROM写入函数,这时再用逻辑分析仪测量PB1的脉宽,发现竟然变成了1.000109S,很奇怪,不知道是哪里出了问题,请各位大神帮忙看下,感激不尽。。。
使用这个芯片时间不是很长,RTC中断函数不知道会不会有什么标志位没清除,还请高手帮忙指导下,谢谢!

我的主程序流程是每计数5秒就有1秒会执行ADC操作和EEPROM操作,其它4秒都是唤醒后又马上进入低功耗模式,测量出来的波形就是有4个脉宽是1.000018S,1个脉宽是1.000109S。

今天发现我用PA7输出高电平给ADC供电,只要该管脚置高,RTC的中断周期就会从1.000018us变化成1.000076us,难道STM32L0的IO脚输出几mA的电流就会影响到RTC的运行?之后我改用PB7给ADC供电,仍会出现该问题。


下面是我的RTC初始化函数
HAL_StatusTypeDef ret = HAL_OK;
RTCHandle.Instance = RTC;
RTCHandle.Init.HourFormat = RTC_HOURFORMAT_24;
RTCHandle.Init.AsynchPrediv = RTC_ASYNCH_PREDIV;
RTCHandle.Init.SynchPrediv = RTC_SYNCH_PREDIV;
RTCHandle.Init.OutPut = RTC_OUTPUT_DISABLE;
RTCHandle.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
RTCHandle.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
ret = HAL_RTC_Init(&RTCHandle);
if (ret != HAL_OK) while (1);
stop_rtc_config(0);


stop_rtc_config函数如下:
static void stop_rtc_config(uint32_t sleep)
{
    /* Disable Wakeup Counter */
    HAL_RTCEx_DeactivateWakeUpTimer(&RTCHandle);
    /*## Setting the Wake up time */
    HAL_RTCEx_SetWakeUpTimer_IT(&RTCHandle, sleep, RTC_WAKEUPCLOCK_CK_SPRE_16BITS);
}


RTC中断处理函数如下:
void RTC_IRQHandler(void)
{
    HAL_RTCEx_WakeUpTimerIRQHandler(&RTCHandle);
        __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
        rtc_flag=1;

        GPIO_InitTypeDef GPIO_InitStruct = {0};               
        __HAL_RCC_GPIOB_CLK_ENABLE();                   
        GPIO_InitStruct.Pin = GPIO_PIN_1;                   
        GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;                   
        GPIO_InitStruct.Pull = GPIO_PULLUP;                   
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;                   
        HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);               
        HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入442汤圆

发表于 2020-4-17 21:27:31 | 显示全部楼层
32768晶振?应该是正常现象,万二的漂移一天也就十几秒而已。

出0入0汤圆

发表于 2020-4-17 22:30:26 | 显示全部楼层
中断嵌套有概率影响,调高RTC优先级。

出55入4汤圆

 楼主| 发表于 2020-4-18 08:42:43 | 显示全部楼层
wye11083 发表于 2020-4-17 21:27
32768晶振?应该是正常现象,万二的漂移一天也就十几秒而已。


我用的是20PPM的32768晶振,在没加ADC应用代码前1S的误差是18us,一天的误差是3600*24*18us=1.555S,应该不会大到十几秒这么夸张吧,而且每次误差变大都是有执行ADC采样和EEPROM写入操作,这么太奇怪了。

出0入0汤圆

发表于 2020-4-18 09:08:13 | 显示全部楼层
你是怎样把误差测得这么准?  测试方法准不准呢

出55入4汤圆

 楼主| 发表于 2020-4-18 09:24:04 | 显示全部楼层
styleno1 发表于 2020-4-17 22:30
中断嵌套有概率影响,调高RTC优先级。


我的中断级别已经是0了  而且这个现象是只要我有执行ADC操作和EEPROM写入操作   RTC定时就会变长

出55入4汤圆

 楼主| 发表于 2020-4-18 09:25:08 | 显示全部楼层
292302877 发表于 2020-4-18 09:08
你是怎样把误差测得这么准?  测试方法准不准呢


我用的是标称200M的逻辑分析仪  淘宝500多块买的   

出55入4汤圆

 楼主| 发表于 2020-4-18 09:26:35 | 显示全部楼层
ChenXC1121 发表于 2020-4-18 09:25
我用的是标称200M的逻辑分析仪  淘宝500多块买的


就算不准  那也应该是一直不准啊   而不是每次我都有执行ADC操作和EEPROM操作的周期就不准

出0入0汤圆

发表于 2020-4-18 09:49:58 | 显示全部楼层
ChenXC1121 发表于 2020-4-18 09:24
我的中断级别已经是0了  而且这个现象是只要我有执行ADC操作和EEPROM写入操作   RTC定时就会变长 ...

你有写内部EEPROM,那么是会有概率受影响。1Hz偏大概率有多少?

出55入4汤圆

 楼主| 发表于 2020-4-18 09:53:08 | 显示全部楼层
styleno1 发表于 2020-4-18 09:49
你有写内部EEPROM,那么是会有概率受影响。1Hz偏大概率有多少?


我是通过IO模拟IIC接口往外部EEPROM写数据和通过IO模拟SPI接口从外部ADC读取数据,感觉这两个应该都跟芯片内部关系不大啊

出55入4汤圆

 楼主| 发表于 2020-4-18 09:53:49 | 显示全部楼层
ChenXC1121 发表于 2020-4-18 09:53
我是通过IO模拟IIC接口往外部EEPROM写数据和通过IO模拟SPI接口从外部ADC读取数据,感觉这两个应该都跟芯 ...


我的主程序流程是每计数5秒就有1秒会执行ADC操作和EEPROM操作,其它4秒都是唤醒后又马上进入低功耗模式,测量出来的波形就是有4个脉宽是1.000018S,1个脉宽是1.000109S。

出55入4汤圆

 楼主| 发表于 2020-4-18 09:58:34 | 显示全部楼层
styleno1 发表于 2020-4-18 09:49
你有写内部EEPROM,那么是会有概率受影响。1Hz偏大概率有多少?


比较奇怪的是我在ADC采样函数中增加HAL_Delay(100),接近100ms的延时,但测量出来的脉宽仍是1.000109S
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 15:46

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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