32如何利用定时器执行不同的任务

//首先我们要了解什么是系统时钟--------建议网上直接搜索,最好看你所用的芯片型号的规格书
//首先还是一如既往地固定套路 定时器初始化 —> 定时器中断优先级—>定时器中断处理函数
void TIM3_init(u16 arr,u16 psc)//这里是定时器的初始化函数,初学者最好理解透(看规格书、看视频找资料等) 固定的套路
{
*( volatile unsigned int *) 0x4002101C |= 1<<1; //这里直接操作寄存器地址,当初为了更好的理解下面写法的道理找了很久
TIM3->ARR=arr; //设定计数器自动重装值
TIM3->PSC=psc; //预分频器设置
TIM3->DIER|=1<<0; //允许更新中断
TIM3->CR1|=0x01; //使能定时器3
NVIC_Init(1,3,TIM3_IRQn,2);//抢占1,子优先级3,组2 //这里中断优先级配置
}

uint16_t time = 0;//这个要在对应的头文件里设置外部能调用 extern uint16_t time;
u8 flag_1ms = 0;//这个要在对应的头文件里设置外部能调用 extern u8 flag_1ms;
//定时器3中断服务程序
void TIM3_IRQHandler(void)
{
if(TIM3->SR&0X0001)//溢出中断
{
time++;
flag_1ms = 1;
}

TIM3->SR&=~(1<<0);//清除中断标志位 	    

}

void mission_1ms(void)//你可以定一个1ms的标志位,把1ms执行一次的函数都放到这里面来
{
//1ms做一次某任务
if(flag_1ms)
{
zuoaizuodeshi();
jiaopeijiaoderen();
tingxiangtingdege();
kanxiangkandedianying();
//…等等;
}
}

void mission_anytime(void)//也可以任意定时间做某事
{
if(time >= 1)//每隔1ms做某事
{
time = 0;//计数累加到某一个值清零一次
zuoaizuodeshi();
jiaopeijiaoderen();
tingxiangtingdege();
kanxiangkandedianying();
//…等等;
}

	//注意以下情况:time用过一次了。上面已经把time清零了,所以下面的函数怎么加也加不到10,下面的函数是错误示范(不能同时用一个time,那么你可以在中断处理函数中再加一个time1,不过不能加太多,这样也会导致定时器中断处理任务太多超过定时的1ms)
	if(time >= 10)//每隔10ms做某事
{
	time  = 0;//计数累加到某一个值清零一次
	zuoaizuodeshi();
	jiaopeijiaoderen();
	tingxiangtingdege();
	kanxiangkandedianying();
	//.......等等;
}

}

int main (void)
{
TIM3_init(1000-1,72-1);//这里根据对应定时器的自动重装载值和预分频值得到每1毫秒执行一次TIM3中断里的事情
/这个主要看你芯片的规格和晶振的那个,
我的是72MHz的频率:那么720000/预分频值 = 10000Hz,也就是每秒频率变化10k次(从10000递减到0),那么每毫秒频率变化多少次?(1秒 = 1000毫秒,那么1ms的重装载值是多少?1000嘛,但是计数应该是从(1000-1)递减到0)
/
while(1)
{
zuoaizuodeshi();
jiaopeijiaoderen();
tingxiangtingdege();
kanxiangkandedianying();
//…等等;
mission_1ms();//这里注意要在主函数中调用1ms任务函数
}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值