本次实验使用RTC模块产生100ms的计数中断驱动板上的LED2闪烁,同时使能了PA13端口上的RTC_CLKOUT。利用逻辑分析仪捕捉这两个端口上的信号,过程中分别使用了APB时钟(24MHz)、LSI时钟(32KHz)进行对比。具体实验过程如下:
一、实验资源
1、AC7801x开发板;
2、AutoGen Studio 1.3.0;
3、KEIL 5.28.0.0;
4、ST-LINK2;
5、逻辑分析仪;
二、资源简介
模块功能比较简单,在“Standby”Standby低功耗模式下可保持运行并唤醒MCU。
RTC支持多种时钟源,实验中分别选用了24MHz的APB时钟和32KHz的LSI时钟。下面是官方文档中的一些相关说明,对于RTC模块的使用具有指导作用。
三、代码实现
24MHz的APB时钟配置:
void ATC_RTC_Init(void)
{
RTC_ConfigType rtcConfig;
MSP_RTC_Init(RTC);
rtcConfig.clockSource = RTC_CLOCK_APB;
rtcConfig.rtcOutEn = ENABLE;
rtcConfig.rtcInterruptEn = ENABLE;
rtcConfig.psrInterruptEn = ENABLE;
rtcConfig.periodValue = 99;
rtcConfig.psrValue = 23999;
rtcConfig.callBack = RTC_IRQHandler_Callback;
RTC_Init(&rtcConfig);
}
32KHz的LSI时钟配置:
void ATC_RTC_Init(void)
{
RTC_ConfigType rtcConfig;
MSP_RTC_Init(RTC);
rtcConfig.clockSource = RTC_CLOCK_LSI;
rtcConfig.rtcOutEn = ENABLE;
rtcConfig.rtcInterruptEn = ENABLE;
rtcConfig.psrInterruptEn = ENABLE;
rtcConfig.periodValue = 9;
rtcConfig.psrValue = 319;
rtcConfig.callBack = RTC_IRQHandler_Callback;
RTC_Init(&rtcConfig);
}
中断回调:
/**
* [url=home.php?mod=space&uid=247401]@brief[/url] This function handle RTC interrupt.
* @param[in] device: RTC_Type pointer
* @param[in] wpara: callback parameter
* @param[in] lpara: callback parameter
* [url=home.php?mod=space&uid=266161]@return[/url] none
*/
void RTC_IRQHandler_Callback(void *device, uint32_t wpara, uint32_t lpara)
{
if (wpara & RTC_SC_RPIF_Msk)
{
/* USER CODE BEGIN PRESCALER INTERRUPT */
/* USER CODE END PRESCALER INTERRUPT */
}
if (wpara & RTC_SC_RTIF_Msk)
{
/* USER CODE BEGIN OVERFLOW INTERRUPT */
if(LED2_flag)
{
LED2_flag=0;
GPIO_SetPinBit(GPIOC, GPIO_PIN9);
}
else
{
LED2_flag=1;
GPIO_ResetPinBit(GPIOC, GPIO_PIN9);
}
/* USER CODE END OVERFLOW INTERRUPT */
}
/* USER CODE BEGIN RTC_IRQHandler_Callback */
/* USER CODE END RTC_IRQHandler_Callback */
}
四、实验结果
24MHz的APB时钟:
32KHz的LSI时钟:
通过对比发现,LSI时钟与预期数值误差相对略大一点。
五、实验总结
本次实验内容比较简单,但是整个过程还是学习了很多知识,对AC7801x微控制器也多了份了解。
另外,上次实验后开发板出了点问题,无论是J-LINK还是ST-LINK都无法识别芯片了。本次实验程序的下载都是采用先按住开发板上的复位键,然后再点击“download”,紧接着就是掌握好火候松开复位键,程序便可以下载并且能正常运行。不知是什么原因造成的,电脑重新开机也不行。玩着有点累了。如:
|