STM32定时器

一、STM32家族中共有11个定时器,其中VBT6中含有7个定时器

11个引脚的分类:
高级引脚:Tim1、Tim8
通用引脚:Tim2、Tim3、Tim4、Tim5
基本引脚:Tim6、Tim7
两个看门狗:IWDG(独立看门狗)、WWDG(窗口看门狗)
一个sysTick定时器(属于内核)——(系统滴答定时器)

1、VBT6中7个定时器:

通用16bit定时器:2、3、4
高级16bit定时器:1
2个看门狗
1个sysTick定时器

2、看门狗:

看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数器,一般给看门狗一个
数字,程序开始运行后看门狗开始计数。如果程序运行正常,过一段时间CPU应发出指令让看门狗置零,重新开始
计数。如果看门狗增加到设定值就认为程序没有正常工作,强制整个系统复位。

二、tim初始化:

1、打开tim时钟
2、结构体参数初始化
3、结构体参数应用于硬件
4、使能(ENABLE)tim工作状态调至enable

1、定时器初始化:1ms

void TIM_init(void)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
	TIM_TimeBaseInitStruct.TIM_Prescaler = 72 - 1;  //预分频器的值
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;   //CNT工作模式,向上模式
	TIM_TimeBaseInitStruct.TIM_Period = 1000 - 1; //pre预装载器的值	
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);
	TIM_Cmd(TIM2, ENABLE);
}
//tim

2、查询法使用定时器的两个函数
FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);  //获取定时器的状态位
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);                    //状态位清零
 

//1ms定时器调出500ms定时器
	while(1)
	{
		if(TIM_GetFlagStatus(TIM2, TIM_FLAG_Update) == SET)
		{
			TIM_ClearFlag(TIM2, TIM_FLAG_Update);
			flag++;
		}
		if(flag >= 500)   //单片机中判断等于某值时,一般不用等于,用>=
		{
			GPIO_WriteBit(GPIOE, GPIO_Pin_12, !GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_12));
			flag = 0;
		}
	}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32定时器STM32微控制器中的一个非常重要的模块,它可以用来生成精确的时钟信号,并且可以实现很多不同的功能。 STM32定时器主要分为两种类型:基本定时器和通用定时器。基本定时器只有一个计数器,而通用定时器则有多个计数器,并且支持更多的功能。具体可以根据实际需要选择使用哪种类型的定时器。 在STM32中使用定时器可以通过以下步骤完成: 1. 配置定时器的时钟源和分频系数; 2. 设置定时器计数器的初始值和自动重载值; 3. 开启定时器中断(可选); 4. 启动定时器。 例如,以下是使用STM32的基本定时器TIM6进行定时中断的代码: ```c #include "stm32f10x.h" void TIM6_IRQHandler(void) { // 定时器中断处理函数 } int main(void) { // 使能TIM6的时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); // 配置TIM6的时钟源为内部时钟,分频系数为72 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; TIM_TimeBaseInitStruct.TIM_Prescaler = 72 - 1; TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInitStruct.TIM_Period = 1000 - 1; TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInit(TIM6, &TIM_TimeBaseInitStruct); // 开启TIM6的更新中断 TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE); // 启动TIM6 TIM_Cmd(TIM6, ENABLE); while (1) { // 程序主循环 } } ``` 在上面的代码中,我们使用了STM32的库函数来配置和控制定时器,首先通过RCC_APB1PeriphClockCmd函数使能了TIM6的时钟,然后使用了TIM_TimeBaseInit函数来配置了定时器的时钟源、分频系数、计数器自动重载值等参数,然后开启了定时器的更新中断,并且最后启动了定时器。在定时器中断处理函数中可以编写需要定时执行的代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Star星屹程序设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值