請(qǐng)問ch573有沒有單獨(dú)的rtc喚醒demo?是在不使用ble的情況下。
573/571/582三款的rtc喚醒是相同的套路嗎?
請(qǐng)問ch573有沒有單獨(dú)的rtc喚醒demo?是在不使用ble的情況下。
573/571/582三款的rtc喚醒是相同的套路嗎?
typedef enum
{
Period_0_125_S = 0,// 0.125s 周期
Period_0_25_S,// 0.25s 周期
Period_0_5_S,// 0.5s 周期
Period_1_S,// 1s 周期
Period_2_S,// 2s 周期
Period_4_S,// 4s 周期
Period_8_S,// 8s 周期
Period_16_S,// 16s 周期
}RTC_TMRCycTypeDef;?
RTC喚醒的周期最大只能設(shè)置到16s嗎?我大概需要1-5min的rtc喚醒,這樣是無法做到嗎?
可以,根據(jù)例子設(shè)置喚醒時(shí)間即可,例子里面的計(jì)數(shù)單位是1/32K
沒太理解這個(gè)計(jì)數(shù)單位是1/32K。
我在源碼里看見了一個(gè)
#define? RB_RTC_TMR_MODE? ? 0x07? ? ? ? ? ? ? ? ? ? ? // RWA, RTC timer mode: 000=0.125S, 001=0.25S, 010=0.5S, 011=1S, 100=2S, 101=4S, 110=8S, 111=16S
?這個(gè)應(yīng)該是設(shè)置的周期,那么我只需要設(shè)置這個(gè)周期就可以自定義喚醒周期了?
這個(gè)周期是只能偶數(shù)的設(shè)置嗎?設(shè)置RTC_TMRFunCfg( 9 );就是64s喚醒?
例子只是列舉了幾種常用的喚醒時(shí)間,如果自定義時(shí)間的話,根據(jù)函數(shù)參數(shù)設(shè)定就可以
參數(shù)t和時(shí)間的換算關(guān)系是? Time=t*1/32768(s)
有兩個(gè)疑問請(qǐng)教?
1:RTC_TMRFunCfg(9); 設(shè)置不了64秒喚醒???
2:
void RTC_IRQHandler(void)
{
? ? R8_RTC_FLAG_CTRL = (RB_RTC_TMR_CLR | RB_RTC_TRIG_CLR);
? ? RTCTigFlag = 1;
? ? PRINT("battery_task\r\n");??
? ? // if (RTC_GetITFlag(RTC_TMR_EVENT))
? ? // {
? ? // ? ? PRINT("battery_task\r\n");
? ? // ? ? RTC_ClearITFlag(RTC_TMR_EVENT);
? ? // }
}
為什么if (RTC_GetITFlag(RTC_TMR_EVENT))中斷標(biāo)志位里面不能執(zhí)行?直接在外面就可以執(zhí)行?
RTC功能有觸發(fā)功能和定時(shí)功能,我們一般使用的是定時(shí)功能,相應(yīng)的時(shí)間使用也已經(jīng)封裝好了。
使用觸發(fā)功能設(shè)置喚醒,單位是32768,64s喚醒就寫為RTC_TRIGFunCfg(2097152);
獲取標(biāo)志或者清除標(biāo)志應(yīng)該是對(duì)觸發(fā)事件標(biāo)志處理,上面寫的應(yīng)該是定時(shí)事件。
void rtc_wake_init(void)
{
? RTC_TMRFunCfg(2097152);//2097152/32768=64秒
? PFIC_EnableIRQ(RTC_IRQn);
? PWR_PeriphWakeUpCfg( ENABLE, RB_SLP_RTC_WAKE, Edge_LongDelay );
}
郺t鬳ry_task_awke
郺t鬳ry_task_awke
郺t鬳ry_task_awke
鈇ttery_taskawke
鈇ttery_task_awke
郮W杫_task_awke
郮W杫_task_awke
郮W杫_task_awke
鈇ttery_task_awke
郺趑ery_task_awke
郮W桖_taskawke
郺ttery_task_awke
郺t鬳ry_task_awke
郺t鬳ry_task_awke
郮W杫task_awke
郺ttery_task_awke
醁W桖_task_awke
郮W杫_task_awke
郺ttery_taskawke
還是不行 只要設(shè)置超過16秒? 喚醒時(shí)間就有問題 ?
使用觸發(fā)的方式需要調(diào)用這個(gè)函數(shù)RTC_TRIGFunCfg(32768*20); 另外在中斷中仍需調(diào)用它,清除的中斷標(biāo)志也不同,?RTC_ClearITFlag(RTC_TRIG_EVENT);附件基于573可供參考。
請(qǐng)問為什么每次啟動(dòng)ADC采樣? ?ADC口都會(huì)有一個(gè)上升電壓? 反而采不準(zhǔn)?
void adc_init(void)
{
? ? gpio_mode_cfg(MOTOR_ADC_PIN, GPIO_ModeIN_Floating);
? ? gpio_mode_cfg(BAT1_ADC_PIN, GPIO_ModeIN_Floating);
? ? gpio_mode_cfg(BAT2_ADC_PIN, GPIO_ModeIN_Floating);
? ? ADC_ExtSingleChSampInit(SampleFreq_3_2, ADC_PGA_0);
? ? RoughCalib_Value = ADC_DataCalib_Rough(); // 用于計(jì)算ADC內(nèi)部偏差,記錄到全局變量 RoughCalib_Value中
}
采用普通采樣和DMA采樣都是如此
ADC采集需注意相應(yīng)的增益,選擇相應(yīng)的公式,計(jì)算測(cè)量值時(shí)可以實(shí)際測(cè)量一下VINTA的引腳電壓。
在測(cè)量兩端電壓時(shí)可以將粗調(diào)等校準(zhǔn)關(guān)閉后嘗試。
提供一個(gè)帖子參考:
請(qǐng)問有串口(串口0)中斷喚醒CH573的設(shè)置例子嗎?現(xiàn)在調(diào)試的內(nèi)部RTC中斷可以喚醒MCU,但串口中斷喚不醒?
芯片都睡眠了,串口是不跑的,可以設(shè)置gpio喚醒來實(shí)現(xiàn)。
意思是CH573硬件內(nèi)部本身就不支持外部串口喚醒?