在主函数中实现
同时实现以下任务
任务1:每隔2秒打印-Hello
任务2:每个5秒打印-Hi
主函数全局变量
//任务标志
int Task1_Sign=0;
int Task2_Sign=0;
//任务计时
u32 count1=0;
u32 count2=0;
主函数中while
//变量Tick为定时器1秒计时中断
while(1)
{
//Task1
if(Task1_Sign==0)
{
if(Tick-count1>=2)//2秒计时
{
Task1_Sign=1;
}
}
else if(Task1_Sign==1)
{
printf("Hello\n");//2秒后打印
Task1_Sign=0;//复位-继续使用
count1=Tick;//更新计数变量
}
//Task2
if(Task2_Sign==0)
{
if(Tick-count2>=5)//5秒计时
{
Task2_Sign=1;
}
}
else if(Task2_Sign==1)
{
printf("Hi\n");//5秒打印
Task2_Sign=0;
count2=Tick;
}
}
以下为定时器1秒中断函数内容:
//Timer2 1s 中断 Timer2 84MHz // APB1 42MHz x 2
void Timer2_Init()
{
RCC->APB1ENR |= 1<<0;
TIM2->PSC=8400-1; //预分频器
//Timer2的参考频率 84Mhz / 8400 = 10000Hz
TIM2->ARR=10000-1; //设定计数器自动重装值
// 1秒产生一次中断
TIM2->DIER |= 1<<0; //允许更新中断
TIM2->CR1 |= 1<<0; //启动定时器
MY_NVIC_InitG2(0,1,TIM2_IRQn);//使能中断向量 配置优先级
}
//Timer2的中断回调函数
void TIM2_IRQHandler(void)
{
//了解是否进入了溢出中断
int r = TIM2->SR & 0x0001;
if(r!=0) //sr 第0位 为1
{
TIM2->SR &= ~(1<<0);//清中断
Tick++;
}
}
//s延时的秒数
void My_Delay_S( u32 s )
{
u32 tmp = Tick;
while(1)
{
if( Tick - tmp >= s )
{
return;
}
}
}