打印
[APM32F4]

【APM32F402R Micro-EVB】-5-RTC Alarm体验

[复制链接]
55|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
RTC(实时时钟)是嵌入式系统中的重要组件,用于提供精确的时间跟踪功能,即使在系统关机时也能保持准确。 RTC通常由一个专用的硬件模块组成,用于跟踪当前的年、月、日、时、分、秒以及星期等时间信息。在嵌入式系统中,RTC的应用非常广泛,包括记录事件的时间戳、执行定时任务、调度系统操作等等。

APM32F402R的RTC模块框图如下:


本次实验是开发板KEY1按下后,启动5s的定时alarm。

按键初始化:
BOARD_BUTTON_Config(BUTTON_KEY1, BUTTON_MODE_EINT);

按键KEY1的ISR:
/*!
* [url=home.php?mod=space&uid=247401]@brief[/url]     This function handles EINT1 Handler
*
* @param     None
*
* @retval    None
*
*/
void EINT1_IRQHandler(void)
{
    Button1_Isr();
}

ISR回调:
void Button1_Isr(void)
{
    if(EINT_ReadIntFlag(KEY1_BUTTON_EINT_LINE) == SET)
    {
        uint16_t time = RTC_ReadCounter();
        RTC_ConfigAlarm(time + 5);
        RTC_WaitForLastTask();

        printf("Alarm will be triggered in 5 second.\r\n");
        EINT_ClearIntFlag(KEY1_BUTTON_EINT_LINE);
    }
}

RTC模块初始化如下:
/**
* [url=home.php?mod=space&uid=247401]@brief[/url]   RTC Configuration
*
* @param   None
*
* @retval  None
*/
void RTC_Config(void)
{
    RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_PMU);

    /* unLock RTC write protection */
    PMU_EnableBackupAccess();
    RCM_EnableLSI();
    while(RCM_ReadStatusFlag(RCM_FLAG_LSIRDY) == RESET);
    RCM_ConfigRTCCLK(RCM_RTCCLK_LSI);
    RCM_EnableRTCCLK();

    /* Wait for RTC clock source synchro */
    RTC_WaitForSynchro();
    RTC_WaitForLastTask();

    RTC_ConfigPrescaler(50000);
    RTC_WaitForLastTask();

    /* Configure counter 0 */
    RTC_ConfigCounter(0);
    RTC_WaitForLastTask();

    /* Enable RTC alarm interrupt */
    RTC_EnableInterrupt(RTC_INT_ALR);
    RTC_WaitForLastTask();

    NVIC_EnableIRQRequest(RTC_IRQn, 0, 0);
}

RTC模块中断服务函数:
/**
* @brief   RTC interrupt server
*
* @param   None
*
* @retval  None
*/
void RTC_Isr(void)
{
    if(RTC_ReadIntFlag(RTC_INT_ALR))
    {
        printf("Alarm arrives!\r\n");
        RTC_ClearIntFlag(RTC_INT_ALR);
    }
}

实物演示:

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

69

主题

290

帖子

2

粉丝