请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP432P401R 工具/软件:Code Composer Studio
关于Systick计时器频率的问题。
首先,我使用DCO生成8.33M MCLK,然后将Systick计时器配置为每0.5秒生成一个中断。 程序运行后LED指示灯以达到0.5秒的闪烁。 该代码如下所示:
int main (void)
{
/*停止监视程序*/
MAP_WDT_A_HoldTimer();
/*将GPIO配置为输出*/
MAP_GPIO_setAsOutputPin (GPIO端口P1,GPIO _PIN0);
//![简单FPU配置]
/*为DCO频率计算启用FPU */
MAP_FPU_enableModule();
MAP_CS_setDCOCenteredFrequency (833万);
/*配置Systick在416.5万时触发(MCLK为8.33MHz,因此这将是
*每~0.5秒切换一次)*/
MAP_Systick_enableModule();
//map_Systick_setPeriod (416.5万);
MAP_Systick_setPeriod (416.5万);
MAP_Interrupt_enableSleepOnIsrExit();
MAP_Systick_enableInterrupe();
/*启用主中断*/
MAP_Interrupt_enableMaster();
MCLK = CS_getMCLK();
同时(1)
{
MAP_PCM_GotoLPM0();
}
}
作废Systick_Handler(void){
MAP_GPIO_toggleOutputOnPin (GPIO_PORT_P1, GPIO_PIN0);
}
然后我将DCO计时为48M,为了使系统计时器产生0.5 中断,我将系统计时器的周期设置为MCLK的一半:“系统计时器”(2400万);
程序运行后,LED指示灯快速闪烁,显然Systick计时器中断不是0.5秒。
我想知道如何解决这个问题。 我的Systick计时器驱动时钟是否错误?
该代码如下所示:
int main (void)
{
/*停止监视程序*/
MAP_WDT_A_HoldTimer();
/*将GPIO配置为输出*/
MAP_GPIO_setAsOutputPin (GPIO端口P1,GPIO _PIN0);
//![简单FPU配置]
/*为DCO频率计算启用FPU */
MAP_FPU_enableModule();
MAP_PCM_setCoreVoltageLevel (PCM_VCORE1);
MAP_FlashCTL_setWaitState(FLASH_BANK0, 2);
MAP_FlashCTL_setWaitState(FLASH_Bank1,2);
/*将DCO频率设置为非标准48MHz */
/*初始化时钟系统*/
MAP_CS_setDCOCenteredFrequency (CS_DCO_Frequency_48);
MAP_CS_INITClockSignal (CS_MCLK, CS_DCOCLK_SELECT, CS_CLOCK分隔符_1);
MAP_CS_initClockSignal (CS_HSMCLK, CS_DCOCLK_SELECT, CS_CLock_diver_1 );
MAP_CS_initClockSignal (CS_SMCLK, CS_DCOCLK_SELECT, CS_CLock_diver_1 );
MAP_CS_INITClockSignal (CS_ACLK,CS_REFOCLK_SELECT,CS_CLock_diver_1);
//![简单FPU配置]
/*将Systick配置为在2400万时触发(MCLK为48MHz,因此这将是
*每~0.5秒切换一次)*/
MAP_Systick_enableModule();
MAP_Systick_setPeriod (2400万);
MAP_Interrupt_enableSleepOnIsrExit();
MAP_Systick_enableInterrupe();
/*启用主中断*/
MAP_Interrupt_enableMaster();
MCLK = CS_getMCLK();
同时(1)
{
MAP_PCM_GotoLPM0();
}
}
作废Systick_Handler(void){
MAP_GPIO_toggleOutputOnPin (GPIO_PORT_P1, GPIO_PIN0);
}