昨天移值UC/OS,发现SysTick不能工作,芯片不停复位,打开就不停的复位。
中断函数
void SysTick_Handler(void)
{
TimingDelay_Decrement();
}
初始化函数
void SysTick_Init(void)
{
/* SystemFrequency / 1000 1ms中断一次
* SystemFrequency / 100000 10us中断一次
* SystemFrequency / 1000000 1us中断一次
*/
if (SysTick_Config(SystemFrequency / 100000))
{
/* Capture error */
while (1);
}
}
/*
* 函数名:Delay_us
* 描述 :us延时程序,10us为一个单位
* 输入 :- nTime
* 输出 :无
* 调用 :Delay_us( 1 ) 则实现的延时为 1 * 10us = 10us
* :外部调用
*/
void Delay_us(__IO u32 nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}
/*
* 函数名:TimingDelay_Decrement
* 描述 :获取节拍程序
* 输入 :无
* 输出 :无
* 调用 :在 SysTick 中断函数 SysTick_Handler()调用
*/
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
int main(void)
{
/* config the sysclock to 72mhz */
SystemInit();///使用本论坛里的108M时钟,这个时钟可以使用,另外一个实验用软延时可以跑
/* config led gpio */
LED_GPIO_Config();
/* 配置SysTick 为10us中断一次 */
SysTick_Init();
while (1)
{
//SysTick->CTRL = 1 << SYSTICK_ENABLE; // 使能滴答定时器
LED1( 0 );
Delay_us(50000); // 50000 * 10us = 500ms
LED1( 1 );
LED2( 0 );
Delay_us(50000); // 50000 * 10us = 500ms
LED2( 1 );
LED3( 0 );
Delay_us(50000); // 50000 * 10us = 500ms
LED3( 1 );
//SysTick->CTRL = 0 << SYSTICK_ENABLE; // 失能滴答定时器
}
}
|