關(guān)于ch32v203G8R6的rtc鬧鐘中斷問題

問題如題,在這個(gè)型號(hào)上使用rtc鬧鐘中斷沒有效果,換成ch32v203c8t6的開發(fā)板測(cè)試可以實(shí)現(xiàn),是什么問題

void rtc_init(void)

{

? ? RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);? ? ?//開啟PWR的時(shí)鐘


? ? RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE);? ? ?//開啟BKP的時(shí)鐘




? ? /*備份寄存器訪問使能*/


? ? PWR_BackupAccessCmd(ENABLE);? ? ? ? ? ? ? ? ? ? ? ? ? ? //使用PWR開啟對(duì)備份寄存器的訪問

? ? BKP_TamperPinCmd(DISABLE);

? ? if (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) != SET) {

? ? ? ? RCC_LSICmd(ENABLE);

//? ? ? ? int temp = 0;

? ? ? ? while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) {

? ? ? ? ? ? // TODO lsi boot failed, not sleep?

//? ? ? ? ? ? temp++;

//? ? ? ? ? ? if (temp >= 250) {

//? ? ? ? ? ? ? ? break;

//? ? ? ? ? ? }

//? ? ? ? ? ? rt_thread_mdelay(10);

? ? ? ? }

//? ? ? ? if (temp >= 250) {

//? ? ? ? ? ? elog_e(TAG, "LSI don't start expectly in 2.5s: %d\n", temp);

//? ? ? ? }

? ? }


? ? RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);

? ? RCC_RTCCLKCmd(ENABLE);

? ? RTC_WaitForLastTask();


? ? RTC_EnterConfigMode();

? ? RTC_WaitForLastTask();


? ? RTC_SetPrescaler(0);

? ? RTC_WaitForLastTask();


? ? RTC_SetAlarm(0);

? ? RTC_WaitForLastTask();


? ? RTC_SetCounter(1);

? ? RTC_WaitForLastTask();


? ? EXTI_InitTypeDef EXTI_InitStructure = {0};

? ? EXTI_InitStructure.EXTI_Line = EXTI_Line17;

? ? EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

? ? EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;

? ? EXTI_InitStructure.EXTI_LineCmd = ENABLE;

? ? EXTI_Init(&EXTI_InitStructure);


? ? NVIC_InitTypeDef NVIC_InitStructure = {0};

? ? NVIC_InitStructure.NVIC_IRQChannel = RTCAlarm_IRQn;

? ? NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

? ? NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

? ? NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

? ? NVIC_Init(&NVIC_InitStructure);


}

static void RTC_Alarm(uint32_t count) {

? ? RTC_SetCounter(0);

? ? RTC_WaitForLastTask();


? ? RTC_SetAlarm(count);

? ? RTC_WaitForLastTask();


? ? EXTI_ClearITPendingBit(EXTI_Line17);

? ? RTC_ClearITPendingBit(RTC_IT_ALR);


? ? RTC_ITConfig(RTC_IT_ALR, ENABLE);

? ? RTC_WaitForLastTask();


? ? EXTI_ClearITPendingBit(EXTI_Line17);

? ? RTC_ClearITPendingBit(RTC_IT_ALR);


}

void RTCAlarm_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));

void RTCAlarm_IRQHandler(void) {


? ? EXTI_ClearITPendingBit(EXTI_Line17);

? ? RTC_ClearITPendingBit(RTC_IT_ALR);

//? ? printf( "RTCAlarmIRQHandler %d", RTC_GetCounter());

? ? RTC_ITConfig(RTC_IT_ALR, DISABLE);

? ? RTC_WaitForLastTask();


? ? printf( "RTCAlarmIRQHandler %d\n", RTC_GetCounter());

}

/*********************************************************************

?* @fn? ? ? main

?*

?* @brief? ?Main program.

?*

?* @return? none

?*/

int main(void)

{

? ? NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

? ? SystemCoreClockUpdate();

? ? Delay_Init();

? ? USART_Printf_Init(115200);

? ? printf("SystemClk:%d\r\n", SystemCoreClock);

? ? printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );

? ? printf("Stop Mode Test\r\n");

? ? rtc_init();

? ? RTC_Alarm(10000);

//? ? EXTI0_INT_INIT();

//? ? Delay_Ms(5000);

//? ? RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

//? ? printf("\r\n ********** \r\n");

//? ? PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);

//? ? printf("\r\n ########## \r\n");


? ? while(1)

? ? {

? ? ? ? Delay_Ms(1000);

? ? ? ? printf("Run in main\r\n");

? ? }

}

這個(gè)是測(cè)試的代碼,本來是用來作為rtthread的pm電源管理的deep喚醒,發(fā)現(xiàn)怎么都喚不醒


您好,可以參考一下附件例程,附件例程測(cè)試喚醒是沒有問題的,如下圖

icon_rar.gifCH32V203 STOP-RTC喚醒.zip

image.png


我測(cè)試了你給的代碼了,就是會(huì)出現(xiàn)進(jìn)入stop后rtc并沒有去定時(shí)喚醒,然后我就先把進(jìn)stop的部分屏蔽,單獨(dú)測(cè)了一下會(huì)不會(huì)定時(shí)打印,但還是不行,但是那個(gè)rtc秒中斷的例程可以運(yùn)行,這樣的情況有沒有可能是電路設(shè)計(jì)的問題導(dǎo)致的,看起來就是rtc沒問題但是鬧鐘中斷無效


您好,例程我這邊測(cè)試過都是沒問題的,定時(shí)10s后喚醒,就是10s后喚醒。正常若直接用例程測(cè)試的話應(yīng)該是沒問題的,你可以將你的現(xiàn)象和我具體描述一下或截圖發(fā)我(lzs@wch.cn)看一下,后面問題也可以通過郵箱溝通。



我把相關(guān)的郵件發(fā)給你了,我看了一下批次號(hào),這個(gè)是第零批的,跟批次號(hào)有關(guān)系么?我同事用的一批次的是沒問題的


您好,已郵件回復(fù)你,你可以按照我郵件回復(fù)試一下,后續(xù)溝通可直接通過郵件溝通。


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频