搜索
查看: 3155|回复: 0

[原创] TIM3的PWM输出

[复制链接]

该用户从未签到

37

主题

206

帖子

0

蝴蝶豆

金牌会员

最后登录
2018-12-27
发表于 2017-3-11 14:38:28 | 显示全部楼层 |阅读模式
  1. #include "stm32f10x.h"
  2. void STM32_TIM_GPIO_Configuration(void)
  3. {
  4.         GPIO_InitTypeDef  GPIO_InitStructure;
  5.   
  6.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);

  7. <img src="https://www.stmcu.org.cn/module/forum/forum.php?mod=image&aid=390763&size=300x300&key=ccf1e09fa4605482&nocache=yes&type=fixnone" aid="attachimg_390763" alt="" border="0">
  8. <img src="https://www.stmcu.org.cn/module/forum/forum.php?mod=image&aid=390764&size=300x300&key=c2083d0c105d5af9&nocache=yes&type=fixnone" aid="attachimg_390764" alt="" border="0">
  9.         //这里TIM3的通道1是GPIOA_Pin_6,通道2是GPIOA_Pin_7;通道3是GPIOB_Pin_0;
  10. //这里TIM3的通道4是GPIOB_Pin_1;
  11.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  12.         //使用PWM的功能需要设置成AF_PP模式
  13.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  14.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
  15.         GPIO_Init(GPIOA,&GPIO_InitStructure);
  16.        
  17.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
  18.         GPIO_Init(GPIOB,&GPIO_InitStructure);
  19. }
  20. void NVIC_TIM3Configuration(void)//配置TIM3的优先级
  21. {
  22.         NVIC_InitTypeDef  NVIC_InitStructure;
  23.        
  24.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  25.        
  26.         NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
  27.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  28.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  29.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  30.        
  31.         NVIC_Init(&NVIC_InitStructure);
  32. }


  33. TIM3_PWM_Init(void)
  34. {
  35.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStructure;//TIM定时器的配置
  36.         TIM_OCInitTypeDef        TIM_OCInitStructure;//TIMPWM的
  37.        
  38.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
  39. <img src="https://www.stmcu.org.cn/module/forum/forum.php?mod=image&aid=390765&size=300x300&key=561e9645b6d91c33&nocache=yes&type=fixnone" aid="attachimg_390765" alt="" border="0">
  40.         //使能TIM3的时钟线;
  41.        
  42. <img src="https://www.stmcu.org.cn/module/forum/forum.php?mod=image&aid=390766&size=300x300&key=ab4502d35588f011&nocache=yes&type=fixnone" aid="attachimg_390766" alt="" border="0">
  43.         TIM_TimeBaseInitStructure.TIM_Prescaler = 100-1;
  44.         //分频;意思就是将72MHz的频率分成多少;这里是分成72M/100 = 720KHz了;
  45.         TIM_TimeBaseInitStructure.TIM_Period = 720-1;
  46.         //这个是定时器需要计数的最大位置;就是从0计数到Period;
  47.         //这里的预分频系数(Presecaler)和预装值(Period)的乘积 表示频率;
  48.         TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
  49.         //这个是定时器计数的模式,可以向下计数,也可以向上计数;
  50.         TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;
  51.         //这个是预分频系数,一般不去操作它;
  52.   TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
  53.         //初始化TIM3
  54.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  55.         //这个是定时器的模式;在这里使用的是PWM功能;
  56.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  57.         //这个是比较输出使能;意思就是到底输不输出到相应的引脚;
  58.         TIM_OCInitStructure.TIM_Pulse = 600;
  59.         //这个是比较捕获的脉冲数就是在一个周期中捕获多少个1(0);这里Pulse/Period就代表的是占空比;
  60.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  61.         //这个是输出极性:这里选择的是输出极性高,当然你也可以设置Low;
  62.         TIM_OC1Init(TIM3,&TIM_OCInitStructure);
  63.         //初始化通道1;
  64.         TIM_OC2Init(TIM3,&TIM_OCInitStructure);
  65.         //初始化通道2;
  66.         TIM_OC3Init(TIM3,&TIM_OCInitStructure);
  67.         //初始化通道3;
  68.         TIM_OC4Init(TIM3,&TIM_OCInitStructure);
  69.         //初始化通道4;
  70.         TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
  71.         //使能或者失能 TIMx 在 CCR2 上的预装载寄存器
  72.         TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
  73.         //使能或者失能 TIMx 在 CCR2 上的预装载寄存器
  74.         TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable);
  75.         //使能或者失能 TIMx 在 CCR2 上的预装载寄存器
  76.         TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable);
  77.         //使能或者失能 TIMx 在 CCR2 上的预装载寄存器
  78.        
  79.         //TIM_ITConfig(TIM3,TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4,ENABLE);
  80.         //使能标志位CC1,CC2,CC3,CC4
  81.         TIM_Cmd(TIM3,ENABLE);
  82.         //使能TIM;
  83.        
  84.        
  85.        
  86. }
  87. // void  TIM3_IRQHandler(void)
  88. // {
  89. //          TIM_ClearITPendingBit(TIM3,TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4);
  90. //          Flag = 1;
  91. // }

  92. void Delay(uint32_t nCount)
  93. {
  94.         while(--nCount);
  95. }

  96. int main()
  97. {
  98.         uint16_t i=0;
  99.         STM32_TIM_GPIO_Configuration();
  100.         NVIC_TIM3Configuration();
  101.         TIM3_PWM_Init();
  102.         while(1)
  103.         {
  104.                 TIM3->CCR2 = 500;
  105.                 for(i=0;i<499;i++)
  106.                 {
  107.                         Delay(0XFFFFF);
  108.                         TIM3->CCR2-=1;
  109.                 }
  110.                 for(i=0;i<499;i++)
  111.                 {
  112.                         Delay(0XFFFFF);
  113.                         TIM3->CCR2+=1;
  114.                 }
  115.         }
  116. }终于调出PWM了,在这里不敢独享,分享给那些还在调试PWM的人;
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-29 05:38 , Processed in 0.165657 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表