请教,为什么我这样写嘀嗒定时器不能运行呢,死在延时那里,死循环了?
delay.c文件如下 :
#include "delay.h"
static __IO uint32_t TimingDelay;
void delay_us(uint32_t nTime){ TimingDelay = nTime; SysTick->LOAD=9*nTime; //ê±¼ä¼óÔØ SysTick->VAL=0x00; //Çå¿Õ¼ÆêyÆ÷ SysTick->CTRL=0x00000003;
while(TimingDelay != 0); SysTick->CTRL = 0x00000002; SysTick->VAL=0x00; }
void delay_ms(uint32_t n){ uint16_t i; for(i=1000;i>1;i--) delay_us(1000); }
/** * @brief Decrements the TimingDelay variable. * @param None * @retval None */void TimingDelay_Decrement(void){ if (TimingDelay != 0x00) { TimingDelay--; } }
delay.h文件如下 :
#ifndef __SYSTICK_H#define __SYSTICK_H
#include "stm32f10x.h"
void Systick_Init(void);void delay_us(uint32_t nTime);void delay_ms(uint32_t nTime); void TimingDelay_Decrement(void);
#endif /* __SYSTICK_H */
中断函数
void SysTick_Handler(void)
{
TimingDelay_Decrement( );
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
void Delay_us(uint16_t nTime)
{
TimingDelay = nTime/1000;
SysTick->LOAD=9*nTime; //ê±¼ä¼óÔØ
SysTick->VAL=0x00; //Çå¿Õ¼ÆêyÆ÷
SysTick->CTRL=0x00000003;
while(TimingDelay !=0);
SysTick->CTRL = 0x00000000;
SysTick->VAL=0x00;
}
改成这样就OK了,SysTick->LOAD = 9 * nTime;意思是9表示1US计数个数,9 * nTime表示多少个US中断一次。
一周热门 更多>