历史上的今天

今天是:2024年09月28日(星期六)

2019年09月28日 | STM32 TIM定时器 库函数学习笔记

发布者:炫酷骑士 来源: eefocus关键字:STM32  TIM定时器  库函数 手机看文章 扫描二维码
随时随地手机看文章

一些库函数的用法手册上讲得不甚详细,网上也几乎没有资料,把我个人理解的一些东西和大家分享一下,如有错漏请批评指正。


  TIM_DeInit(TIM2);

//注意:按缺省值复位后,时钟源为内部时钟,不必再调用函数设置。如需要更改定时器计时的时钟源,

//调用后面的那几个相关函数就行。定时器的时钟不是直接来自APB1/2,而是来自于输入为APB1/2的一个倍频器

//当APB1/2的预分频系数为1时,定时器的时钟频率等于APB1/2的频率;

//当APB1/2的预分频系数为其它数值时,定时器的时钟频率等于APB1/2的频率两倍。

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_TimeBaseStructure.TIM_Period = 10000-1;

//设置在下一个更新事件装入活动的自动重装载寄存器周期的值

//由于计数从0开始,所以此处应为理想周期减1,最大值为0xFFFF

TIM_TimeBaseStructure.TIM_Prescaler = 0xF;

//设置用来作为TIMx时钟频率除数的预分频值,最大值为0xFFFF

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;

//设置定时器输入频率fCK_INT与数字滤波器采样频率基准fDTS使用的采样频率之间的分频比例

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

//中央对齐模式1 计数器交替地向上和向下计数。输出比较中断标志位,只在计数器向下计数时被设置

  //中央对齐模式2 计数器交替地向上和向下计数。输出比较中断标志位,只在计数器向上计数时被设置

  //中央对齐模式3 计数器交替地向上和向下计数。输出比较中断标志位,只在计数器向下和向上计数时均被设置

TIM_TimeBaseInit(TIM2, & TIM_TimeBaseStructure);

TIM_OCInitTypeDef TIM_OCInitStructure;

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//设置输出模式

//TIM_OCMode_Timing:  比较成功后不在对应输出管脚上产生输出(输出引脚冻结,可另作他用),但产生中断,用来作软件定时器用。

  //TIM_OCMode_Toggle:  比较成功后翻转对应输出管脚上的电平

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

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

//TIM_OCMode_PWM1:    当计时器值小于比较器设定值时则TIMX输出脚此时输出有效高电位。

  //                     当计时器值大于或等于比较器设定值时则TIMX输出脚此时输出低电位。

  //TIM_OCMode_PWM2时:  与TIM_OCMode_PWM1相反

TIM_OCInitStructure.TIM_Pulse=0xFFFF;//设置输出脉宽,最大只能取0xFFFF

  TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//使能输出

TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//设置输出极性

// TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High;

// //指定TIM互补输出引脚的在比较有效时的输出电平。仅供高级定时器有效。

// TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;

// //使能或使能TIM的互补输出。仅供高级定时器有效

// TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Set;

// TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset;

// //指定在空闲状态下的TIM输出比较引脚的状态。仅供高级定时器有效。

TIM_OC1Init(TIM2, & TIM_OCInitStructure);//使用哪个通道,就把前面的OCxInit改成几

TIM_ICInitTypeDef TIM_ICInitStructure;


TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;//选择通道。

TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;//选择输入捕获的边沿

TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;

// TIM_ICSelection_DirectTI   TIM输入1,2,3或4与IC1或IC2或IC3或IC4相连

// TIM_ICSelection_IndirectTI TIM输入1,2,3或4与IC2或IC1或IC4或IC3相连

// TIM_ICSelection_TRC        TIM输入1,2,3或4与TRC(内部触发)相连。

TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;//设置输入捕获预分频器

TIM_ICInitStructure.TIM_ICFilter = 0x0;

//选择输入比较滤波器。该参数取值在0x0和0xF

//不同的取值代表着不同的采样频率和带宽,详见手册336页表

//实际采样频率fSAMPLING不一定等于采样频率基准fDTS

TIM_ICInit(TIM2, &TIM_ICInitStructure);

  //TIM_PWMIConfig(TIM2, &TIM_ICInitStructure);

  //新版函数库里取消了TIM_ICMode,TIM_ICInit()默认为输入捕获模式ICAP

//如果使用PWM输入模式,要用TIM_PWMIConfig()来初始化


  TIM_Cmd(TIM2, ENABLE);

TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE );

//TIM_IT_Update:  更新事件:计数器上溢/下溢,计数器初始化(由软件或内部/外部触发)

//TIM_IT_CC1:     通道1输入捕获/输出比较

//TIM_IT_CC2:     通道2输入捕获/输出比较

//TIM_IT_CC3:     通道3输入捕获/输出比较

//TIM_IT_CC4:     通道4输入捕获/输出比较

//TIM_IT_COM:     TIM Commutation Interrupt source

//TIM_IT_Trigger: 触发事件:计数器开始、停止、初始化或由内部/外部触发计数

//TIM_IT_Break:   打断输入

TIM_InternalClockConfig(TIM2);

//禁止从模式,用内部时钟直接驱动定时器的预分频器

TIM_ITRxExternalClockConfig(TIM2, TIM_TS_ITR3);

//设置定时器工作于从模式,时钟源为其他定时器的输出分频.此时钟源无滤波

//TIM_TS_ITR0 TIM内部触发0 TIM1

//TIM_TS_ITR1 TIM内部触发1 TIM2

//TIM_TS_ITR2 TIM内部触发2 TIM3

//TIM_TS_ITR3 TIM内部触发3 TIM4

TIM_TIxExternalClockConfig(TIM2, TIM_TS_TI1FP1,TIM_ICPolarity_Rising, 0);

//设置 TIMx 触发为外部时钟(从四个通道引脚引入)

  //触发源选择:

  //TIM_TIxExternalCLK1Source_TI1ED:  未经滤波的Timer Input 1

  //TIM_TIxExternalCLK1Source_TI1:    滤波后的Timer Input 1

  //TIM_TIxExternalCLK1Source_TI2:    滤波后Timer Input 2

  //设置输入捕获的边沿:

  //TIM_ICPolarity_Rising

  //TIM_ICPolarity_Falling

  //设置滤波设置:

  //必须在0x0与0xF之间

TIM_ETRClockMode1Config(TIM2, TIM_ExtTRGPSC_DIV2,TIM_ExtTRGPolarity_NonInverted, 0x0);

  //外部时钟模式1.需要设置预分频,以及外部触发极性:

  //TIM_ExtTRGPolarity_Inverted     TIM外部触发极性翻转:  低电平或下降沿有效

  //TIM_ExtTRGPolarity_NonInverted  TIM外部触发极性非翻转:高电平或上升沿有效

//最后要设置滤波环节。

TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_DIV2,TIM_ExtTRGPolarity_NonInverted, 0x0);

//外部时钟模式2.


//通用定时器的计数时钟有三种:

//内部时钟(CK_INT)

//外部时钟源,包括:

//外部时钟模式1 外部输入脚(TIx)  

//外部时钟模式2 外部触发输入(ETR) 

//内部触发输入(ITRx) 这三种

//ETR仅用于外部触发,CHx还可以输出PWM,ETR是不可能输出PWM的。

//这个函数后面的一些函数大部分是为实现上述功能而需要调用的底层函数,不需要熟练掌握

TIM_ARRPreloadConfig(TIM2, ENABLE);

//使能预装载寄存器后其与影子寄存器间将不再是立即写入的关系,而是等更新事件产生后才写入

//输入捕获和输出比较相关的预装载寄存器同理

TIM_OC1FastConfig(TIM2, TIM_OCFast_Enable);

//输出比较快速特征性能用在缩短单脉冲输出模式时的最小输出延迟

//失能时,由于从激励进入到打开计数器需要时间,因此最小延迟为5个时钟周期

//使能后,一旦有激励进入,将立即输出活动电平,而不管比较结果如何。延迟被缩短为3个时钟周期

//必须将通道配置为PWM模式此设置才有作用

关键字:STM32  TIM定时器  库函数 引用地址:STM32 TIM定时器 库函数学习笔记

上一篇:STM32在MDK下的一种通用建立库函数工程的方法(标准库)
下一篇:stm32的TIM定时器HAL库函数的使用

推荐阅读

在最近的云栖大会上,科技新物种正在以爆炸式的趋势出现在我们眼前。横跨大陆的阿里云-哈利法大学智慧能源联合创新实验室、搭载在飞艇上的“天空物联网”、驱动力更强的杭州城市大脑2.0……恍惚之间,仿佛让人来到了未来之城。可就在几十年前,中国科技却还是落后的代表。在未来之城回望过去,能给我们更多感触。 说起在中国拔地而起的工业体系,近几十年...
本章参考资料:《STM32F4xx 参考手册》、库帮助文档《stm32f4xx_dsp_stdperiph_lib_um.chm》。 利用库建立好的工程模板,就可以方便地使用 STM32 标准库编写应用程序了,可以说从这一章我们才开始迈入 STM32 开发的大门。 LED 灯的控制使用到 GPIO 外设的基本输出功能,本章中不再赘述 GPIO 外设的概念,如您忘记了...
9月23日,浙江海纳半导体有限公司(以下简称“海纳半导体”)第一根6英寸重掺砷单晶出炉。众合科技官方消息显示,重掺砷单晶的拉制成功标志着海纳半导体“年产100吨4-8英寸IC级单晶硅及其制品技改项目”正式拉开量产的帷幕。随着重掺砷单晶的试拉成功,海纳半导体的产品结构将延伸到外延衬底用抛光硅片的所有重掺系列。值得注意的是,9月19日,海纳半导体...
问:ARM在从SVC模式,进入IRQ中断时,现场是如何保存的?答:在保存现场时,处于svc模式下时,cpsr寄存器是写入irq模式下的spsr_irq寄存器,而不是svc模式下的spsr_svc,这样,在中断模式下恢复的话,将spsr_irq寄存器里的内容写入cpsr,就能恢复到svc模式了,因为,spsr_irq寄存器里的内容就是svc模式下的状态。另外 ,PC指针地址,在中断发生时会向LR寄...

史海拾趣

问答坊 | AI 解惑

51单片机中断实现串口通信的问题。

请问这段代码哪里有问题?怎么改? /*中断实现串口通信 */ #include unsigned char flag; void main() {     void init();     init();     while(1)     {         whi ...…

查看全部问答∨

青岛海玉学校评论

青岛海玉学校纯属骗人的,请大家不要上当,这是本人亲身经历的,他们那里根本没有教硬件电路的,也没有教笔记本的,网上的都是假的,请大家报名之前一定要考察清楚,不要像本人一样上当,如果大家想学电路维修的话,还是去广州或深圳以及北京等地方 ...…

查看全部问答∨

TAPI的一个问题

请问lineOpen的dwPrivileges和dwMediaModes参数是什么意思? dwPrivileges设置成NONE的话就只能打电话吗?就不能接电话? 要打电话、接电话都可以的话是不是要设置成LINECALLPRIVILEGE_MONITOR + LINECALLPRIVILEGE_OWNER dwMediaModes常用的设 ...…

查看全部问答∨

可控硅触发的问题

请问我想用可控硅光耦去隔离控制40A电流可控硅的导通角,实现AC380V移相调压,MOC3083是过零触发光耦可控硅,只能控制大可控硅的零点开关,MOC3052虽然可以实现,只能应用在240V的电路中 请大家给推荐个解决办法,多谢了!…

查看全部问答∨

请问现在嵌入式开发主要用什么开发环境?

我想转投嵌入式程序设计,请问目前主流的嵌入式软件开发环境有哪些?我看了有C、C++、WinCE、Linux等等,那么我该主攻哪个啊?我原来是搞ASP.Net+C#的。…

查看全部问答∨

怎样在模拟器中配置蓝牙呢

电脑上装有USB蓝牙适配器,但是模拟器中提示没有蓝牙设备,要怎样配置才能让模拟器发现电脑上的蓝牙适配器,并且通过蓝牙发送文件呢,谢谢…

查看全部问答∨

新型LED电子钟的制作方法

LED电子钟的制作方法在很多电子报刊杂志上都可以见到,但大多数在断电后都要重新设置时间等参数,给使用带来很多不便。也有用后备电池作为备用电源的,但往往体积较大。本文介绍的LED电子钟克服了以往的弊端,而且采用了家电通用的红外遥控器进行控 ...…

查看全部问答∨

怎样把矩形波转换成正弦波

请教各位大侠,怎样把矩形波转换成正弦波?…

查看全部问答∨

如何避免成为职场婴儿

  要想在职场混得好,可真是如履薄冰,什么事情都得加倍小心。对此,工作了半年多的小刘可是深有体会。上个月,他因为对公司的人事关系不了解说错了一句话,结果挨了好几个领导的批评。从此,小刘变得战战兢兢、时刻小心,什么话也不敢多说,生怕 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved