STM32通用定时器(TIM2-5)基本用法

发布者:浊酒最新更新时间:2016-08-05 来源: eefocus关键字:STM32  通用定时器  TIM2-5 手机看文章 扫描二维码
随时随地手机看文章
STM32的定时器是个强大的模块,定时器使用的频率也是很高的,定时器可以做一些基本的定时,还可以做PWM输出或者输入捕获功能。从系统框架图下看,名为TIMx的有八个,其中TIM1和TIM8挂在APB2总线上,而TIM2-TIM7则挂在APB1总线上。其中TIM1&TIM8称为高级控制定时器(advanced control timer).他们所在的APB2总线也比APB1总线要好。APB2可以工作在72MHz下,而APB1最大是36MHz。

STM32通用定时器(TIM2-5)基本用法


   由上图可知,当APB1 的预分频系数为1 时,这个倍频器不起作用,定时器的时钟频率等于APB1 的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8 或16)时,这个倍频器起作用,定时器的时钟频率等于APB1 的频率两倍。也就是,当APB1不分频,TIM3的时钟速度为36MHz,当2分频是,APB1变成18MHz,但是TIM又会倍频,即TIM时钟等于18*2=36MHz。这里我们用向上计数的方式,即TIMx_CNT中的计数值达到TIMx_ARR中的值时,产生中断,TIMx_CNT又从0开始计。

 

按以下步骤编程:
1.系统初始化,主要初始化时钟等。

2.GPIO初始化,用于LED,有了灯就便于观察了。

3.TIM3的配置。

4.NVIC的配置。

5.编写中断服务函数。

 

void GPIO_PA_Init()
{//PA8管脚配置
 GPIO_InitTypeDef GPIO_InitStructure;
 GPIO_DeInit(GPIOA);
 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP ;//推挽输出
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);//使能端口时钟A
 GPIO_Init(GPIOA, &GPIO_InitStructure);
}

void TIMER3_Init()
{
 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
 TIM_DeInit(TIM3);
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
 TIM_TimeBaseStructure.TIM_Period=10000;//ARR的值
 TIM_TimeBaseStructure.TIM_Prescaler=7200-1;
 TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
 TIM_Cmd(TIM3, ENABLE); //开启时钟
}

void NVIC_Configuration()
 
 NVIC_InitTypeDef NVIC_InitStructure;
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);   // 抢占式优先级别 
 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel;//指定中断源
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;// 指定响应优先级别1
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 NVIC_Init(&NVIC_InitStructure);
}

int main(void)
    
 Stm32_Clock_Init(9); //系统时钟设置
 delay_init(72);      //延时初始化
 GPIO_PA_Init();
 TIMER3_Init();
 NVIC_Configuration();
 while(1); 
}

void TIM3_IRQHandler()
{
 if(TIM_GetITStatus(TIM3 , TIM_IT_Update) == SET)
 {
  TIM_ClearITPendingBit(TIM3 , TIM_FLAG_Update);
  if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_8)) GPIO_ResetBits(GPIOA, GPIO_Pin_8);
  else GPIO_SetBits(GPIOA, GPIO_Pin_8);
 }
}

关键字:STM32  通用定时器  TIM2-5 引用地址:STM32通用定时器(TIM2-5)基本用法

上一篇:stm32F407的TIM定时器输出PWM波
下一篇:TIM通用定时器:PWM输入捕获模式

推荐阅读最新更新时间:2024-03-16 15:03

毕业设计| STM32蓝牙智能小车
+ 功能描述 蓝牙智能小车由STM32微处理器、步进电机、蓝牙,L298N等模块构成的:1)采用STM32微处理器为核心,在MDK环境下进行编程。2)通知控制L298N模块IN1~IN4引脚的高低电平进而控制电机的转动方向,使小车产生不同的转动模式。3)控制小车的转动模式则是通过蓝牙模块来实现,利用手机蓝牙助手和蓝牙模块相通,进而控制小车的各种运转模式。 + 整体框架 下面的图把核心连接部分都画出来了(其他部分按要求接就可以了,Vcc接电源,GND接地即可),图画的有点丑,希望大家不要介意呀( - ) + 硬件设计 1)芯片连接 使用微控制器为STM32F103RC,芯片上所连接的部分: PC10 - IN1;
[单片机]
毕业设计| <font color='red'>STM32</font>蓝牙智能小车
STM32 HAL库 USB CDC程序只能接收一次数据
使用STM32Cube生成了USB CDC基础代码,HAL库版本号为1.6.0 SELF_POWERED: ENABLE Physical: interface phy_itface 将初始化好的代码编译下载到设备中可直接接入计算机,并安装stsw-stm32102-VCP软件,配置该软件目录下的stmcdc.inf文件将其中的VID和PID配置为与设备相同的ID号,然后安装32位或者64位dpinst程序即可成功安装驱动。 stm32vcp程序实际上使用了windows的usbser.sys文件,因此使用精简版系统的需要自行安装usbser这个驱动文件。 接下来打开串口助手,打开对应的串口号,发送一组数据。在设备的u
[单片机]
基于STM32的USB枚举过程学习笔记(二)
接下来介绍USB设备的枚举,枚举就是从设备读取各种描述符信息,这样主机就可以根据这些信息来加载合适的驱动,从而知道是什么样的设备,如何进行通信。 枚举过程使用的是控制传输。控制传输可以保证数据的正确性。控制传输分三个过程:建立过程,可选数据过程及状态过程。 下面介绍枚举的详细过程。 USB主机检测到USB设备插入后,就会先对设备复位,并通过一个带数据过程的控制传输完成设备描述符的获取。 第一步,USB主机会往地址0的端点0发送获取设备描述符的标准请求,发送请求属于控制传输的建立过程。建立过程是一个事务。首先是令牌包,即主机发送一个SETUP令牌,令牌的格式如上一篇描述的那样,有令牌的PID,地址和端点号等;其次是
[单片机]
基于<font color='red'>STM32</font>的USB枚举过程学习笔记(二)
这样学习STM32单片机,从菜鸟到牛人很简单!
我想说,为了学习单片机而去学习单片机的思路不对。 你问,如何系统地入门学习stm32呢?应该如何零基础学习电子产品设计呢? 这本身就是一个错误的问题。假如你会使用8051 , 会写C语言,那么STM32本身并不需要刻意的学习。 你要考虑的是, 我可以用STM32实现什么?创客学院带你走进stm32世界 为什么使用STM32而不是8051?是因为51的频率太低,无法满足计算需求?是51的管脚太少,无法满足众多外设的IO?是51的功耗太大,电池挺不住?是51的功能太弱,而你要使用SPI、I2C、ADC、DMA?是51的内存太小而你要存储的东西太多? 当你需要使用STM32某些功能,而51实现不了的时候, 那STM3
[单片机]
STM32 RTC时钟源LSE
一开始,所有实验都是在神舟板上去完成,根本就没有发现RTC的问题。直到我们自己画板来后调试时,才发现STM32 RTC的外部时钟源存在问题。 这也算是STM32的一个鸡肋,对于LSE外部晶振太过于苛刻,手册上要求使用6pf,这个规格的晶振市场上太少,鱼龙混杂,中招的高手菜鸟不在少数。我们自己的板也是如此,几经波折,反反复复尝试使用不同的规格的晶振,替换外部的电容,电阻都没有能让这个32.768K的LSE起振。但是又需要有RTC来提供时间,考虑的方法主要有2种,第一采用外部RTC时钟芯片,如DS1302。第二是使用内部其它的时钟源来提供RTC时钟。毫无疑问,目前板已经制好,添加时钟芯片肯定造成板上布局更改,还得重新打板,这里采用了第二
[单片机]
<font color='red'>STM32</font> RTC时钟源LSE
STM32之I2C例程(24C02)
#include stm32f10x.h #include #define SCL_H (GPIOB- BSRR = GPIO_Pin_6) #define SCL_L (GPIOB- BRR = GPIO_Pin_6) #define SDA_H (GPIOB- BSRR = GPIO_Pin_7) #define SDA_L (GPIOB- BRR = GPIO_Pin_7) #define SCL_READ (GPIOB- IDR & GPIO_Pin_6) #define SDA_READ (GPIOB- IDR & GPIO_Pin_7) #define I2C_DELAY (I2C_de
[单片机]
基于STM32和SIM900A的无线通信模块设计
  设计一个可以实现短信收发与数据无线传输的模块的要求,本文采用了ARM Cortex-M3内核的主流产品STM32作为主控芯片,采用SIMCom公司的SIM900A作为通信芯片。在查阅大量相关文献以及相关芯片的数据手册之后,本文设计了一个远程无线通信模块。该模块在实验室试运行一周后,没有出现掉线的情况,数据收发的速度也很快。该模块具有性能稳定,外形小巧,性价比高等优点。厂方投入使用之后,反应良好。   随着网络和现代通信技术的不断发展,远程无线通信技术经过多年的研究与实际应用,现如今在工业控制领域有了非常重要的地位,并且发挥着越来越大的作用。文中根据厂家的要求,设计的无线通信模块,主要实现了短信与数据收发功能,并且做到了模块的
[单片机]
基于<font color='red'>STM32</font>和SIM900A的无线通信模块设计
基于STM32对DS1302的驱动
// 程序名: STM32驱动DS1302 //头文件 #include “stm32f10x.h” #include “usart.h” #define uchar unsigned char #define uint unsigned int ////DS1302引脚定义,可根据实际情况自行修改端口定义 #define RST PAout(5) #define IO PAout(6) #define SCK PAout(7) //DS1302地址定义 #define ds1302_sec_add 0x80 //秒数据地址 #define ds1302_min_add 0x82 //分数据地址 #define ds1302_
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved