STM32基本定时器

       基本定时器 TIM6 和 TIM7 包含一个 16 位(0~65535)自动重载计数器,该计数器由可编程预分频器驱动。此类定时器不仅可用作通用定时器以生成时基, 还可以专门用于驱动数模转换器 (DAC)。实际上,此类定时器内部连接到 DAC 并能够通过其触发输出驱动 DAC。        这些定时器彼此完全独立,不共享任何资源。

        预分频器寄存器与自动重载寄存器都有一个阴影部分-------影子寄存器

        影子寄存器看不见摸不着、但是值真正起作用的就是影子寄存器、代码运行例如真正的psc为多少,不是由psc寄存器决定的、由psc影子寄存器决定的、影子寄存器的值是多少、真正的分频比就是多少

        影子寄存器的值由psc寄存器(上层寄存器)加载的(产生上溢/下溢更新时才能加载)

Psc一定有影子寄存器、arr可有可无(可软件选择)

 Arr无arr无影子寄存器(缓冲区)的时序图

arr有影子寄存器(缓冲区)的时序图

        没有影子重载寄存器的话,计数器寄存器会立刻变值,而有影子重载寄存器,计数寄存器的值会到下一个更新中断才会改变

做一个us延时函数(中断方式)---TIM6

代码流程:

  1. 打开时钟
  2. 更新禁止(可无)
  3. 更新请求源
  4. 单脉冲
  5. Arr不缓冲
  6. 中断使能
  7. 配置时基单元(cnt psc arr)
  8. 使能
  9. 配置优先级
  10. 写中断服务函数
  11. 延时函数

 

	RCC->APB1ENR|=(1<<4);//time6时钟

 打开时钟

	TIM6->CR1&=~(1<<1);
	TIM6->CR1&=~(1<<2);
	TIM6->CR1&=~(1<<3);
	TIM6->CR1&=~(1<<7);//不进行缓存

更新禁止(可无)更新请求源/单脉冲/Arr不缓冲

 

 

TIM6->DIER|=(1<<0);//中断使能

 中断使能

 

	TIM6->CNT=0;//从0开始计数
	TIM6->PSC=psc-1;
	TIM6->ARR=arr-1;
    TIM6->CR1|=(1<<0);//打开使能

配置时基单元(cnt psc arr)/使能

	NVIC_SetPriority(TIM6_DAC_IRQn,4);//优先级 占先=1 次级=0
	NVIC_EnableIRQ(TIM6_DAC_IRQn);//使能

 配置优先级

u32 time6=0;

//中断服务函数
void TIM6_DAC_IRQHandler (void)
{
	if(TIM6->SR& (1<<0))
	{
		TIM6->SR&=~(1<<0);
		time6--;
	}
}

写中断服务函数

//延时函数
void Time6_Us(u32 ustime)
{
	time6=ustime;
	while(time6);
}

延时函数

完整代码

/*
Function name:Time6_Config
Description:定时器6
param:psc-->分频值-1	arr-->重装载值-1
retval:None
Remarks:TIME6-->84MHz
*/

void Time6_Config(u32 psc,u32 arr)
{
	RCC->APB1ENR|=(1<<4);//time6时钟
	TIM6->CR1&=~(1<<1);
	TIM6->CR1&=~(1<<2);
	TIM6->CR1&=~(1<<3);
	TIM6->CR1&=~(1<<7);//不进行缓存
	TIM6->DIER|=(1<<0);//中断使能
	TIM6->CNT=0;//从0开始计数
	TIM6->PSC=psc-1;
	TIM6->ARR=arr-1;
	TIM6->CR1|=(1<<0);//打开使能
	
	NVIC_SetPriority(TIM6_DAC_IRQn,4);//优先级 占先=1 次级=0
	NVIC_EnableIRQ(TIM6_DAC_IRQn);//使能
}

u32 time6=0;

//中断服务函数
void TIM6_DAC_IRQHandler (void)
{
	if(TIM6->SR& (1<<0))
	{
		TIM6->SR&=~(1<<0);
		time6--;
	}
}

//延时函数
void Time6_Us(u32 ustime)
{
	time6=ustime;
	while(time6);
}

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值