问题1:晶振引脚设置第二功能需要设置输出么?
问题2:可以同时使用外部高速和低速时钟么?
问题3:本程序问题出现哪里帮我看看,弄了好几天
#include
#include "CS.h"
static uint8_t fac_us=0; //us延时倍乘数
static uint16_t fac_ms=0;
void Delay_Init()
{
SYSTICK_STCSR |=(SYSTICK_STCSR_CLKSOURCE+SYSTICK_STCSR_ENABLE);
fac_us =CS_getMCLK()/1000000;
fac_ms = (uint16_t)(fac_us*1000);
}
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 CS_HFXTCLK()
{
PJSEL0 |= BIT2 + BIT3;
PJSEL1 &= ~(BIT2+ BIT3); //设置晶振引脚
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__REFOCLK)|(DIVS__32 | SELS__HFXTCLK)|(DIVM__8 | SELM__HFXTCLK);
CSKEY =0; //锁住时钟寄存器
}
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)
{
P1OUT ^= BIT0 ;
Delay_ms(1000);
}
}
首先,楼主您的这个msp432p401r没用过,但是看文档中说是没有外部晶振的。而且SysTick counterr reload 与STRVR、和 STCSR 这两个寄存器有关。