



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在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的中断,突然来了一个优先级为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;/* pa8设置为功能脚(pwm) */gpio_initstructure.gpio_pin = gpio_pin_8|gpio_pin_9;gpio_initstructure.gpio_mode = gpio_mode_af_pp; /复用推挽输出(该脚已经用过)gpio_initstructure.gpio_speed = gpio_speed_50mhz; gpio_init(gpioa, &gpio_initstructure);rcc_apb2periphclockcmd(rcc_apb2periph_tim1,enable);/开tmi1外设时钟tim_deinit(tim1);/将tmi寄存器设置为缺省状态/*tim1时钟配置*/tim_timebasestructure.tim_prescaler = 4000;/预分频(时钟分频)72m/4000=18ktim_timebasestructure.tim_countermode = tim_countermode_up;/向上计数tim_timebasestructure.tim_period = 144;/装载值 18k/144=125hz 时间为8mstim_timebasestructure.tim_clockdivision = tim_ckd_div1;tim_timebasestructure.tim_repetitioncounter = 0x0;/repetition 重复计数器/tim_timebasestructure.tim_repetitioncounter = 0x0;/repetition 重复计数器。tim_repetitioncounter:设置周期计数器,其值必须在0x00-0xff之间,且此参数只适用于tmi1和tmi8种tim_timebaseinit(tim1,&tim_timebasestructure);/设置两个不同占空比的定时器通道oc1、oc2;/* channel 1 configuration in pwm mode 设置tim1通道1的参数*/tim_ocinitstructure.tim_ocmode = tim_ocmode_pwm2; /pwm模式2tim_ocinitstructure.tim_outputstate = tim_outputstate_enable; /正向通道有效tim_ocinitstructure.tim_outputnstate = tim_outputnstate_disable;/反向通道无效tim_ocinitstructure.tim_pulse = 40; /占空时间 总的周期为8ms 占空时间为约为2.4mstim_ocinitstructure.tim_ocpolarity = tim_ocpolarity_low; /输出极性tim_ocinitstructure.tim_ocnpolarity = tim_ocnpolarity_high; /互补端的极性 tim_ocinitstructure.tim_ocidlestate = tim_ocidlestate_set; /输出空闲非工作状态tim_ocinitstructure.tim_ocnidlestate = tim_ocidlestate_reset; /输出互补空闲非工作状态/* channel 2 configuration in pwm mode 设置tim1通道2的参数*/tim_ocinitstructure.tim_ocmode = tim_ocmode_pwm2; /pwm模式2tim_ocinitstructure.tim_outputstate = tim_outputstate_enable; /正向通道有效tim_ocinitstructure.tim_outputnstate = tim_outputnstate_disable;/反向通道无效tim_ocinitstructure.tim_pulse = 72; /占空时间 总的周期为8ms 占空时间为约为4mstim_ocinitstructure.tim_ocpolarity = tim_ocpolarity_low; /输出极性tim_ocinitstructure.tim_ocnpolarity = tim_ocnpolarity_high; /互补端的极性 tim_ocinitstructure.tim_ocidlestate = tim_ocidlestate_set; /输出空闲非工作状态tim_ocinitstructure.tim_ocnidlestate = tim_ocidlestate_reset; /输出互补空闲非工作状态tim_oc2init(tim1,&tim_ocinitstructure); /初始化通道2/* tim1 counter enable */tim_cmd(tim1,enable);/使能定时器1/* tim1 main output enable */tim_ctrlpwmoutputs(tim1,enable);/使能定时器1的主输出/一般定时器一种有个四个通道 oc1、oc2、oc3、oc4;/注意占空比tim_ocinitstructure.tim_pulse 的值不能超过定时器的周期,也即tim_timebasestructure.tim_period 的值,第二种情况:频率一定占空比可以任意设置,频率一定的情况下可以改变定时器输出通道tim_ocinitstructure.tim_pulse的值,这种情况下可以通过给定时器的捕获寄存器的值进行改变,即改变脉冲的大小,从而改变占空比在上述的程序的基础上增加如下程序:/设置捕获寄存器1voi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 粮油市场营销咨询方案
- 【7科完整版】2025年执业药师考试全科真题答案完整版来啦
- 2025湖南邵阳新宁县医疗保障局下属医保基金稽核中心选调工作人员1人考试参考题库及答案解析
- 2025年福建省厦门国际旅行卫生保健中心招聘1人模拟试卷及答案详解参考
- 2025甘肃定西市陇西县人力资源有限公司招聘工作人员4人考试参考试题及答案解析
- 崇州市场咨询方案公示
- 2025湖南怀化市辰溪县发展和改革局招募见习生2人模拟试卷及答案详解参考
- 2025福建莆田市公共交通集团有限公司招聘企业员工23人考试参考试题及答案解析
- 2025年4月广东潮州市第三人民医院招聘编外人员49人考前自测高频考点模拟试题参考答案详解
- 2025云南事业单位e类考试题库及答案
- 公共营养师考试题库(附答案)四级真题及答案
- 广东省深圳市福田区2024-2025学年八年级上学期语文期中考试试卷(含答案)
- SAP QM质量管理模块配置详解(S4系统)
- 机械制图选择题试题库及答案
- 医院安全警示教育
- 2025届名校名师模拟卷(九)语文试题(PDF版含答案)
- 技术部工作汇报与未来规划
- 学员游泳培训合同协议
- 虚拟电厂综合管理制度
- 2025年周年热点大事件复习课件-【知识精讲精研】高三历史统编版(2019)二轮复习
- 【道法】做自强不息的中国人课件+-2024-2025学年统编版道德与法治七年级下册
评论
0/150
提交评论