初级会员

- 积分
- 53
- 金钱
- 53
- 注册时间
- 2013-7-30
- 在线时间
- 0 小时
|
用的stm32f103t8,已经把程序最简化了,参考原子老师的程序,用systick写的延时程序,还有用定时器定时后定时时间也不对!不知道问题出在哪?
int main(void)
{
SystemInit();
delay_init();
// TIM_DeInit(TIM3);
// Timer3_Int_Init(49, 7199); //timer3定时5ms中断,
Led_Init();
while(1)
{
u32 systimer;
delay_ms(1);
systimer = SystemCoreClock;
LED2 = !(LED2);
}
}
void delay_init()
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //选择外部时钟 HCLK/8
fac_us=SystemCoreClock/8000000; //为系统时钟的1/8
fac_ms=(u16)fac_us*1000;//每个ms需要的systick时钟数
}
void delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD=(u32)nms*fac_ms;//时间加载(SysTick->LOAD为24bit)
SysTick->VAL =0x00; //清空计数器
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //开始倒数
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}
----------------------------------------------
软件仿真都是对的,烧到板子上后设定延时1ms,实际7.2ms?
请问原子老师问题可能出在哪?
|
|