请问ch573有没有单独的rtc唤醒demo?

请问ch573有没有单独的rtc唤醒demo?是在不使用ble的情况下。

573/571/582三款的rtc唤醒是相同的套路吗?

附件的例子请查收

icon_rar.gifCH573_PM_RTC例程.zip



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唤醒?



例子只是列举了几种常用的唤醒时间,如果自定义时间的话,根据函数参数设定就可以
image.png
参数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可供参考。

icon_rar.gifPM_RTC.zip



2022.06.14_16.41.54.jpg

请问为什么每次启动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的引脚电压。

在测量两端电压时可以将粗调等校准关闭后尝试。

提供一个帖子参考:

求助CH573F的ADC配置为-6db时误差较大的问题 - 沁恒微电子社区 (wch.cn)


请问有串口(串口0)中断唤醒CH573的设置例子吗?现在调试的内部RTC中断可以唤醒MCU,但串口中断唤不醒?


芯片都睡眠了,串口是不跑的,可以设置gpio唤醒来实现。


意思是CH573硬件内部本身就不支持外部串口唤醒?


只有登录才能回复,可以选择微信账号登录