找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3072|回复: 0
打印 上一主题 下一主题
收起左侧

stm32通过TMI2和tim3产生6路pwm波的源码

[复制链接]
跳转到指定楼层
楼主
ID:267266 发表于 2017-12-26 18:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:
  1. #include "TIM_pwm_output.h"

  2.         /**
  3.                 * @brief  配置TIM2和TIM3时复用输出PWM时用到的I/O
  4.                 * @param  无
  5.                 * @retval 无
  6.   */
  7. static void TIM_GPIO_Config(void)
  8. {
  9.         GPIO_InitTypeDef GPIO_InitStructure;
  10.         /*设置TIM2CLK和TIM3CLk 为72MHZ*/
  11.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2|RCC_APB1Periph_TIM3, ENABLE);
  12.         /* GPIOA clock enable */
  13.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
  14.         /*GPIOA Configuration: TIM2 channel 1 2 3 4 6 and 7
  15.         as alternate function push-pull */
  16.         GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 | GPIO_Pin_1|
  17.         GPIO_Pin_2| GPIO_Pin_3|GPIO_Pin_6 | GPIO_Pin_7;
  18.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                    // 复用推挽输出
  19.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  20.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  21. }

  22.         /**
  23.                 * @brief  配置TIM2、TIM3输出的PWM信号的模式,如周期,极性,占空比
  24.                 * @param  无
  25.                 * @retval 无
  26.         */
  27.         /*
  28.                  * TIMxCLK/CK_PSC --> TIMxCNT --> TIMx_ARR --> TIMxCNT 重新计数
  29.                  *                    TIMx_CCR(电平发生变化)
  30.                  * 信号周期=(TIMx_ARR +1 ) * 时钟周期
  31.                  * 占空比=TIMx_CCR/(TIMx_ARR +1)
  32.         */
  33. static void TIM_Mode_Config(void)
  34. {
  35.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  36.         TIM_OCInitTypeDef  TIM_OCInitStructure;

  37.         /* 初始化PWM信号电平 */
  38.         u16 CCR1_Val = 0;        
  39.         u16 CCR2_Val = 0;
  40.         u16 CCR3_Val = 0;
  41.         u16 CCR4_Val = 0;
  42.         u16 CCR5_Val = 0;
  43.         u16 CCR6_Val = 0;

  44.         /* Time base configuration */                 
  45.         TIM_TimeBaseStructure.TIM_Period = 999;  //当定时器计数1000次,为一个周期
  46.         TIM_TimeBaseStructure.TIM_Prescaler = 5; //设置预分频,预分频为5,pwm频率为12KHZ
  47.         /* 设置时钟分频系数 */
  48.         TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;       
  49.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数模式
  50.         TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
  51.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

  52.         /* PWM1 Mode configuration: Channel1 */
  53.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //配置为PWM模式1
  54.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  55.         TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
  56.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  
  57.         TIM_OC1Init(TIM2, &TIM_OCInitStructure);         //使能通道1
  58.         TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);

  59.   /* PWM1 Mode configuration: Channel2 */
  60.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  61.         TIM_OCInitStructure.TIM_Pulse = CCR2_Val;          
  62.         TIM_OC2Init(TIM2, &TIM_OCInitStructure);          //使能通道2
  63.   TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);

  64.         /* PWM1 Mode configuration: Channel3 */
  65.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  66.         TIM_OCInitStructure.TIM_Pulse = CCR3_Val;       
  67.         TIM_OC3Init(TIM2, &TIM_OCInitStructure);         //使能通道3
  68.         TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);

  69.         /* PWM1 Mode configuration: Channel4 */
  70.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  71.         TIM_OCInitStructure.TIM_Pulse = CCR4_Val;       
  72.         TIM_OC4Init(TIM2, &TIM_OCInitStructure);        //使能通道4
  73.         TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);
  74.         TIM_ARRPreloadConfig(TIM2, ENABLE);                // 使能TIM2重载寄存器ARR
  75.        
  76.         /* PWM1 Mode configuration: Channel5 */
  77.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  78.   TIM_OCInitStructure.TIM_Pulse = CCR5_Val;             
  79.         TIM_OC1Init(TIM3, &TIM_OCInitStructure);         //使能通道5
  80.   TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);

  81.   /* PWM1 Mode configuration: Channel6 */
  82.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  83.   TIM_OCInitStructure.TIM_Pulse = CCR6_Val;            
  84.         TIM_OC2Init(TIM3, &TIM_OCInitStructure);          //使能通道6
  85.   TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
  86.         TIM_ARRPreloadConfig(TIM3, ENABLE);                         // 使能TIM3重载寄存器ARR

  87.   /* TIM2 and TIM3 enable counter */
  88.         TIM_Cmd(TIM2, ENABLE);                   //使能定时器2       
  89.         TIM_Cmd(TIM3, ENABLE);                   //使能定时器3
  90. }

  91. void TIM_PWM_Init(void)//
  92. {
  93.         TIM_GPIO_Config();
  94.         TIM_Mode_Config();       
  95. }

  96. void TIM_PWM1_Update(double n)
  97. {
  98.         u16 CCR1_Val = n*999;
  99.         TIM_SetCompare1(TIM2, CCR1_Val);
  100. }

  101. void TIM_PWM2_Update(double n)
  102. {
  103.         u16 CCR2_Val = n*999;
  104.         TIM_SetCompare2(TIM2, CCR2_Val);
  105. }

  106. void TIM_PWM3_Update(double n)
  107. {
  108.         u16 CCR3_Val = n*999;
  109.         TIM_SetCompare3(TIM2, CCR3_Val);
  110. }

  111. void TIM_PWM4_Update(double n)
  112. ……………………

  113. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
stm32f10x_temple-nb-1401011140.zip (672.48 KB, 下载次数: 63)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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