历史上的今天

今天是:2024年10月16日(星期三)

正在发生

2018年10月16日 | stm32TIM输出通道配置详解

发布者:kappa20 来源: eefocus关键字: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);
输出比较 & 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;


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);


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路都不重装的.

       
TIM_OCInitStructure.TIM_Pulse = CCR2_Val;

TIM_OC2Init(TIM2, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Disable);

        
TIM_OCInitStructure.TIM_Pulse = CCR3_Val;

TIM_OC3Init(TIM2, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Disable);

      
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);

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



TIM_Cmd(TIM2, ENABLE);


关键字:stm32  TIM输出  通道配置 引用地址:stm32TIM输出通道配置详解

上一篇:STM32F030内部时钟设置
下一篇:stm32之位带操作:原理及使用方式

推荐阅读

忽然想起来之前的位带操作还没有放上来,单片机裸机很多时候都是GPIO的操作,当然我们如果使用库函数的话实际没什么差别,不使用位带操作时,可以用库函数GPIO_ReadOutputData()与GPIO_ReadInputData()来读取GPIO的输入输出,但是这个位带操作是个很厉害的发明,下面讲下它的原理以及位带操作有什么优越性。 这个位带操作是做待机唤醒想起来的,这...
翻译自——spectrum,Michael Koziol 机器学习分类器可以在黑客发动袭击之前锁定他们。 黑客经常盗取IP地址来窃取数据并发动攻击,额外树状分类器可以更快地嗅出这些黑客。 如果你每次都要依靠一连串玩电话游戏的人把你的那些敏感信息送到需要的地方,你会有什么感觉? 太糟糕了,因为这就是互联网的运作方式。 使用所谓的边界网关协议(BGP),数据通过互...
MSP430超低功耗(ULP)FRAM平台集成了独特的嵌入式FRAM和全面的超低功耗系统架构,让创新者能够以较低的能量预算提高性能。FRAM技术整合了SRAM的速度、灵活性和耐久性与闪存的稳定性和可靠性,大幅降低了功耗。MSP430 ULP FRAM产品系列包含丰富的器件,具有FRAM、ULP 16位MSP430 CPU和面向各种应用的智能外设。ULP架构展示了7种低功耗模式,能够延长电...
近日,半导体微组装材料解决方案提供商广州先艺电子科技有限公司 (以下简称“先艺电子”) 获A轮投资,投资方为国投创业,推动半导体先进封装材料实现国产替代。先艺电子成立于2008年,是一家集半导体先进封装微连接材料研发、生产、销售于一体的企业。先艺电子自主研发并拥有自主知识产权的金锡焊料已达国内领先、国际先进水平,成功实现国产替代,打破...

史海拾趣

问答坊 | AI 解惑

PIC单片机控制彩屏

我司有CSTN、TFT液晶屏控制驱动板,能用51、PIC单片机、DSP控制,能显示256--65536色,价格低廉,编程简单,适合于点阵为320*240  640*480的数字屏,提供各种工控液晶屏,液晶屏驱动方案,控制IC,如有需求,与我联系。  0755-81261729&n ...…

查看全部问答∨

彩屏示波表

单通道,彩屏显示,存储回放功能,游标测量功能,频率,幅度自动测量,AC/DC偶和方式选择,实时/存储工作方式选择 采样率: 60M, 30M, 15M, 6M, 3M, 1.5M, 600K, 300K, 150K, 60K, 30K, 15K, 6K, 3K 垂直灵敏度:5mv/div,10mv/div,20mv/div, ...…

查看全部问答∨

从网上Down的程序疑问,求解

从网上Down的程序疑问,求解 CD4094驱动程序 CD4094用的比较广...可以用在静态显示...串口转并口...驱动数码管LED等... 程序... #include<at89x52.h> #include<intrins.h> #define uint  unsigned int #define uchar uns ...…

查看全部问答∨

大家讨论一下各自NandFlash里面有些什么数据,他们是怎么分布的,被这个问题难住了!

大家讨论一下各自NandFlash里面有些什么数据,他们是怎么分布的,被这个问题难住了!…

查看全部问答∨

VS2005 IDE里面的Target/Remote Tools/System Information菜单不能用,有没解决的好办法?我想随时知道我自己的程序跑起

VS2005 IDE里面的Target/Remote Tools/System Information菜单不能用,有没解决的好办法?我想随时知道我自己的程序跑起来后的系统内存状态!…

查看全部问答∨

帮我看看这个自作并口isp编程器的原理图?

帮我看看这个图里面的R1,R2是对应哪两个引脚?是不是R1——P3.0(RXD),R2——P3.1(TXD)? …

查看全部问答∨

在PC上接入多个相同的usb设备,第二个设备提示安装驱动,为什么?

我在PC上接入两个相同的usb设备,通常usb端口可以提供500ma的电流,我接的设备耗电都小于这个值,但是在接入第二个设备时,总是提示安装驱动,或者干脆无法识别。 我在同事的新机箱上试验,他的机器可以,但是我的不行,不知道这种现象除了更换机 ...…

查看全部问答∨

请教ARM CPU响应IRQ中断以及处理,返回的细节问题

程序运行在SVC模式,突然发生了IRQ,会发生什么事情? (1)CPU会自动把CPSR保存到SPSR_IRQ中 (2)然后把PC保存到R14_IRQ (3)然后把CPSR中的模式位强制设置为IRQ模式 (4)然后把PC强制设置为0x18 我理解的对么? 那么,IRQ处理程序怎么写,是不是要完 ...…

查看全部问答∨

如何使STM32进行USB传输时提高传输速度?还请大家不吝赐教啊

    最近一直在学习USB,总算是稍微有点懂了。现在自己写的PC端USB驱动程序和应用程序终于可以成功实现STM32的BULK /INT传输和有数据/无数据传输控制请求等功能(STM32固件的程序我是用STM32 USB开发工具包中的 ...…

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

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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