首页 > 其他分享 >STM32高级定时器 time1

STM32高级定时器 time1

时间:2023-07-21 23:31:59浏览次数:29  
标签:NVIC 定时器 void time1 STM32 TIM TIM1 GPIO

高级定时器和基本定时器通用定时器有较大区别。

基本定时器就只能进行定时操作。且CNT只能加。

基本定时器能进行定时,PWM的生产,输入捕获啥的

高级定时器能定时/PWM。输入捕获,输出互补和死区刹车的生产。

高级定时器定时器1有4个中断函数/含中断源。

中断源:

TIM1_BRK_IRQn  //打破中断             = 24,     /*!< TIM1 Break Interru   TIM1_UP_IRQn   更新中断//定时            = 25,     /*!< TIM1 Update Inte  TIM1_TRG_COM_IRQn     定时器触发器交换中断      = 26,     /*!< TIM1  TIM1_CC_IRQn    CCR寄存器中断

中断函数:

TIM1_BRK_IRQHandler        ; TIM1 Break

TIM1_UP_IRQHandler         ; TIM1 Update

TIM1_TRG_COM_IRQHandler    ; TIM1 Trigger and Commutation

IM1_CC_IRQHandler


正常定时使用和其他没什么区别,就中断函数,中断源不同

使用:

1:开启相关时钟

2:初始化定时器

3:初始化NVIC

4:选择定时器中断源

5:CMD定时器 开启

时钟计算看参考前面文章

#include "time.h"

/*

函数名:void rgb_init(void)

功能:初始化GPIOB

形参:

*/

void rgb_init(void)

{

 GPIO_InitTypeDef GPIOB_InitStruct;

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//开启GBIOB的时钟

 GPIOB_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;//GPIO模式 推挽

 GPIOB_InitStruct.GPIO_Pin|=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_5;//引脚选择

 GPIOB_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;//输出速度

 GPIO_Init(GPIOB,&GPIOB_InitStruct);

GPIO_SetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_5);//初始化时电平置高//电路驱动默认不启动

}

/*

函数名:void nvic_init(void)

功能:初始化nvic

形参:

*/

void nvic_init(void)

{

NVIC_InitTypeDef NVIC_tim1_InitStruct;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//NVIC分组

NVIC_tim1_InitStruct.NVIC_IRQChannel=TIM1_UP_IRQn;//NVIC中断源选择   //  TIM1_BRK_IRQn  //打破中断             = 24,     /*!< TIM1 Break Interrupt                                 */

                                  //  TIM1_UP_IRQn   更新中断//定时            = 25,     /*!< TIM1 Update Interrupt                                */

                                  //  TIM1_TRG_COM_IRQn     定时器触发器交换中断      = 26,     /*!< TIM1 Trigger and Commutation Interrupt               */

                                  //  TIM1_CC_IRQn    CCR寄存器中断

NVIC_tim1_InitStruct.NVIC_IRQChannelCmd=ENABLE;//开启定时器1的中断

NVIC_tim1_InitStruct.NVIC_IRQChannelPreemptionPriority=2;//分组强

NVIC_tim1_InitStruct.NVIC_IRQChannelSubPriority=2;//子优先

NVIC_Init(&NVIC_tim1_InitStruct);

}

/*

函数名:void time2_init(void)

功能:初始化定时器2

形参:

*/

void time1_init(void)

{

 TIM_TimeBaseInitTypeDef TIM1_TimeBaseInitStruct;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);//开启定时器2的时钟

 TIM1_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;//定时器不分频  分频 系统时钟/分频

 TIM1_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;//计时模式 向上

 TIM1_TimeBaseInitStruct.TIM_Period=719;//per 预分系数    决定频率  

 TIM1_TimeBaseInitStruct.TIM_Prescaler=9999;//arr 重载值   实际计算 定时器时钟/arr+1/per+1=时间    1/时间=

 TIM1_TimeBaseInitStruct.TIM_RepetitionCounter=0;

 TIM_TimeBaseInit(TIM1,&TIM1_TimeBaseInitStruct);

 TIM_ITConfig(TIM1,TIM_IT_Update, ENABLE);//开启定时器2的中断

 TIM_Cmd(TIM1,ENABLE);//定时器开始定时

}

/*

函数名:TIM2_IRQHandler(void)

功能:定时器2中断 0.1S进入中断

形参:

*/

u16 temp=0;

void TIM1_UP_IRQHandler(void)  //有4个不同的中断函数

{  


 if(TIM_GetITStatus(TIM1,TIM_IT_Update))

 {

 temp++;

 if(temp<10)

 {

  GPIO_SetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_5);

 }

 else if(temp>10&&temp<=20)

 {

  GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_5);

  if(temp>=20)

  {

   temp=0;

  }

 }


 }

 TIM_ClearITPendingBit(TIM1,TIM_IT_Update);

}

MAIN使用

NVIC在定时器初始化前就好了。





标签:NVIC,定时器,void,time1,STM32,TIM,TIM1,GPIO
From: https://blog.51cto.com/u_15919473/6808405

相关文章

  • STM32F103 点亮LED闪烁与仿真
    今天给大家分享一下STM32流水灯简单的仿真吧,我感觉这个提供有用的,但是自己也是第一次使用,主要是感觉曲线很高级。在PWM中查看脉宽很有用。code:led.c#include"led.h"#include"delay.h"/*GPIO的控制寄存器的配置1、配置输出引脚2、打开对应的输出的寄存器的时钟3、配置引脚......
  • STM32F103内部FLASH及地址表
    在我们应用开发时,经常会有一些程序运行参数需要保存,如一些修正系数。这些数据的特点是:数量少而且不需要经常修改,但又不能定义为常量,因为每台设备可能不一样而且在以后还有修改的可能。将这类数据存在指定的位置,需要修改时直接修改存储位置的数值,需要使用时则直接读取,会是一种......
  • STM32HAL库使用SPI驱动1.44寸TFTLCD
      关于STM32F4单片机,使用HAL库自带的SPI,驱动TFTLCD屏幕的资料网上好像不太多,正好最近我做了这项工作,把成果分享给大家。我的代码实现了这些功能:任意坐标画点,指定首尾坐标画线,画方框,指定区域显示彩图,显示16*16或者12*12的汉字、ASCII码,并附带ASCII码表与少量的汉字字库。......
  • 【STM32】使用STM32提供的DSP库进行FFT(附详细代码)
    最近,因为项目需要在STM32F103系列处理器上,对采集的音频信号进行FFT运算,然而STM32F103毕竟不是STM32F4系列的处理器,对于一般的FFT运算程序还是比较缓慢的。幸亏官方提供了针对FFT的官方库,但是去官网找了半天居然找不到那个库的下载,好像官方早就把那个库下架了,估计是为了给带D......
  • STM32CubeMx LL库BUG之一
    STM32CubeMx是目前最新的V5.5STM32F407,输出LL库,使用FreeRTOS,任务堆栈大小错误:在STM32CubeMx上任务堆栈的单位是word,即4个byte。但是实际上这里的单位是byte,就是说你设置256的话(即1024bytes),实际上给你生成的代码只有256byte,这可能导致任务堆栈溢出,发生各种各样的问题,最常......
  • 使用 STM32 测量频率和占空比的几种方法
    这几天在论坛上面解答了好几个询问STM32测量频率的贴子,觉得这种需求还是存在的(示波器、电机控制等等)。而简单搜索了一下论坛,这方面的贴子有但是不全。正好今年参加比赛做过这方面的题目(最后是一等奖嘿嘿),所以把我们当时尝试过的各种方案都列出来,方便以后大家使用,也是作为一个长期在......
  • STM32 F103 高效与入门
     1 入门写法 2高效写法 #defineOS_LED_ONGPIO_SetBits(GPIOA,GPIO_Pin_11)#defineOS_LED_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_11)//(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_11)==SET)?OS_LED_ON:OS_LED_OFF;//(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_11)==SE......
  • Freertos学习09-软件定时器
    一、概述软件定时器是一种在单片机上实现定时功能的方法,可以用于周期性地执行任务或者延时执行任务。软件定时器由FreeRTOS内核实现,不需要硬件支持。软件定时器只有在软件定时器回调函数被调用时才需要占用CPU时间。本节主要设计以下内容:软件定时器的API介绍实例测试......
  • 51单片机-利用定时器控制LED灯轮闪
    #include"reg52.h"//#include"delay.h"#include"intrins.h"#include<stdio.h>typedefunsignedintu16;typedefunsignedcharu8;typedefunsignedintuint;typedefunsignedcharuchar;#defineLED_PORTP2#defineSM......
  • STM32中包含的c语言基础知识(2023/7/19)
     关键字为c语言中的应用,表示的范围根据使用的范围不同,也发生了相应的变化,比如char本来是用来表示字符的,现在也可以用来表述数字;int在c中是16位的,在32中表示32位,long和int的长度相同,longlong基本不使用。stdint关键字的库文件给我们提供的,ST文件是以前的库文件用的命名方式,现在......