- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
stm32中定时器产生不同PWM的基本思路
在stm32中利用定时器TIM调制PWM的几种方法:
说说我的学习经历:从开始接触到现在有好几个月了,但是学习还是比较的费劲,而且速度也比较的缓慢,当然相比之前还是有很大的进步,记得刚刚学习的时候,建工程都是大四学长手把手教的。废话不多说先来讲讲定时器的配置:
STM32F10系列最少3个、做多有8个定时器,都是16位定时器,且相互之间是独立的,计数范围为0x0000-0xffff,最大计数值为65535.可以用于测量输入信号的脉冲长度或者产生输出波形(输出比较和PWM)分为通用定时器,高级定时器,以及看门狗定时器
下面主要讲通用定时器的配置问题:
以定时器TIM1为例:先进行函数的配置
void timer1_config()
{
TIM_TimeBaseInitTypDef TIM_TimeBaseStructure;
//开定时器1外设时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM1,ENABLE);
//计时50000次时间为50000/10M=500ms
TIM_TimeBaseStructure.TIM_Period=50000 ;
TIM_TimeBaseStructure.TIM_Prescaler = 720-1;//720分频
TIM_TimeBaseStructure.TIM_ClockDivision =0;//时钟分割为0;
//计数模式向上计数
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1,TIM_TimeBaseStructure)//初始化TIM1
TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);//开启定时器中断
TIM_Cmd(TIM1,ENABLE); //使能定时器
}
有定时器则一定会有中断发生,所以要配置中断优先级,对于中断优先
级函数配置如下:
NVIC_InitTypDef NVIC_InitStructure;
//抢占优先级为1位,从优先级为3位
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1) ;
NVIC_InitStructure.NVIC_IRQChannel=TIM1_IRQn; //定义定时器1为请求通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; //抢占式优先级为0
NVIC_InitStructure.NVIC_IRQChannelSubPriority=2; //从优先级为2
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能中断优先级
NVIC_Init(NVIC_InitStructure); //初始化中断
}
对于优先级中的抢占式和从优先级做如下解释:
抢占式优先级:是可以抢占的中断,比如正在执行的优先级为10的中断,突然来了一个优先级为5的中断,此时cpu会转向优先级为5的中断;
从优先级:从优先级不会抢占正在执行的中断程序,但是如果两个事件同时发生,那么cpu会执行优先级高的事件,但是已经执行就不会再更改了,即使优先级比正在执行的高,这正好和抢占式优先级不同,抢占式优先级不论程序是否在执行,只要现在发生的中断优先级比正在执行的要高,就会更改。
接下来写中断处理函数:
Void TIM1_IRQHandler(void)
{
If(TIM_GetITStatus(TIM1,TIM_IT_Update)!=Reset) //接受到中断
{
TIM_ClearnITPendingBit(TIM1,TIM_IT_Update); //清除中断位
功能模块1,需要实现的功能
功能模块2
.....
}
}
功能模块中写上自己需要实现的功能
至此,一个完整的定时器函数模块定义完成,
下面我给大家写一下如何调制PWM,定时器中对于PWM的调制有几种状态,第一种频率占空比一定,第二种频率和占空比可以改变,第三种频率一定,占空比可以改变。
先讲第一种情况:频率和占空比一定时的配置情况
void Tim1_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
文档评论(0)