基本定时器TIM6-TIM7

4.嵌入式单片机之TIM

4.1 Sys Tick定时器

4.1.1 滴答定时器

​ Sys Tick

阈值:24 位数据寄存器 (0-2^24-1(16 777 215))

自动重装载:1000

计数器:计数

分频:1 个系统时钟周期就是 1s/主频 Hz 的时间,

那1 个系统时钟周期就是(1/72 000 000)秒,即 1/72微秒,所以计数 72 000 次时就是 1ms。

主频72MHz,分频72计算时间位1us(72000000/72)

分频72000计算时间位1ms(72000000/72000)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lp1Gc9NQ-1665712461195)(C:\Users\16028\AppData\Roaming\Typora\typora-user-images\image-20220929162120459.png)]

void SysTick_Handler(void){};

4.3 基本定时器

TIM6和TIM7互相独立,不共享任何资源。

阈值:16位(0-65 535)

预分频:16位

主频:72MHz


在这里插入图片描述

4.3.1 代码实现

//TIM6计时器相关配置:
void Tim6_Config(void)
{
	RCC->APB1ENR |=(1<<4);//打开时钟
    //	TIM6控制寄存器
	TIM6->CR1    |=(1<<7);//ARPE:自动重装载预装载使能
	TIM6->CR1    &=~(1<<3);//0:更新时计数器不停止|1:停止
	TIM6->DIER   |=(1<<0);//打开更新中断,DIER:中断使能寄存器
	TIM6->CNT = 0;//计数器
	TIM6->PSC = 72-1;//预分频:PSC+1
	TIM6->ARR =1000-1;//自动重装载
	NVIC_SetPriority(TIM6_IRQn,6);//设置中断优先级
	NVIC_EnableIRQ(TIM6_IRQn);
	TIM6->CR1    |=(1<<0);//计数器使能
	
}
//TIM6的中断服务函数:
uint16_t time=0;
void TIM6_IRQHandler(void)
{
	if(TIM6->SR &(1<<0))//判断状态是否为1
	{
		TIM6->SR &=~(1<<0);//软件清除中断
		time++;
	}
}
//1秒打印一次
if(time>1000){
			printf("忽如一夜春风来,千树万树梨花开\r\n");
			time=0;//重新计数
		}
if(time>1000){
			printf("忽如一夜春风来,千树万树梨花开\r\n");
			time=0;//重新计数
		}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值