ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
20 мая
1304009 Топик полностью
m9rs (25.04.2023 20:09, просмотров: 295) ответил AlexG на Кто-нибудь запускал в CH32* RTC? Что-то я споткнулся на ожидании выставления бита RSF в регистре CTLRL (не выставляется)
У меня работает прерывание от RTC чтоб пробуждать из спящего режима. 

Взял за основу код из примера, но у меня он работает от встроенного генератора на 40 кГц

Вот код инициализации, ещё код для контроллера прерываний и само прерывание:

void RTC_Init(void)
{

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
PWR_BackupAccessCmd(ENABLE);

/* Is it the first configuration */

BKP_DeInit();
RCC_LSICmd(ENABLE);
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
RCC_RTCCLKCmd(ENABLE);
RTC_WaitForLastTask();
RTC_WaitForSynchro();
RTC_ITConfig(RTC_IT_SEC, ENABLE);
RTC_WaitForLastTask();
RTC_EnterConfigMode();
RTC_SetPrescaler(800); // 20 msec
RTC_WaitForLastTask();
RTC_SetCounter(0);
RTC_WaitForLastTask();
RTC_ExitConfigMode();
BKP_WriteBackupRegister(BKP_DR1, 0XA1A1);

RTC_NVIC_Config();
}
static void RTC_NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure = {0};
NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void RTC_IRQHandler(void)
{
uint16_t port;
port = (uint16_t)(GPIOA->INDR);
port ^= 0x00FC;
GPIOA->OUTDR = port;
RTC_ClearITPendingBit(RTC_IT_SEC|RTC_IT_OW);
RTC_WaitForLastTask();
}