OpenEdv-开源电子网

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

STM32有关通用定时器产生PWM波

[复制链接]

12

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-3-26
在线时间
14 小时
发表于 2015-3-27 14:25:40 | 显示全部楼层 |阅读模式
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波?请大侠们,指点。

最佳答案

查看完整内容[请看2#楼]

407不支持软件仿真...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

12

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-3-26
在线时间
14 小时
 楼主| 发表于 2015-4-2 14:20:45 | 显示全部楼层
本人自动化专业,想学习基于嵌入式的驱动层的开发。以前呢,学过51,做过几个小项目。现在正在学习STM32F4  cortexM4,但是我想去个培训中心学习,他们给推荐学习STM32 A9,不知到他们的区别?不知道可不可跟着培训中心的学?请高手给出建议!!!!感谢
回复

使用道具 举报

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2015-3-11
在线时间
0 小时
发表于 2015-4-15 09:34:43 | 显示全部楼层
你好楼主 请问你的这个程序能输出PWM波么 成功了吗我现在也在做这个东西 能加下QQ吗 2273395477
回复

使用道具 举报

12

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-3-26
在线时间
14 小时
 楼主| 发表于 2015-6-30 20:24:31 | 显示全部楼层
回复【3楼】1173844395:
---------------------------------
m系列用于非消费电子领域。A系列用于消费电子领域。M和单片机差不多,所以建议你先继续学习M4,然后去学习A9,因为A9会使用到LINux系统。这是嵌入式的重点和的你要学习驱动
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 21:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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