请问ch573有没有单独的rtc唤醒demo?是在不使用ble的情况下。
573/571/582三款的rtc唤醒是相同的套路吗?
请问ch573有没有单独的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唤醒的周期最大只能设置到16s吗?我大概需要1-5min的rtc唤醒,这样是无法做到吗?
可以,根据例子设置唤醒时间即可,例子里面的计数单位是1/32K
没太理解这个计数单位是1/32K。
我在源码里看见了一个
#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
这个应该是设置的周期,那么我只需要设置这个周期就可以自定义唤醒周期了?
这个周期是只能偶数的设置吗?设置RTC_TMRFunCfg( 9 );就是64s唤醒?
例子只是列举了几种常用的唤醒时间,如果自定义时间的话,根据函数参数设定就可以
参数t和时间的换算关系是 Time=t*1/32768(s)
有两个疑问请教
1:RTC_TMRFunCfg(9); 设置不了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))中断标志位里面不能执行?直接在外面就可以执行?
RTC功能有触发功能和定时功能,我们一般使用的是定时功能,相应的时间使用也已经封装好了。
使用触发功能设置唤醒,单位是32768,64s唤醒就写为RTC_TRIGFunCfg(2097152);
获取标志或者清除标志应该是对触发事件标志处理,上面写的应该是定时事件。
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
还是不行 只要设置超过16秒 唤醒时间就有问题 ?
使用触发的方式需要调用这个函数RTC_TRIGFunCfg(32768*20); 另外在中断中仍需调用它,清除的中断标志也不同,?RTC_ClearITFlag(RTC_TRIG_EVENT);附件基于573可供参考。
请问为什么每次启动ADC采样 ADC口都会有一个上升电压 反而采不准?
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(); // 用于计算ADC内部偏差,记录到全局变量 RoughCalib_Value中
}
采用普通采样和DMA采样都是如此
ADC采集需注意相应的增益,选择相应的公式,计算测量值时可以实际测量一下VINTA的引脚电压。
在测量两端电压时可以将粗调等校准关闭后尝试。
提供一个帖子参考:
请问有串口(串口0)中断唤醒CH573的设置例子吗?现在调试的内部RTC中断可以唤醒MCU,但串口中断唤不醒?
芯片都睡眠了,串口是不跑的,可以设置gpio唤醒来实现。
意思是CH573硬件内部本身就不支持外部串口唤醒?