下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
STM32高级定时器-PWM简单使用(转〕2023-07-1016:19高级定时器与通用定时器比拟类似,下面是一个TIM1的PWM程序,TIM1是STM32唯一的高级定时器。共有4个通道有死区有互补。先是配置IO脚:
GPIO_InitTypeDefGPIO_InitStructure;
/*PA8设置为功能脚(PWM)*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
/*PB13设置为PWM的反极性输出*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);/*开时钟PWM的与GPIO的*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);/*配置TIM1*/
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
TIM_OCInitTypeDefTIM_OCInitStructure;voidTim1_Configuration(void)
{
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
TIM_OCInitTypeDefTIM_OCInitStructure;
TIM_DeInit(TIM1);//重设为缺省值/*TIM1时钟配置*/
TIM_TimeBaseStructure.TIM_Prescaler=4000;
//预分频(时钟分频)72M/4000=18K
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
//向上计数
TIM_TimeBaseStructure.TIM_Period=144;
//装载值18k/144=125hz就是说向上加的144便满了
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
//设置了时钟分割不懂得不管
TIM_TimeBaseStructure.TIM_RepetitionCounter=0x0;
//周期计数器值不懂得不管
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
//初始化TIMx的时间基数单位/*Channel1ConfigurationinPWMmode通道一的PWM*/
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
//PWM模式2
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//正向通道有效PA8
TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;//反向通道也有效PB13
TIM_OCInitStructure.TIM_Pulse=40;
//占空时间144中有40的时间为高,互补的输出正好相反
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;//输出极性
TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_Low;
//互补端的极性
TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset;//空闲状态下的非工作状态不管
TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCIdleState_Reset;//先不管TIM_OC1Init(TIM1,&TIM_OCInitStructure);
//数初始化外设TIMx通道1这里2.0库为TIM_OCInit/*TIM1counterenable开定时器*/
TIM_Cmd(TIM1,ENABLE);
/*TIM1MainOutputEnable使能TIM1外设的主输出*/
TIM_CtrlPWMOutputs(TIM1,ENABLE);
}//设置捕获存放器1
voidSetT1Pwm1(u16pulse)
{
TIM1->CCR1=pulse;
}/*操作存放器改变占空时间*//*****************************************************************************************************************TIM1的定时器通道时间1到4分别为PB8PA9PA10PA11而互补输出分别为PB13PB14PB15中止PB12。如果输出与互补输出极性相同的话就刚好输出高互补低至于PWM模式1与模式2的区别在下列图:这个是模式1的了绿为输出黄为互补*************************************************************************************************上图是模式2的情况正好和模式1的反过来了144中有40为高互补的有40为低。*************************************************************************************************///在MAIN中加点键盘扫描啥的用来改变占空比/************************************************************
**实验名称:PWM
**功能:是PA8产生PWM输出,PA8为驱动LED1和马达的IO,
通过UPDOWN键,可以改变占空比,从而让ED1和小马达的产生变化
**考前须知:LED是低有效,马达那么是高有效,所以LED全灭的时候马达转速到达最高.
**作者:电子白菜
*************************************************************/#include"STM32Lib\\stm32f10x.h"
#include"hal.h"externvoidSetT1Pwm1(u16pulse);intmain(void)
{
u16pulse=40;
ChipHalInit();
//片内硬件初始化
ChipOutHalInit();
//片外硬件初始化
for(;;)
{
if(GET_UP())
{
while(GET_UP());
if(pulse<=144)
{
pulse+=5;
SetT1Pwm1(pulse);
}
}
if(GET_DOWN())
{
while(GET_DOWN());
if(pulse>30)
{
pulse-=5;
SetT1Pwm1(pulse);
}
}
}
}/**********************
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论