野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14887|回复: 2

求大神帮我看一下PWM波程序的问题在哪

[复制链接]
发表于 2015-12-27 20:13:27 | 显示全部楼层 |阅读模式
本人是小白,买了一块STM32F405RG的开发板,改了STMF407的板子的PWM波源程序代码,I/O、定时器的配置都照着STM32F405RG改过来了,改用定时器3,复用到PB1的LED1上,但烧进去发现LED灯只是一直亮着,并没有明暗的变化。我觉得问题可能出现在定时器3的配置或main主函数那里。求大神帮我看一下程序哪里存在错误,谢谢各位了!


PWM.c程序如下:
#include "pwm.h"
#include "led.h"
#include "usart.h"


static void NVIC_Config_PWM(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;


  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);


  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}



void TIM3_PWM_Init(u32 arr,u32 psc)
{                                                          
       
       
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);         
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);        
       
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_TIM3);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;         
        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(GPIOB,&GPIO_InitStructure);              
          
        TIM_TimeBaseStructure.TIM_Prescaler=psc;  
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
        TIM_TimeBaseStructure.TIM_Period=arr;  
        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
       
        TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
       
                 
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_Pulse = 0;       
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
        TIM_OC4Init(TIM3, &TIM_OCInitStructure);

        TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);

  TIM_ARRPreloadConfig(TIM3,ENABLE);
       
        TIM_Cmd(TIM3, ENABLE);

        TIM_ITConfig(TIM3,TIM_IT_Update, ENABLE);                                                                               
               
        NVIC_Config_PWM();                                                                                                                                                                                                                                  
}  

main.c函数的程序如下:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "pwm.h"



int main(void)
{
       
        u16 led0pwmval=0;   
        u8 dir=1;
       
       
        delay_init(168);
       

        TIM3_PWM_Init(500-1,84-1);          
   while(1)
        {
                delay_ms(10);         
                if(dir)led0pwmval++;
                else led0pwmval--;       
                if(led0pwmval>499)dir=0;
                if(led0pwmval==0)dir=1;

                TIM_SetCompare4(TIM3,led0pwmval);       
        }
}

回复

使用道具 举报

发表于 2015-12-28 08:23:45 | 显示全部楼层
修改一下定时器的延时,可能是闪烁太快看不出来
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-30 09:54:05 | 显示全部楼层
flyleaf 发表于 2015-12-28 08:23
修改一下定时器的延时,可能是闪烁太快看不出来

谢谢,还是没看出来LED的明暗变化,不过已经用示波器看到PWM波了
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 04:01 , Processed in 0.025582 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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