APT32 RTC+低功耗调试笔记
1、项目需求
采用APT32F1023单片机,内部27K时钟驱动RTC,内部6M定时器作为主频。周期检测外部供电是否恢复,如果恢复则使用正常工作模式,否则仅开启RTC,关闭其他外设,进入低功耗待机模式。
2、存在问题
A:开启看门狗后,会周期触发看门狗复位
B: 进入低功耗模式后,由于ADC采集异常,外部供电恢复无法被检测到,也就无法恢复到正常工作模式。
3、心得体会
A: 注意ADC重新配置的时机
不能不重新配置,否则无法采集新的ADC值
不能初始化的过于频繁,否则留给ADC采集的时间不足,可能会造成多通道采集中的一个或多个通道还未完成转换,则采集数据不正确。
B: 注意看门狗的及时喂狗
我们知道,看门狗的触发周期内,要完成喂狗操作,否则单片机会看门狗复位重启。本例中看门狗的周期是8秒,我们选择RTC唤醒的周期是5秒,然后在RTC唤醒中断中喂狗,ADC采集中保险起见,也喂狗。
//------------ WDT FUNTION --------------------------------/
SYSCON_IWDCNT_Config(IWDT_TIME_8S, IWDT_INTW_DIV_7); // WDT TIME 1s,WDT alarm interrupt time=1s-1s*1/8=0.875S
SYSCON_WDT_CMD(DISABLE); // enable WDT
SYSCON_IWDCNT_Reload(); // reload WDT
IWDT_Int_Enable();
void ADCIntHandler(void)
{
uint16_t adc_v = 0;
if ((ADC0->SR & ADC12_EOC) == ADC12_EOC) // ADC EOC interrupt
{
ADC0->CSR = ADC12_EOC;
adc_v = ADC12_DATA_OUPUT(0);
adc_val_ntc = adc_v * 5100 / 4096;
adc_v = ADC12_DATA_OUPUT(1);
if (adc_v > 0) {
adc_val_power = adc_v * 5100 / 4096 * 11;
}
adc_v = ADC12_DATA_OUPUT(2);
if (adc_v > 0) {
adc_val_sensor = adc_v * 5100 / 4096;
}
adc_convert_ok = 1;
SYSCON_IWDCNT_Reload();
// ADC12_Control(ADC12_START);
}}
void RTCIntHandler(void)
{
// ISR content ...
if ((RTC->MISR & ALRA_INT) == ALRA_INT) // ALRAR
{
RTC->ICR = ALRA_INT;
RTC->KEY = 0XCA53;
RTC->CR = RTC->CR | 0x01;
RTC->TIMR = (0x10 << 16) | (0x00 << 8) | (0x00); // Hour bit6->0:am 1:pm
while (RTC->CR & 0x02)
; // busy 判断TIMR DATR ALRAR ALRBR数据写完
RTC->CR &= ~0x1;
} else if ((RTC->MISR & ALRB_INT) == ALRB_INT) // ALRBR
{
RTC->ICR = ALRB_INT;
} else if ((RTC->IMCR & CPRD_INT) == CPRD_INT) // CPRD
{
RTC->ICR = CPRD_INT;
SYSCON_IWDCNT_Reload();
} else if ((RTC->IMCR & RTC_TRGEV0_INT) == RTC_TRGEV0_INT) {
RTC->ICR = RTC_TRGEV0_INT;
} else if ((RTC->IMCR & RTC_TRGEV1_INT) == RTC_TRGEV1_INT) {
RTC->ICR = RTC_TRGEV1_INT;
}
}
分类:
得失集
, 04_爱普特APT32
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)