零死角玩转stm32-中级篇7、PWM(软件仿真).pdf
- 文档编号:3213967
- 上传时间:2022-11-20
- 格式:PDF
- 页数:14
- 大小:1.28MB
零死角玩转stm32-中级篇7、PWM(软件仿真).pdf
《零死角玩转stm32-中级篇7、PWM(软件仿真).pdf》由会员分享,可在线阅读,更多相关《零死角玩转stm32-中级篇7、PWM(软件仿真).pdf(14页珍藏版)》请在冰豆网上搜索。
-第2页-00、友情提示、友情提示零死角玩转零死角玩转STM32系列教程由初级篇初级篇、中级篇中级篇、高级篇高级篇、系统篇、系统篇、四个部分组成,根据野火STM32开发板旧版教程升级而来,且经过重新深入编写,重新排版,更适合初学者,步步为营,从入门到精通,从裸奔到系统,让您零死角玩转STM32。
M3的世界,与野火同行,乐意惬无边。
另外,野火团队历时一年精心打造的STM32库开发实战指南库开发实战指南将于今年10月份由机械工业出版社机械工业出版社出版,该书的排版更适于纸质书本阅读以及更有利于查阅资料。
内容上会给你带来更多的惊喜。
是一本学习STM32必备的工具书。
敬请期待!
-第3页-77、PWMPWM(软件仿真)(软件仿真)7.1实验描述及工程文件清单实验描述及工程文件清单实验描述实验描述通用定时器TIM3产生4路不同占空比的PWM波。
TIM3Channel1dutycycle=(TIM3_CCR1/TIM3_ARR)*100=50%TIM3Channel2dutycycle=(TIM3_CCR2/TIM3_ARR)*100=37.5%TIM3Channel3dutycycle=(TIM3_CCR3/TIM3_ARR)*100=25%TIM3Channel4dutycycle=(TIM3_CCR4/TIM3_ARR)*100=12.5%硬件连接硬件连接PA.06:
(TIM3_CH1)PA.07:
(TIM3_CH2)PB.00:
(TIM3_CH3)PB.01:
(TIM3_CH4)用到的库文件用到的库文件startup/start_stm32f10x_hd.cCMSIS/core_cm3.cCMSIS/system_stm32f10x.cFWlib/stm32f10x_gpio.cFWlib/stm32f10x_rcc.cFWlib/stm32f10x_flash.cFWlib/stm32f10x_tim.c用户编写的文件用户编写的文件USER/main.cUSER/stm32f10x_it.cUSER/pwm_output.c-第4页-7.2STM32通用定时器简介通用定时器简介STM32总共有8个定时器,TIM1和TIM8是16位的高级定时器,TIM2、TIM3、TIM4、TIM5是通用定时器。
本实验中只是讲解通用定时器TIM3,利用TIM3产生4路不同占空比的方波。
7.3代码分析代码分析首先我们需在工程中添加我们需要用到的库文件,有关库文件的配置参考前面的教程,这里不再详述。
接下来我们从main函数讲起:
1./*2.*函数名:
main3.*描述:
主函数4.*输入:
无5.*输出:
无6.*/7.intmain(void)8.9./*配置系统时钟为72M*/10.SystemInit();11./*TIM3PWM波输出初始化,并使能TIM3PWM输出*/12.TIM3_PWM_Init();13.14.while
(1)15.16.进入mian函数我们首先调用库函数SystemInit();将我们的系统时钟配置为72MHZ。
有关库函数SystemInit();的讲解请参考前面的教程。
函数用于初始化TIM3的PWM信号I/O,配置PWM信号的模式,如周期、极性、占空比等。
TIM3_PWM_Init();由我们用户在pwm_output.c中实现:
-第5页-1./*2.*函数名:
TIM3_Mode_Config3.*描述:
TIM3输出PWM信号初始化,只要调用这个函数4.*TIM3的四个通道就会有PWM信号输出5.*输入:
无6.*输出:
无7.*调用:
外部调用8.*/9.voidTIM3_PWM_Init(void)10.11.TIM3_GPIO_Config();12.TIM3_Mode_Config();13.其中用来TIM3_GPIO_Config();配置GPIO,代码很简单,TIM3_Mode_Config();用来配置PWM信号的模式,详细代码如下,主要做了如下工作:
1-设定TIM信号周期2-设定TIM预分频值3-设定TIM分频系数4-设定TIM计数模式5-根据TIM_TimeBaseInitStruct这个结构体里面的值初始化TIM6-设定TIM的OC模式7-TIM输出使能8-设定电平跳变值9-设定PWM信号的极性10-使能TIM信号通道11-使能TIM重载寄存器CCRX12-使能TIM重载寄存器ARR13-使能TIM计数器1./*2.*函数名:
TIM3_Mode_Config3.*描述:
配置TIM3输出的PWM信号的模式,如周期、极性、占空比4.*输入:
无-第6页-5.*输出:
无6.*调用:
内部调用7.*/8.staticvoidTIM3_Mode_Config(void)9.10.TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;11.TIM_OCInitTypeDefTIM_OCInitStructure;12.13./*PWM信号电平跳变值*/14.u16CCR1_Val=500;15.u16CCR2_Val=375;16.u16CCR3_Val=250;17.u16CCR4_Val=125;18.19./*-20.TIM3Configuration:
generate4PWMsignalswith4differentdutycycles:
21.TIM3CLK=36MHz,Prescaler=0x0,TIM3counterclock=36MHz22.TIM3ARRRegister=999=TIM3Frequency=TIM3counterclock/(ARR+1)23.TIM3Frequency=36KHz.24.TIM3Channel1dutycycle=(TIM3_CCR1/TIM3_ARR)*100=50%25.TIM3Channel2dutycycle=(TIM3_CCR2/TIM3_ARR)*100=37.5%26.TIM3Channel3dutycycle=(TIM3_CCR3/TIM3_ARR)*100=25%27.TIM3Channel4dutycycle=(TIM3_CCR4/TIM3_ARR)*100=12.5%28.-*/29.30./*Timebaseconfiguration*/31./当定时器从0计数到999,即为1000次,为一个定时周期32.TIM_TimeBaseStructure.TIM_Period=999;33.34./设置预分频:
不预分频,即为36MHz35.TIM_TimeBaseStructure.TIM_Prescaler=0;36.37.TIM_TimeBaseStructure.TIM_ClockDivision=0;/设置时钟分频系数:
不分频38.TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;/向上计数模式39.40.TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);41.42./*PWM1Modeconfiguration:
Channel1*/43.TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;/配置为PWM模式144.TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;45.46./设置跳变值,当计数器计数到这个值时,电平发生跳变47.TIM_OCInitStructure.TIM_Pulse=CCR1_Val;48.49./当定时器计数值小于CCR1_Val时为高电平50.TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;51.52.TIM_OC1Init(TIM3,&TIM_OCInitStructure);/使能通道153.TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);54.55./*PWM1Modeconfiguration:
Channel2*/56.TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;57.58./设置通道2的电平跳变值,输出另外一个占空比的PWM59.TIM_OCInitStructure.TIM_Pulse=CCR2_Val;60.61.TIM_OC2Init(TIM3,&TIM_OCInitStructure);/使能通道262.TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);63.64./*PWM1Modeconfiguration:
Channel3*/65.TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;66.67./设置通道3的电平跳变值,输出另外一个占空比的PWM68.TIM_OCInitStructure.TIM_Pulse=CCR3_Val;69.70.TIM_OC3Init(TIM3,&TIM_OCInitStructure);/使能通道371.TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable);72.73./*PWM1Modeconfiguration:
Channel4*/74.TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;75.76./设置通道4的电平跳变值,输出另外一个占空比的PWM77.TIM_OCInitStructure.TIM_Pulse=CCR4_Val;78.TIM_OC4Init(TIM3,&TIM_OCInitStructure);/使能通道4-第7页-79.TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable);80.81.TIM_ARRPreloadConfig(TIM3,ENABLE);82.83./*TIM3enablecounter*/84.TIM_Cmd(TIM3,ENABLE);/使能定时器385.现在,TIM3的通道1(PA.06)、2(PA.07)、3(PB.00)、4(PB.01)就会输出不同占空比的PWM信号了。
PWM信号可以通过示波器看到。
考虑到并不是每个用户手头上都有示波器,我们在这里采用软件仿真的方式来验证我们的程序。
7.4软件仿真软件仿真以前我们都是通过JLINK直接将我们的代码烧到开发板的flash中去调试,现在要换成软件仿真,得首先设置下我们的开发环境,按照如下步骤所示:
1、点击TargetOptions选项。
-第8页-2、选中Debug选项卡。
3、选中UseSimulator选项,然后点击OK即可。
-第9页-下面我们开始进行软件仿真,按照如下步骤进行:
1.1-点击Start/StopDebugSession选项。
2.2-点击AnalysisWindows选项。
-第10页-3.3-点击Setup选项卡。
4.4-点击NEW(Inse
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 死角 stm32 中级 PWM 软件 仿真