历史上的今天
返回首页

历史上的今天

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

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

2019-09-28 来源:eefocus

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


  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模式此设置才有作用

推荐阅读

史海拾趣

Elite公司的发展小趣事

随着公司规模的不断扩大和市场的不断拓展,Elite开始实施全球化战略。公司积极开拓国际市场,与全球知名企业建立合作关系,共同推动行业发展。同时,Elite还注重品牌塑造和企业文化建设,通过举办各类公益活动、提升员工福利待遇等方式,增强企业凝聚力和社会影响力。

Advanced Energy公司的发展小趣事

Advanced Energy公司成立于1981年,总部位于美国科罗拉多州的丹佛市。在成立之初,AE公司便专注于电源技术的研发与创新。当时,电子行业的电源技术正处于快速发展阶段,AE公司凭借其前瞻性的技术视野和扎实的研发实力,迅速在市场中崭露头角。公司不断推出具有创新性的电源产品,满足了当时电子行业对高效、稳定电源的需求,逐渐在行业内建立了良好的声誉。

Fillfactory Nv公司的发展小趣事

FIDELIX公司成立于1990年,是一家专注于存储芯片研发与销售的韩国企业。在公司成立初期,FIDELIX凭借对技术的深入研究和对市场的敏锐洞察,成功推出了多款性能优越的NAND FLASH(闪存)和SDR/DDR(单/双数率同步动态存储器)等存储芯片产品。这些产品不仅在韩国市场上获得了良好的口碑,同时也开始逐步进入国际市场。

随着技术的不断进步和市场的不断扩大,FIDELIX逐渐在韩国存储芯片领域崭露头角。公司不断投入研发资金,加强技术创新,努力提升产品的性能和品质。同时,FIDELIX也积极拓展销售渠道,与多家国内外知名厂商建立了合作关系,为公司的持续发展奠定了坚实的基础。

芯佰微(Corebai)公司的发展小趣事

芯佰微非常重视技术研发和专利积累。公司拥有一支高素质的研发团队,不断投入资源进行新技术和新产品的研发。同时,芯佰微也积极申请各类专利,保护自己的技术成果。经过多年的积累,芯佰微已经成功申请并获得了数十项专利,这些专利不仅提升了公司的技术实力,也为公司的未来发展提供了有力保障。

Conexcon Group公司的发展小趣事

在电子行业的发展过程中,环保问题日益受到关注。Conexcon Group积极响应国家环保政策,将绿色环保理念贯穿于产品研发、生产和销售的全过程。公司采用了环保材料和工艺,减少了对环境的污染和破坏。同时,公司还加强了废旧电子产品的回收和处理工作,推动了电子行业的可持续发展。这些举措不仅赢得了消费者的认可和支持,也为公司树立了良好的社会形象。

Charcroft Electronics Ltd公司的发展小趣事

Charcroft Electronics Ltd公司深知人才是企业发展的核心力量。因此,公司注重人才培养和团队建设,通过内部培训、外部引进等方式,打造了一支高素质、专业化的员工队伍。这支队伍不仅具备丰富的行业经验和专业技能,还具备创新意识和团队协作精神,为公司的持续发展提供了有力的人才保障。

问答坊 | AI 解惑

电子类缩略语大全 1.0 版

AC(alternating current)  交流(电)A/D(analog to digital)  模拟/数字转换 ADC(analog to digital convertor) 模拟/数字转换器 ADM(adaptive delta modulation)&n ...…

查看全部问答>

51单片机实现TCP/IP协议

 51单片机实现TCP/IP协议…

查看全部问答>

标准数字电路 54-74 TTL 全系列数据手册(中文)

全系列数据手册,原书扫描,共795页,每个器件都附有简要说明、逻辑图、真值表、电气特性表http://www.etuni.com/data/downdata.asp?id=910…

查看全部问答>

几款好用的滤波器设计软件

Filter Solutions Nuhertz公司出品,Nuhertz公司是滤波器设计软件的行业领军企业。 网上只有试用版下载,仅有20天的试用期,过了软件就基本瘫痪了,当然咯,细心点的话还是可以找到序列号的。 功能非常齐全,值得一提的是,Filter Solutions绘制 ...…

查看全部问答>

8962 GPIO 问题

在单步调试GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_4|GPIO_PIN_5 );时,看反汇编代码,发现程序根本就在GPIODirModeSet子程序和GPIOPadCongfigSet子程序中不会发生跳转,只要是出现TST指令,下一句指令肯定就是ITE EQ   所以程 ...…

查看全部问答>

猎头职位:北京世界五百强诚聘symbian高级研发-c++

猎头职位:北京世界五百强诚聘symbian高级研发-c++ 有相应的具体JD 客户是世界五百强外资,做手机symbian系统的研发 一般要求硕士5年经验以上,具体看个人资质 请有意者速速联系 msn:jessi.wang@hotmail.com e-mail:weiyangwj@sina.com 可 ...…

查看全部问答>

有谁知道亿世的es6168或者es8381芯片的开发环境?

自己也知道几乎是不可能的任务,从没搞过硬件相关的开发. 做了这么多年的PC上层应用开发,今天碰到需要搞硬件的项目. 基本选定用ESS公司的ES8381芯片, 但在ess网站上只有芯片的功能特点描述,没有任何开发软件的下载和详细资料. 最奇怪的是也算比较大 ...…

查看全部问答>

请问谁有Serial_Spy的源代码

俄罗斯人Alex V. Bessonov 写的一个串口监视软件,使用过滤驱动,谁有源代码,请发给我一份,万分感谢 驱动名为serial.sys…

查看全部问答>

串口的一个怪问题

请教一个问题:一块pc104的com+422转换器,然后用该com向设备发送数据,设备没有任何反应;用PC的com+该422转换器,用串口调试器向设备发送数据,设备有响应。这样看应该是软件对com的使用上的问题,但bps、停止位、校验位设置得都是一样的。请教: ...…

查看全部问答>

我的ccs进不去,求救

我做的板子有个常见问题,ccs进不去,就进去过2次,而且还跟机子有关,我自己的机子怎么也进不去,换了两个机子分别进去了一次,再怎么也进不去,板子也换了几块,访真也换了,可是还是不行,我的dsp芯片是tms320c32的,调试很郁闷,也不知是啥原因 ...…

查看全部问答>