没有合适的资源?快使用搜索试试~ 我知道了~
stm32中定时器产生不同PWM的基本思路.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 166 浏览量
2023-06-06
21:04:39
上传
评论
收藏 31KB DOC 举报
温馨提示
试读
4页
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); //使能定时器
}
关于时间的计算问题:
外设系统时钟的频率为 72M,进行 720 分频以后,频率 f=72M/720=100khz. 如果要定时
0.1s 则计数值为 10000,计算公式为:时间(t)=计数值(n)/频率(f).注意计数值 n 介于 0
到 65535 之间
有定时器则一定会有中断发生,所以要配置中断优先级,对于中断优先
级函数配置如下:
Void nvic_config()
{
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 的中断,突然来了一个优
资源评论
oligaga
- 粉丝: 52
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功