stm32的定时器使用方法

发布者:ShimmeringMoon最新更新时间:2018-08-21 来源: eefocus关键字:stm32  定时器  使用方法 手机看文章 扫描二维码
随时随地手机看文章

STM32学习笔记(六)----TIM (待补充)

 

1、使能TIM时钟

   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM*,ENABLE);

2、基础设置

   TIM_TimeBaseStructure.TIM_Period                                                 计数值  

   TIM_TimeBaseStructure.TIM_Prescaler                                              预分频,此值+1为分频的除数

   TIM_TimeBaseStructure.TIM_ClockDivision      =   0                               时钟因子 待做进一步说明

   TIM_TimeBaseStructure.TIM_RepetitionCounter =   0                               待做进一步说明

   TIM_TimeBaseStructure.TIM_CounterMode        =   TIM_CounterMode_Up              向上计数

                                                    TIM_CounterMode_Dowm            向下计数

                                                    TIM_CounterMode_CenterAligned1 中心对齐方式1

                                                    TIM_CounterMode_CenterAligned2 中心对齐方式2

                                                    TIM_CounterMode_CenterAligned3 中心对齐方式3

   TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  

3、通道设置

    ----------------------------------------------------------------------------------------------

    输出比较 & PWM通道

    TIM_OCInitStructure.TIM_OCMode =           TIM_OCMode_Timing                   输出比较时间模式    (输出引脚冻结无效)

                                                TIM_OCMode_Active                   输出比较主动模式    (匹配时设置输出引脚为有效电平,当计数值为比较/捕获寄存器值相同时,强制输出为高电平)                                               

                                                TIM_OCMode_Inactive;            输出比较非主动模式 (匹配时设置输出引脚为无效电平,当计数值为比较/捕获寄存器值相同时,强制输出为低电平)     

                                                TIM_OCMode_Toggle                   输出比较触发模式    (翻转。当计数值与比较/捕获寄存器值相同时,翻转输出引脚的电平)

                                                TIM_OCMode_PWM1                     向上计数时,当TIMx_CNT < TIMx_CCR*时,输出电平有效,否则为无效

                                                                                    向下计数时,当TIMx_CNT > TIMx_CCR*时,输出电平无效,否则为有效

                                                TIM_OCMode_PWM2                     与PWM1模式相反

    TIM_OCInitStructure.TIM_OutputState     =   TIM_OutputState_Disable             禁止OC*输出

                                                TIM_OutputState_Enable              开启OC*输出到对应引脚

    TIM_OCInitStructure.TIM_OutputNState    =   TIM_OutputNState_Disable            互补输出使能。关闭OC*N输出

                                                TIM_OutputNState_Enable             互补输出使能。开启OC*N输出到对应的引脚                          

TIM_OCInitStructure.TIM_Pulse                                                   比较/PWM 通道的值

TIM_OCInitStructure.TIM_OCPolarity      =   TIM_OCPolarity_High;          极性为正

                                             TIM_OCPolarity_Low                  极必为负

TIM_OCInitStructure.TIM_OCNPolarity     =   TIM_OCNPolarity_High;          极性为正

                                             TIM_OCNPolarity_Low                 极必为负

TIM_OCInitStructure.TIM_OCIdleState     =   TIM_OCIdleState_Set                 当MOE=0时,如果实现了OC*N,则死区后OC*=1

                                             TIM_OCIdleState_Reset               当MOE=0时,如果实现了OC*N,则死区后OC*=0

TIM_OCInitStructure.TIM_OCNIdleState    =   TIM_OCIdleNState_Set                当MOE=0时,死区后OC*N=1

                                             TIM_OCIdleNState_Reset              当MOE=0时,死区后OC*N=0

TIM_OC1Init(TIM2, &TIM_OCInitStructure);

TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Disable);                    禁止OC1重装载,即TIM*_CCR*的数一经写入立即生效,否则要在下一个更新事件到来后才被装入寄存器

 

TIM_CtrlPWMOutputs(TIM1,ENABLE);                                                如果使用PWM模式,则此句一定不能省

    ----------------------------------------------------------------------------------------------

    输入捕获通道

    TIM_ICInitStructure.TIM_Channel         =   TIM_Channel_1

                                                TIM_Channel_2

                                                TIM_Channel_3

                                                TIM_Channel_4

    TIM_ICInitStructure.TIM_ICPolarity      =   TIM_ICPolarity_Rising               输入/捕获上升沿有效

                                                TIM_ICPolarity_Falling              输入/捕获下降沿有效

    TIM_ICInitStructure.TIM_ICSelection     =   TIM_ICSelection_DirectTI            IC*输入引脚选择,针对IC1/IC2有不同的定义

                                                TIM_ICSelection_IndirectTI

                                                TIM_ICSelection_TRC

    TIM_ICInitStructure.TIM_ICPrescaler     =   TIM_ICPSC_DIV1                      输入模式下,捕获端口上的每一次边沿都触发一次捕获

                                                TIM_ICPSC_DIV2                      输入模式下,每2次事件触发一次捕获

                                                TIM_ICPSC_DIV4                      输入模式下,每4次事件触发一次捕获

                                                TIM_ICPSC_DIV8                      输入模式下,每8次事件触发一次捕获

    TIM_ICInitStructure.TIM_ICFilter        =                                       捕获采样频率,详见TIM*_CCMR->IC*F说明

    ----------------------------------------------------------------------------------------------   

    死区设置

    TIM_BDTRInitStructure.TIM_OSSRState     =   TIM_OSSRState_Enable

                                                TIM_OSSRState_Disable

    TIM_BDTRInitStructure.TIM_OSSRIState    =   TIM_OSSRIState_Enable

                                                TIM_OSSRIState_Disable

    TIM_BDTRInitStructure.TIM_LOCKLevel     =   TIM_LOCKLevel_OFF

                                                TIM_LOCKLevel_1

                                                TIM_LOCKLevel_2

                                                TIM_LOCKLevel_3

    TIM_BDTRInitStructure.TIM_DeadTime      =   这里调整死区大小0-0xff

    TIM_BDTRInitStructure.TIM_Break         =   TIM_Break_Enable

                                                TIM_Break_Disable

    TIM_BDTRInitStructure.TIM_BreakPolarity =   TIM_BreakPolarity_Low

                                                TIM_BreakPolarity_High

    TIM_BDTRInitStructure.TIM_AutomaticOutput= TIM_AutomaticOutput_Enable

                                                TIM_AutomaticOutPut_Disable

 

4、配置中断

5、开启TIM

----------------------------------------------------------------------------------------------------

例:

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;

u16 CCR1_Val = 60000;

u16 CCR2_Val = 40000;

u16 CCR3_Val = 20000;

u16 CCR4_Val = 10000;

 

/* TIM2 clock enable */

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

 

/* 基础设置*/

TIM_TimeBaseStructure.TIM_Period = 65535;    //计数值  

TIM_TimeBaseStructure.TIM_Prescaler = 7200-1;    //预分频,此值+1为分频的除数

TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数

 

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

 

/* 比较通道1*/

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Inactive;         //输出比较非主动模式

TIM_OCInitStructure.TIM_Pulse = CCR1_Val;

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;   //极性为正

  

TIM_OC1Init(TIM2, &TIM_OCInitStructure);

TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Disable);     //禁止OC1重装载,其实可以省掉这句,因为默认是4路都不重装的.

 

/*比较通道2 */       

TIM_OCInitStructure.TIM_Pulse = CCR2_Val;

 

TIM_OC2Init(TIM2, &TIM_OCInitStructure);

TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Disable);

 

/* 比较通道3 */        

TIM_OCInitStructure.TIM_Pulse = CCR3_Val;

 

TIM_OC3Init(TIM2, &TIM_OCInitStructure);

TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Disable);

 

/* 比较通道4 */      

TIM_OCInitStructure.TIM_Pulse = CCR4_Val;

 

TIM_OC4Init(TIM2, &TIM_OCInitStructure);

TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Disable);

 

/*使能预装载*/

TIM_ARRPreloadConfig(TIM2, ENABLE);

/*预先清除所有中断位*/

TIM_ClearITPendingBit(TIM2, TIM_IT_CC1 | TIM_IT_CC2 | TIM_IT_CC3 | TIM_IT_CC4|TIM_IT_Update);

 

/* 4个通道和溢出都配置中断*/

TIM_ITConfig(TIM2, TIM_IT_CC1 | TIM_IT_CC2 | TIM_IT_CC3 | TIM_IT_CC4|TIM_IT_Update, ENABLE);

 

 

/* 允许TIM2开始计数 */

TIM_Cmd(TIM2, ENABLE);


关键字:stm32  定时器  使用方法 引用地址:stm32的定时器使用方法

上一篇:STM32+FATFS文件系统连续在同一个txt文件里写入内容
下一篇:stm中32DMA参数设置

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

初学STM32及GPIO入门之流水灯
一.准备工作---建立一个keil工程 STEP1. 打开keil,选择project-new uvision project,建立一个LED工程 STEP2. 在工程文件保存的路径下新建以下文件夹,在官网上或其他渠道下载STM32的3.5版库,将inc 和scr文件夹放入fwlib中。将startup_stm32f10x_hd.s放入asm文件夹中。将库文件放入cmsis中。 STEP3. 在keil中分别新建 【startcode】【user】【fwlib】【cmsis】四个组,再按照下图所示将C文件加入组中。这里要注意的是组里面添加的都是汇编文件和C文件,头文件不需要添加。 STEP4. 为了更好的理清各项文
[单片机]
初学<font color='red'>STM32</font>及GPIO入门之流水灯
STM32堆栈学习
STM32里面 STACK 和 HEAP ,前者为堆,后者为栈。 今天在调试一段向Server发送程序的时候:出现一个奇怪的现象: fun(){ fun1( ); //初始化 fun2( ); //链接远程服务器 fun3( ); //发送数据 } 整体运行的时候,运行到fun3( );的地方就出现HaltFault!注释掉fun3( ),然后运行fun1( )和fun2( );可以运行。再注释掉fun1( )和fun2( )(此时已经链接上),单独运行fun3( );也能运行。吃午饭是和同事说明这一情况,他提醒说是不是因为堆栈的问题,后来回来查看MAP文件情况。 ===================
[单片机]
关于STM32 ST-LINK Utility查看内核运行状态,助你判断程序是否跑飞
本文围绕STM32 ST-LINK Utility讲几点主要功能及相关拓展知识: 1.STM32编程下载; 2.利用该编程工具查看内核运行状态; 3.Option Bytes选项字配置; 1STM32编程下载 STM32 ST-LINK Utility一个最重要的功能就是对STM32进行编程。支持常见的hex、bin文件,还有早期摩托罗拉定义的srec和s19格式的文件(说实话,我都不了解这两种格式的文件)。 这里主要想提示一下初学者:hex带有地址,而bin文件不带地址,下载时需要填写起始地址。 下面看两张在STM32 ST-LINK Utility中下载选择文件的图大家就明白了。 1.选择hex下载,地址不可修改(灰色)
[单片机]
关于<font color='red'>STM32</font> ST-LINK Utility查看内核运行状态,助你判断程序是否跑飞
stm32中断学习总结
经过了两天,终于差不多能看懂32的中断了,由于是用的库函数操作的,所以有些内部知识并没有求甚解,只是理解知道是这样的。但对于要做简单开发的我来说这些已经够了。 我学习喜欢从一个例程来看,下面的程序是我粘贴但是改编的,大部分都做了注释。 主要是感谢这位博主的文章:http://www.cnblogs.com/chineseboy/archive/2013/03/14/2956782.html 其实主要步骤就是: 1、将GPIO口配置成中断输入模式。 void Init_LED(void) { GPIO_InitTypeDef GPIO_InitStructure; //定义一个GPIO结构体变量 RCC_APB2PeriphCl
[单片机]
STM32低功耗状态的引脚配置
在STM32进入低功耗状态时,如果闲置||或者是其他的IO没有配置好。也将会增加不必要的功耗;所以在做低功耗设计的时候需要将闲置(保证系统稳定,其他的引脚据情况而定)全部设置为模拟输入配置。具体如下图所示,由此可以实现IO零消耗。
[单片机]
<font color='red'>STM32</font>低功耗状态的引脚配置
STM32经典概述,纯干货
首先,在学习Cortex-M3时,我们必须要知道必要的缩略语。 整理如下:AMBA:先进单片机总线架构 ADK:AMBA设计套件AHB:先进高性能总线 AHB-AP:AHB访问端口APB:先进外设总线 ARM ARM:ARM架构参考手册ASIC:行业领域专用集成电路 ATB :先进跟踪总线BE8:字节不变式大端模式 CPI:每条指令的周期数DAP:调试访问端口 DSP:数字信号处理(器)DWT:数据观察点及跟踪 ETM:嵌入式跟踪宏单元FPB:闪存地址重载及断点 FSR:fault状态寄存器HTM:Core Sight AHB跟踪宏单元ICE:在线仿真器 IDE:集成开发环境IRQ:中断请求(通常是外中断请求)ISA:指令系统架构
[单片机]
<font color='red'>STM32</font>经典概述,纯干货
STM32夺命100问
1、AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2 1,意思是APB2接高速设备。 2、Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一个为stm32f10x_conf.h专门控制外围器件的配置,也就是开关头文件的作用。 3、HSE Osc(High Speed External Oscillator)高速外部晶振,一般为8MHz,HSI RC(High Speed InternalRC)高速内部RC,8MHz。 4、LSE Osc(Low Speed External Oscillator)低速外部晶振,一般为32.768KHz,LSI RC(Low Speed Interna
[单片机]
<font color='red'>STM32</font>夺命100问
基于STM32的开源简易示波器项目
一、前言 该项目是基于正点原子精英板制作的一个简易示波器,可以读取信号的频率和幅值,并可以通过按键改变采样频率和控制屏幕的更新暂停。 二、硬件接线 将PA6与PA4相连,可观察到正弦波。 将PA6与PA5相连,可观察到三角波/噪声(默认三角波)。 KEY_UP控制波形的更新和暂停。 KEY_1降低采样率。 KEY_0提高采样率。 三、信号的采集 信号的采集主要是依靠ADC(通过定时器触发采样,与在定时器中断中开启一次采样的效果类似,以此来控制采样的间隔时间相同),然后通过DMA将所采集的数据从ADC的DR寄存器转移到一个变量中,此时完成一次采样。 由于设定采集一次完整的波形需要1024个点,即需要连续采集1024次才算一次
[单片机]
基于<font color='red'>STM32</font>的开源简易示波器项目
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

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

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

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