MSP432P401R的systick应用有问题,帮看
#include <msp432p401r.h>#include "CS.h"
static uint8_tfac_us=0; //us延时倍乘数
static uint16_tfac_ms=0;
void Delay_Init()
{
SYSTICK_STCSR |=SYSTICK_STCSR_CLKSOURCE;
fac_us =CS_getMCLK()/1000000;
fac_ms = (uint16_t)(fac_us*1000);
}
void CS_HFXTCLK()
{
CSKEY=CSKEY_VAL; //解锁时钟寄存器
CSCTL2 |=HFXT_EN; //HFXT 打开
do{
CSCLRIFG |= CLR_HFXTIFG | CLR_DCORIFG;//清中断标志位
SYSCTL_NMI_CTLSTAT &= ~ SYSCTL_NMI_CTLSTAT_CS_SRC; //禁止NMI中CS中断
}
while(SYSCTL_NMI_CTLSTAT & SYSCTL_NMI_CTLSTAT_CS_FLG);
CSCTL1 |=(DIVA__32 | SELA__LFXTCLK)|(DIVS__32 | SELS__HFXTCLK)|(DIVM__32 | SELM__HFXTCLK);//选择
CSKEY =0; //锁住时钟寄存器
}
void Delay_ms(uint16_t nms)//// nms<=0xffffff*1000/SYSCLK
{
uint32_t temp;
SysTick->LOAD = (uint32_t)nms*fac_ms; //时间加载
SysTick->VAL= 0X00; //清空计数器
SysTick->CTRL = 0X01; //开始倒数
do
{
temp= SysTick->CTRL ;
}while((temp&0x01)&&!(temp&(1<<16)));//等到时间到达
SysTick->CTRL = 0X00; //关闭计数器
SysTick->VAL= 0X00; //清空计数器
}
void main(void)
{volatile uint32_t i;
WDTCTL = WDTPW | WDTHOLD; // Stop WDT
P1DIR|=BIT0 ; //P1.0设置为输出
P2DIR |=BIT0+BIT1+BIT2; //P2.0,P2.1设置为输出
CS_HFXTCLK();
Delay_Init();
while(1)
{
P2OUT ^= BIT0 ;
Delay_ms(1500);
P2OUT ^= BIT2 ;
Delay_ms(500);
P2OUT ^= BIT1 ;
Delay_ms(300);
P1OUT ^= BIT0 ;
Delay_ms(2000);
}
}
页:
[1]