STM32——TIM2定时器定时
STM32 中一共有11 个定时器,其中2 个高级控制定时器,4 个普通定时器和2 个基本定时器,以及2 个看门狗定时器和1 个系统嘀嗒定时器。其中系统嘀嗒定时器是前文中所描述的SysTick,看门狗定时器以后再详细研究。今天主要是研究剩下的8 个定时器。关于这8 个定时器的简要说明,如图60 所示。其中TIM1 和TIM8 是能够产生3 对PWM 互补输出的高级定时器,常用于三
相电机的驱动,时钟由APB2 的输出产生。TIM2-TIM5 是普通定时器,TIM6 和TIM7
是基本定时器,其时钟由APB1 输出产生。由于STM32 的TIMER 功能比较复杂,
所以只能一点一点的学习。因此今天就从最简单的开始学习起,也就是
TIM2-TIM5 普通定时器的定时功能。
因此,就我们现在所学习的通用定时器来说,其完全可以以72MHz 的方式去工作。
关于定时器中断的配置步骤,主要分成以下三步:
一、 配置嵌套中断控制器NVCI;
二、定时器初始化配置;
三、定时器中断函数处理。
以下代码为核心代码,不包括一些.h文件,都是在一个文件中的。
一、 配置嵌套中断控制器NVCI;
//1、配置嵌套中断控制器NVIC
void NVIC_config(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//优先级分组 NVIC_InitTypeDef nvic;
nvic.NVIC_IRQChannel=TIM2_IRQn;
nvic.NVIC_IRQChannelCmd=ENABLE;
nvic.NVIC_IRQChannelPreemptionPriority=;
nvic.NVIC_IRQChannelSubPriority=;
NVIC_Init(&nvic);
}
二、定时器初始化配置;
//2、定时器初始化配置
void time2_config()
{
TIM_TimeBaseInitTypeDef tim;//结构体
NVIC_config();//优先级函数调用
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//开启时钟
TIM_DeInit(TIM2);//?????
tim.TIM_ClockDivision=TIM_CKD_DIV1;//采样分频
tim.TIM_CounterMode=TIM_CounterMode_Up;//向上计数
tim.TIM_Period=;//自动重装载寄存器的值
tim.TIM_Prescaler=;//时钟预分频
//tim.TIM_RepetitionCounter=
TIM_TimeBaseInit(TIM2,&tim);//初始化结构体
TIM_ClearFlag(TIM2,TIM_FLAG_Update);//清除溢出中断标志
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM2,ENABLE);//开启时钟 }
三、定时器中断函数处理。
//TIM2通用定时器
uint16_t count = ;
void TIM2_IRQHandler(void)
{ if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)//判断中断标志是否发生
{
count++;
if(count == )
{
//点亮红灯
red_toggle();//红灯翻转,实现亮一秒灭一秒
//count清零
count=;
}
//手动清除中断标志位 }
TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update);
}
四、LED灯配置
这是GPIO配置
int led_gpio_init()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//时钟使能
GPIO_InitTypeDef a;
a.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_5;//可在这修改颜色 另外在主函数也要相应的修改 端口 5是红色 0是绿色 1是蓝色
a.GPIO_Speed = GPIO_Speed_50MHz;//设置输出速率50MHz
a.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_Init(GPIOB,&a);//初始化GPIO,配置工作方式等
GPIO_SetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_5);//默认为高电平,灭灯
}
实现翻转功能
/*红灯翻转*/
/*
*读取电平,如果等于高就执行赋低电平,否则给高电平
*/
void red_toggle()
{
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5) == RESET)//如果检测到低电平
{
GPIO_SetBits(GPIOB,GPIO_Pin_5);//高电平点亮 }
else
{
GPIO_ResetBits(GPIOB,GPIO_Pin_5);//低点平熄灭
}
}
五、主函数
主函数主要调用这个就行
led_gpio_init();//GPIO配置
NVIC_config();//中断优先级配置
time2_config();//定时器TIM2配置
以STM32TIM6为例讲解定时原理
熟记一个公式:定时时间=计数器的中断周期*中断的次数
有一个主角:计数器,他为定时发挥巨大的作用
计数器是一个16位的计数器,只能往上计数,最大计数值为65535(怎么算最大值??)。
当计数到这个值的时候,如果使能了中断,定时器就产生溢出中断。
问题来了:72MHz,36MHz,是什么意思?有什么用?
MHz是一个频率的单位,36MHz=36000 000Hz,就是每秒产生36000 000次,那么产生一次需要1/36000 000秒,
那么产生1ms需要多少次??
单位换算一下,1ms等于1/1000s
假设需要x次,则x*(1/36000 000)=1/1000
x=36000
在36MHz的频率下,计数值为36000,可以产生1ms
再举个例子:
上面的值实际应用看下面:
STM32——TIM2定时器定时的更多相关文章
- STM32的定时器定时时间计算(计数时间和中断定时时间)
时基单元 可编程高级控制定时器的主要部分是一个16位计数器和与其相关的自动装载寄存器.这个计数器可以向上计数.向下计数或者向上向下双向计数.此计数器时钟由预分频器分频得到. 计数器.自动装载寄存器和预 ...
- STM32——通用定时器基本定时功能
STM32——————通用定时器基本定时功能 1. ...
- STM32通用定时器(转载)
STM32的定时器功能很强大,学习起来也很费劲儿. 其实手册讲的还是挺全面的,只是无奈TIMER的功能太复杂,所以显得手册很难懂,我就是通过这样看手册:while(!SUCCESS){看手册-}才搞明 ...
- stm32的定时器学习
看了几篇博客之后,对这个定时器也有了一些认识,其实和51差不多,就是配置定时器的时候多了几个步骤而已. 其中很好的一片是:http://blog.sina.com.cn/s/blog_49cb4249 ...
- STM32 通用定时器的几种配置方式
STM32 通用定时器的几种配置方式 //------------------------------------------------------------------------------ ...
- Stm32高级定时器(四)
Stm32高级定时器(四) 1 编码器接口模式 1.1 编码器原理 什么是正交?如果两个信号相位相差90度,则这两个信号称为正交.由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向.根 ...
- stm32通用定时器中断问题
在使用stm32的通用定时器定时中断的时候,发现定时器在完成初始化配置后,定时器UIF位会立刻置位,导致在使能中断后,程序会立刻进入定时器中断. 如果设计代码时不希望定时器配置完成后,立刻进入中断,可 ...
- STM32 基于定时器的PWM发生器
脉冲宽度调制(PWM),是英文"Pulse Width Modulation" 的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术.简单一点,就 ...
- STM32通用定时器原理
/************************************************************************************************ 转载 ...
随机推荐
- 自动把动态的jsp页面(或静态html)生成PDF文档,并且上传至服务器
置顶2017年11月06日 14:41:04 阅读数:2311 这几天,任务中有一个难点是把一个打印页面自动给生成PDF文档,并且上传至服务器,然而公司框架只有手动上传文档,打印时可以保存为PDF在本 ...
- openssl中RSA数字签名的使用
参考: OpenSSL命令行工具验证数字签名 客户端需要生成一对密钥,服务器需要生成一对密钥,分别记为client_private.pem/client_public.pem和server_priva ...
- 用servlet打内容到网页上
关键代码 response.setContentType("text/html;charset=UTF-8"); PrintWriter out=response.getWrite ...
- python排序算法之冒泡,选择,插入
1.参考 一本关于排序算法的 GitBook 在线书籍 <十大经典排序算法>,使用 JavaScript & Python & Go 实现 2.冒泡排序:两两比较,互换位置 ...
- gcc make 与cmake
1. gcc (1)是什么? 它是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器.它可以编译很多种编程语言(括C.C++.Objective-C.For ...
- IIS7部署报错 500.22错误 检查到这集成托管模式下不使用的ASP.NET配置
公司的一个项目,环境为: .Net 4.0 + MVC3,部署在Windows Server 2003R2 IIS6.0上面运行正常, 迁移到新服务器Windows Server 2008R2,部署在 ...
- ELK收集Nginx自定义日志格式输出
1.ELK收集日志的有两种常用的方式: 1.1:不修改源日志格式,简单的说就是在logstash中转通过 grok方式进行过滤处理,将原始无规则的日志转换为规则日志(Logstash自定义日志格式) ...
- POJ1273 USACO 4.2.1 Drainage Ditches CodeVS1993草地排水 网络流 最大流 SAP
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 传送门 - POJ 传送门 - CodeVS 题意概括 给出一个图,告诉你边和容量,起点是1,汇点是n,让你求最大流. 题解 ...
- Linux常用命令行补充——持续更新
1.查看文件夹大小 =>ls -lht 路径 ls -lht /opt/jars 2.查看文件大小 =>du -sh / du -sh /opt/jars/calllog.csv 3.编辑 ...
- Java常用API——时间类
前言:Java.util.*工具包中,包含了集合框架,旧集合类,事件模型,日期和时间设施,国际化和其他使用程序类 (字符串.随机数生成器和位数组) 一.日期类Date 1.概述 Date是一个薄包装类 ...