你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】利用STM32F103的高级定时器产生三路互补PWM波形,占空比可调,带死区

[复制链接]
STMCU小助手 发布时间:2022-4-21 21:00

  1. void timer_init(void)
  2. {
  3.         GPIO_InitTypeDef  GPIO_InitStructure;
  4.         TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;
  5.         TIM_OCInitTypeDef TIM_OCInitStructure;
  6.         TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
  7.         
  8.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD,ENABLE);
  9.         
  10.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
  11.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
  12.         
  13.         
  14.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;
  15.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
  16.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  17.         GPIO_Init(GPIOA,&GPIO_InitStructure);
  18.         
  19.         
  20.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
  21.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
  22.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  23.         GPIO_Init(GPIOB,&GPIO_InitStructure);
  24.         
  25.         TIM_BaseInitStructure.TIM_Period=1000-1;
  26.         TIM_BaseInitStructure.TIM_Prescaler=72-1;
  27.         TIM_BaseInitStructure.TIM_ClockDivision=0;
  28.         TIM_BaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
  29.         TIM_BaseInitStructure.TIM_RepetitionCounter=0;
  30.         TIM_TimeBaseInit(TIM1,&TIM_BaseInitStructure);//启用ARR的影子寄存器(直到产生更新事件才更改设置) TIM_ARRPreloadConfig(TIM1,?ENABLE);
  31.         
  32.         //TIM1_OC1模块设置(设置1通道占空比)
  33.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  34.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  35.         TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
  36.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  37.         TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
  38.         TIM_OCInitStructure.TIM_Pulse = 120;//TIM1_Pulse设置了待装入捕获比较寄存器的脉冲值  
  39.         
  40.         TIM_OC1Init(TIM1,&TIM_OCInitStructure);  //启用CCR1寄存器的影子寄存器(直到产生更新事件才更改设置)
  41.         TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);


  42.         //TIM1_OC2模块设置(设置2通道占空比)

  43.         TIM_OC2Init(TIM1, &TIM_OCInitStructure); //启用CCR2寄存器的影子寄存器(直到产生更新事件才更改设置)
  44.         TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);

  45.         //TIM1_OC3模块设置(设置3通道占空比)

  46.         TIM_OC3Init(TIM1, &TIM_OCInitStructure); //启用CCR2寄存器的影子寄存器(直到产生更新事件才更改设置)
  47.         TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);
  48.         //死区设置
  49.         TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
  50.         TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
  51.         TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
  52.         TIM_BDTRInitStructure.TIM_DeadTime = 0x90; //这里调整死区大小0-0xff
  53.         TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;
  54.         TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;
  55.         TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
  56.         TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);
  57.         
  58.         //TIM1开启
  59.         TIM_Cmd(TIM1, ENABLE);
  60.         //TIM1_OC通道输出PWM(一定要加)
  61.         TIM_CtrlPWMOutputs(TIM1, ENABLE);
  62.         
  63.         
  64. }



复制代码

收藏 评论0 发布时间:2022-4-21 21:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版