历史上的今天
返回首页

历史上的今天

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

正在发生

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

2018-10-16 来源:eefocus

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


推荐阅读

史海拾趣

Don Connex Electronics Co Ltd公司的发展小趣事

近年来,随着环保意识的提高,Don Connex Electronics积极响应绿色发展的号召,将环保理念融入产品设计和生产过程中。公司采用环保材料、节能减排的生产工艺,确保产品在使用过程中对环境的影响降到最低。同时,公司还积极参与环保公益活动,推动电子行业的绿色发展。

Adam Tech公司的发展小趣事

为了进一步拓展市场,Adam Tech开始实施全球化战略。公司在北美、欧洲和亚洲等地设立了多个代表处,以便更好地服务全球客户。这些代表处不仅为公司带来了更多的业务机会,也提升了公司在国际市场上的知名度。同时,公司还积极与各地合作伙伴建立紧密的合作关系,共同推动电子连接器行业的发展。

Cree(科瑞)公司的发展小趣事

Cree公司成立于1987年,初期专注于硅碳(SiC)材料的研发。在LED灯珠的制造工艺中,Cree的工程师们发现采用SiC材料制成的MOS功率管具备更好的市场价值。随着技术的不断进步,Cree开始将其应用于LED生产,这一创新使得Cree在LED行业中脱颖而出。公司的LED产品以其高效、耐用的特性受到市场的广泛认可,为Cree的后续发展奠定了坚实的基础。

富捷(FOJAN)公司的发展小趣事

自成立以来,富捷电子始终将技术创新视为企业发展的核心驱动力。公司投入巨资建立了一支国际专业的晶片电阻核心技术研发团队,专注于贴片电阻、合金电阻、车规电阻等产品的研发与生产。近年来,富捷电子成功研发出高端抗静电汽车晶片电阻FQS系列产品,并建设了“高端抗静电汽车晶片电阻智能工厂”,实现了从原材料入库到成品出库的全程智能化、自动化操作。这一创新不仅提升了产品性能,还满足了汽车电子行业对元件高可靠性、高稳定性的严格要求,推动了公司在汽车电子领域的快速发展。

DYMO公司的发展小趣事

随着市场需求的不断变化,DYMO公司不断推出新的产品线,以满足不同消费者的需求。除了传统的标签打印机外,DYMO公司还推出了便携式打印机、工业级打印机等多种类型的产品。这些产品不仅功能强大,而且设计精美,深受消费者的喜爱。通过产品线的多样化,DYMO公司进一步巩固了其在标签打印领域的领先地位。

AAC [American Accurate Components]公司的发展小趣事

进入21世纪,AAC公司继续加大市场拓展力度。2003年,AAC成功拓展了台湾市场,与明基、仁宝电脑和华宇电脑等知名企业建立了合作关系。为了满足这些客户对高品质耳机的需求,AAC开始生产制造耳机产品。这一创新举措不仅丰富了AAC的产品线,也进一步提升了其在电子消费产品市场的竞争力。

问答坊 | AI 解惑

基于单片机的酒瓶自动计数系统的设计

大家好啊,在这转悠了好几天,发现大家都是高手!我是一名专升本的学生,专科没有学过单片机本科学校因为大部分人都学过所以也就没开这门课,现在要做有关单片机的毕业设计,想请大家帮帮忙,谢谢了!     昨天问了一下老师那个设计一共 ...…

查看全部问答>

Altera的用IP核设计的信号发生程序

本帖最后由 paulhyde 于 2014-9-15 09:24 编辑 Altera的用IP核设计的信号发生程序  …

查看全部问答>

如何将ucfs文件系统植入nios ii工程中?

各位大侠:    ucfs导入nios ii工程后,编译时文件一直出错。求移植的具体步骤。不胜感激!…

查看全部问答>

我的CC2430能用SmartRF Studio7监测数据,而不能用Packet Sniffer?

我的CC2430能用SmartRF Studio7监测到数据,而不能用Packet Sniffer监控数据。…

查看全部问答>

VC6++封装成exe文件的问题

一直用VC++6做编译器,虽然有人让我换了,我嫌麻烦一直没换。用它写程序调试程序一切都很正常,唯独有个问题。把写好的程序封装成exe文件。具体的操作其实挺简单(当然没有命令行下简单)首先写代码,编译看有没有错误,没错误以后封装。封装方法是 ...…

查看全部问答>

小光棍节的礼物!让QVGA屏普及吧!2.4寸 QVGA TFT屏带触摸屏15元一个!

让QVGA屏普及吧!2.4寸 QVGA TFT屏带触摸屏15元一个(5个起),全新37脚ILI9320驱动,提供程序! 单个20元一个,数量不多欢迎抢购!     [ 本帖最后由 shanyan 于 2011-11-1 23:04 编辑 ]…

查看全部问答>

msp430g2553如何使外接的ch451控制8位数码管显示?

其实就是要AD采集的电压数据显示在数码管上,可这个数码管是通过CH451外接的,该怎么编程呢? …

查看全部问答>

我自己构建了CCSV5的工程,编译后总是提示如下错误

我自己构建了CCSV5的工程,编译后总是提示如下错误,我查了很多资料,都没有解决,能给我解决和解释一下吗,谢谢 …

查看全部问答>