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);
上一篇:STM32F030内部时钟设置
下一篇:stm32之位带操作:原理及使用方式
推荐阅读
史海拾趣
随着全球环保意识的不断提高,电子行业对绿色环保的要求也越来越高。Connector City公司积极响应国家环保政策,加强了对生产过程的环保管理。公司引进了先进的环保设备和技术,减少了生产过程中的废弃物排放和能源消耗。同时,公司还注重产品的环保性能设计,推出了多款符合环保标准的新型连接器产品。通过坚持绿色环保和可持续发展理念,公司赢得了社会的广泛赞誉和支持。
这五个故事仅是对Connector City公司可能发展路径的一种虚构描述,实际情况可能因市场变化、公司策略调整等多种因素而有所不同。在实际发展中,公司需要根据自身情况和市场环境做出灵活的调整和决策。
为了降低生产成本、提高生产效率,Connector City公司开始实施产业链整合战略。公司与上游原材料供应商和下游客户建立了紧密的合作关系,实现了供应链的优化和协同发展。通过整合产业链资源,公司不仅降低了采购成本和市场风险,还提高了产品质量和交货速度,进一步增强了市场竞争力。
All Sensors公司的创始人Dennis被誉为美国硅谷的传奇人物。在70年代,Dennis在硅谷成功发明了全球第一颗压力传感器,这一创新不仅奠定了All Sensors在传感器领域的领先地位,也为整个电子行业带来了新的技术革命。这颗传感器的诞生,标志着All Sensors正式踏上了传感器技术的研发之路,为后续的发展奠定了坚实的基础。
在智能制造领域,中电熊猫也取得了显著进展。2010年,中电熊猫开始研发液晶面板工厂的智能运储系统,打破了以往依赖国外供应商的局面。到了2011年,中电熊猫成功完成了国内首条高世代液晶面板智能运储系统的研发,并逐渐成为国内该系统的主要供应商。此外,中电熊猫还在液晶玻璃生产线系统等方面实现了国产化研发,提升了整体产业的竞争力。
随着CMOS图像传感器在智能手机、安防监控、汽车等领域的广泛应用,CMOSIS公司看到了巨大的市场潜力。公司加大了市场拓展力度,不仅在国内市场取得了显著成绩,还积极开拓海外市场。同时,公司注重品牌建设,通过提升产品质量、加强售后服务等方式,树立了良好的企业形象和口碑。
驰兴电感深知客户是企业发展的根基。公司始终坚持以客户为中心的服务理念,为客户提供全方位、个性化的服务。无论是产品选型、技术支持还是售后服务,驰兴电感都能及时响应客户需求,提供满意的解决方案。这种贴心的服务赢得了客户的信赖和支持,也为公司的持续发展奠定了坚实基础。
我司有CSTN、TFT液晶屏控制驱动板,能用51、PIC单片机、DSP控制,能显示256--65536色,价格低廉,编程简单,适合于点阵为320*240 640*480的数字屏,提供各种工控液晶屏,液晶屏驱动方案,控制IC,如有需求,与我联系。 0755-81261729&n ...… 查看全部问答∨ |
|
从网上Down的程序疑问,求解 CD4094驱动程序 CD4094用的比较广...可以用在静态显示...串口转并口...驱动数码管LED等... 程序... #include<at89x52.h> #include<intrins.h> #define uint unsigned int #define uchar uns ...… 查看全部问答∨ |
|
VS2005 IDE里面的Target/Remote Tools/System Information菜单不能用,有没解决的好办法?我想随时知道我自己的程序跑起 VS2005 IDE里面的Target/Remote Tools/System Information菜单不能用,有没解决的好办法?我想随时知道我自己的程序跑起来后的系统内存状态!… 查看全部问答∨ |
|
在PC上接入多个相同的usb设备,第二个设备提示安装驱动,为什么? 我在PC上接入两个相同的usb设备,通常usb端口可以提供500ma的电流,我接的设备耗电都小于这个值,但是在接入第二个设备时,总是提示安装驱动,或者干脆无法识别。 我在同事的新机箱上试验,他的机器可以,但是我的不行,不知道这种现象除了更换机 ...… 查看全部问答∨ |
|
程序运行在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开发工具包中的 ...… 查看全部问答∨ |