OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6829|回复: 6

STM32F407之通用定时器产四路PWM?

[复制链接]

12

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-3-26
在线时间
14 小时
发表于 2015-3-27 14:31:57 | 显示全部楼层 |阅读模式
5金钱

#include "stm32f4xx.h"
#include <stdio.h>


#define  DS1   GPIOF_Pin_9   
#define  DS2   GPIO_Pin_10
 

 


//???±????//?¨????????????????????????????????????C?????????????????ú??????·¨·???????????


static void Delay(__IO uint32_t nCount) 
{
  for (; nCount != 0; nCount--)
  {
  }
}

 

int main (void)
{
   
 
   uint16_t CCR1_Val=333;
   uint16_t CCR2_Val=249;
   uint16_t CCR3_Val=166;
   uint16_t CCR4_Val=83;
    u16 led0pwmval=0;   
   u8 dir=1;


 // uint16_t  PrescalerValue=0;
   GPIO_InitTypeDef  GPIO_InitStructure;
   TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
   //NVIC_InitTypeDef NVIC_InitStructure;
   TIM_OCInitTypeDef  TIM_OCInitStructure;

   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); 
   RCC_APB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);
   
   
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9| GPIO_Pin_10;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
   GPIO_Init(GPIOF, &GPIO_InitStructure);
   
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
   GPIO_Init(GPIOC, &GPIO_InitStructure);
   
   
   
   
   //????±í??io??c×é??????????
   GPIO_PinAFConfig(GPIOC,GPIO_PinSource6,GPIO_AF_TIM3);
   GPIO_PinAFConfig(GPIOC,GPIO_PinSource7,GPIO_AF_TIM3);
   GPIO_PinAFConfig(GPIOC,GPIO_PinSource8,GPIO_AF_TIM3);
   GPIO_PinAFConfig(GPIOC,GPIO_PinSource9,GPIO_AF_TIM3);
   
   
    
   
   //PrescalerValue=(uint16_t) (SystemCoreClock/12000)-1;
   TIM_TimeBaseInitStructure.TIM_Period =500-1;  
   TIM_TimeBaseInitStructure.TIM_Prescaler=84-1; 
   TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
   TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
     TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
   
   
   
   //????±à?????·PWM?????????ò
   
   
   
   /*Channel1*/
   TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//????PWM??????
   TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//±???????????
   TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//?????????§
   TIM_OCInitStructure.TIM_Pulse=CCR1_Val;
   TIM_OC1Init(TIM3,&TIM_OCInitStructure);
   TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
   
   TIM_ARRPreloadConfig(TIM3,ENABLE);
   TIM_Cmd(TIM3,ENABLE);
   
   
   
   /*Channel2*/
   
   TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//????PWM??????
   TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//±???????????
   TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//?????????§
   TIM_OCInitStructure.TIM_Pulse=CCR2_Val;
   TIM_OC2Init(TIM3,&TIM_OCInitStructure);
   TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
   
   TIM_ARRPreloadConfig(TIM3,ENABLE);
   TIM_Cmd(TIM3,ENABLE);
   
   
   
    /*Channel3*/ 
   
   TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//????PWM??????
   TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//±???????????
   TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//?????????§
   TIM_OCInitStructure.TIM_Pulse=CCR3_Val;
   TIM_OC3Init(TIM3,&TIM_OCInitStructure);
   TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
   
   
   TIM_ARRPreloadConfig(TIM3,ENABLE);
   TIM_Cmd(TIM3,ENABLE);
   
   
    /*Channel4*/ 
   TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//????PWM??????
   TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//±???????????
   TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//?????????§
   TIM_OCInitStructure.TIM_Pulse=CCR4_Val;
   TIM_OC4Init(TIM3,&TIM_OCInitStructure);
   TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
   
   
   TIM_ARRPreloadConfig(TIM3,ENABLE);
   TIM_Cmd(TIM3,ENABLE);
   
   
   
   
   
   
   
   
   //?????¨????????????????±?PWM??????±???±???
   
   //void TIM_SetCompare1();   ??????·¨?????è????????×é????????°???×é??????????????TIMx_CCR??????±?????±???????????ABC?à?????ò??·??ò????
   
   
   
   
   
//   TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
//   
//     
//   
//   NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
//   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
//   NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
//   NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
//   NVIC_Init(&NVIC_InitStructure);
//      TIM_Cmd(TIM3,ENABLE);
      GPIO_ResetBits(GPIOF, GPIO_Pin_9);
   GPIO_SetBits(GPIOF, GPIO_Pin_10);
      while(1)
     {
     Delay(1000); 
    if(dir)led0pwmval++;
    else led0pwmval--; 
    if(led0pwmval>300)dir=0;
    if(led0pwmval==0)dir=1; 
    TIM_SetCompare1(TIM3,led0pwmval);
    TIM_SetCompare2(TIM3,led0pwmval);
    TIM_SetCompare3(TIM3,led0pwmval);
    TIM_SetCompare4(TIM3,led0pwmval);    
    //GPIO_ResetBits(GPIOF, GPIO_Pin_9);
     
     
      // GPIO_ResetBits(GPIOF, GPIO_Pin_10);
     
     
     
     
    //GPIO_ResetBits(GPIOF, GPIO_Pin_7);
   //Delay(100);
     }  

 

 


// void   TIM3_IRQHandler(void)
// {
//    if (TIM_GetITStatus(TIM3,TIM_IT_Update)==SET)
//  {
//  
//  
//   GPIO_SetBits(GPIOF, GPIO_Pin_10);
//    GPIO_ResetBits(GPIOF, GPIO_Pin_9);
//  }   
//   TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
//
//
// }

这是改写的程序,但是在MDK模拟仿真时出不来PWM波?请大侠们,帮主解答。

PWM1.uvproj

23.57 KB, 下载次数: 83

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-3-27 15:18:34 | 显示全部楼层
最好实际用示波器测试一下,产生4路PWM没有问题的,不过频率是一样的,占空比可以不同。我做四轴的时候就是一个定时器产生4路PWM
开往春天的手扶拖拉机
回复

使用道具 举报

12

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-3-26
在线时间
14 小时
 楼主| 发表于 2015-3-27 15:31:44 | 显示全部楼层
回复【2楼】zuozhongkai 
回复【2楼】zuozhongkai:
---------------------------------
额,好的。
回复

使用道具 举报

12

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-3-26
在线时间
14 小时
 楼主| 发表于 2015-3-27 15:54:24 | 显示全部楼层
回复【3楼】1173844395:
---------------------------------
我的意思是不是程序中那个设计错了,示波器也看不到PWM 波型
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-27 23:16:44 | 显示全部楼层
4XX不支持软件仿真.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2015-3-31
在线时间
0 小时
发表于 2015-5-17 12:55:53 | 显示全部楼层
回复【4楼】1173844395:
---------------------------大哥   问题解决没有  ,为什么示波器上没有结果
回复

使用道具 举报

大雄catcat 该用户已被删除
发表于 2017-4-13 15:27:48 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 01:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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