野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16454|回复: 6

我用定时器3设置了4路呼吸灯 为什莫只有一路管用 是不是哪里还需要设置 ...

[复制链接]
发表于 2014-9-15 21:31:30 | 显示全部楼层 |阅读模式
/**  ******************************************************************************  * @file    bsp_pwm_output.c  * @author  STMicroelectronics  * @version V1.0  * @date    2013-xx-xx  * @brief   tim3êä3öËÄ·pwm bsp  ******************************************************************************  * @attention  *  * êμÑéƽì¨:ò°»e iSO STM32 ¿a·¢°å   * ÂÛì3    :http://www.firebbs.cn  * ìÔ±|    :http://firestm32.taobao.com  *  ******************************************************************************  */  #include "bsp_breathing.h"
/* LEDáá¶èμ輶 PWM±í */uint8_t indexWave[] = {1,1,2,2,3,4,6,8,10,14,19,25,33,44,59,80,        107,143,191,255,255,191,143,107,80,59,44,33,25,19,14,10,8,6,4,3,2,2,1,1};
/**  * @brief  ÅäÖÃTIM3¸′óÃêä3&#246WMê±óÃμ½μÄI/O  * @param  ÎT  * @retval ÎT  */static void TIM3_GPIO_Config(void) {  GPIO_InitTypeDef GPIO_InitStructure;
  /* GPIOB clock enable */  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA, ENABLE); //        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  /* ÅäÖÃoôÎüμÆóÃμ½μ&#196B0òy½Å */  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 | GPIO_Pin_1;  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                    // ¸′óÃíÆíìêä3ö  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);                GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7;        GPIO_Init(GPIOA, &GPIO_InitStructure);}

/**  * @brief  ÅäÖÃǶì×Ïòá¿ÖD¶Ï¿ØÖÆÆ÷NVIC  * @param  ÎT  * @retval ÎT  */static void NVIC_Config_PWM(void){  NVIC_InitTypeDef NVIC_InitStructure;    /* Configure one bit for preemption priority */  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);    /* ÅäÖÃTIM3_IRQÖD¶ÏÎaÖD¶ÏÔ′ */  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);}
/**  * @brief  ÅäÖÃTIM3êä3öμ&#196WMDÅoÅμÄģ꽣¬èçÖüÆú¡¢¼«DÔ  * @param  ÎT  * @retval ÎT  */
/* * TIMxCLK/CK_PSC --> TIMxCNT --> TIMx_ARR --> ÖD¶Ï & TIMxCNT ÖØD¼Æêy *                    TIMx_CCR(μçƽ·¢éú±ä»ˉ) * * DÅoÅÖüÆú=(TIMx_ARR +1 ) * ê±ÖóÖüÆú *  */
/*    _______    ______     _____      ____       ___        __         _ * |_|       |__|      |___|     |____|    |_____|   |______|  |_______| |________| */static void TIM3_Mode_Config(void){        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;        TIM_OCInitTypeDef  TIM_OCInitStructure;                                                                                                                                                                                /* éèÖÃTIM3CLK ê±ÖóÎa72MHZ */  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);                                         //ê1ÄüTIM3ê±Öó
  /* »ù±¾¶¨ê±Æ÷ÅäÖà */                   TIM_TimeBaseStructure.TIM_Period = 255;                                                                 //챶¨ê±Æ÷′ó0¼Æêyμ½255£¬¼′Îa266′Σ¬Îaò»¸ö¶¨ê±ÖüÆú  TIM_TimeBaseStructure.TIM_Prescaler = 1999;                                                                    //éèÖÃÔ¤·ÖÆμ£o  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;                        //éèÖÃê±Öó·ÖÆμÏμêy£o2»·ÖÆμ(ÕaàïóÃ2»μ½)  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;          //ÏòéϼÆêyģ꽠 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
  /* PWMÄ£ê½ÅäÖà */        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                                            //ÅäÖÃÎaPWMÄ£ê½1  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;        //ê1Äüêä3ö  TIM_OCInitStructure.TIM_Pulse = 0;                                                                                                          //éèÖÃ3õê&#188WMÂö3å¿í¶èÎa0          TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;            //챶¨ê±Æ÷¼ÆêyÖμD¡óúCCR1_Valê±Îaμíμçƽ
  TIM_OC3Init(TIM3, &TIM_OCInitStructure);                                                                                 //ê1Äüí¨μà3       
  TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);                                                //ê1ÄüԤװÔØ                          TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;        //ê1Äüêä3ö                  TIM_OCInitStructure.TIM_Pulse = 0;                                                        TIM_OC2Init(TIM3, &TIM_OCInitStructure);                                                                                 //ê1Äüí¨μà3    TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);                                                //ê1ÄüԤװÔØ                                  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;        //ê1Äüêä3ö                  TIM_OCInitStructure.TIM_Pulse = 0;                                                        TIM_OC1Init(TIM3, &TIM_OCInitStructure);                                                                                 //ê1Äüí¨μà3    TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);                                                //ê1ÄüԤװÔØ                                        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;        //ê1Äüêä3ö                  TIM_OCInitStructure.TIM_Pulse = 0;                                                        TIM_OC4Init(TIM3, &TIM_OCInitStructure);                                                                                 //ê1Äüí¨μà3    TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);                                                //ê1ÄüԤװÔØ       
  TIM_ARRPreloadConfig(TIM3, ENABLE);                                                                                                         //ê1ÄüTIM3ÖØÔؼÄ′æÆ÷ARR
  /* TIM3 enable counter */  TIM_Cmd(TIM3, ENABLE);                                                                                                   //ê1Äü¶¨ê±Æ÷3                        TIM_ITConfig(TIM3,TIM_IT_Update, ENABLE);                                                                                //ê1ÄüupdateÖD¶Ï                        NVIC_Config_PWM();                                                                                                                                                                        //ÅäÖÃÖD¶ÏóÅÏ輶                        }
/**  * @brief  TIM3 oôÎüμÆ3õê¼»ˉ  *         ÅäÖ&#195WMÄ£ê½oíGPIO  * @param  ÎT  * @retval ÎT  */void TIM3_Breathing_Init(void){        TIM3_GPIO_Config();        TIM3_Mode_Config();        }
/*********************************************END OF FILE**********************/



中断服务程序
void TIM3_IRQHandler(void)
{       
        static uint8_t pwm_index = 0;                        //óÃóúPWM2é±í
        static uint8_t period_cnt = 0;                //óÃóú¼ÆËãÖüÆúêy
       
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)        //TIM_IT_Update
        {                       
                        period_cnt++;
                        if(period_cnt >= 10)                                                                                //èôêä3öμÄÖüÆúêy′óóú10£¬êä3öÏÂò»ÖÖÂö3å¿íμ&#196WM2¨
                        {
                               
                                TIM3->CCR3 = indexWave[pwm_index];        //¸ù¾YPWM±íDT¸Ä¶¨ê±Æ÷μıè½Ï¼Ä′æÆ÷Öμ
                                                                TIM3->CCR1 = indexWave[pwm_index];        //¸ù¾YPWM±íDT¸Ä¶¨ê±Æ÷μıè½Ï¼Ä′æÆ÷Öμ
                                                                TIM3->CCR2 = indexWave[pwm_index];        //¸ù¾YPWM±íDT¸Ä¶¨ê±Æ÷μıè½Ï¼Ä′æÆ÷Öμ
                                                                TIM3->CCR4 = indexWave[pwm_index];        //¸ù¾YPWM±íDT¸Ä¶¨ê±Æ÷μıè½Ï¼Ä′æÆ÷Öμ
                                pwm_index++;                                                                                                //±êÖ&#190WM±íμÄÏÂò»¸öÔaËØ
                       
                                if( pwm_index >=  40)                                                                //è&#244WMÂö3å±íòѾ-êä3öíê3éò»±é£¬ÖØÖ&#195WM2é±í±êÖ¾
                                {
                                        pwm_index=0;                                                               
                                }
                               
                                period_cnt=0;                                                                                                //ÖØÖÃÖüÆú¼Æêy±êÖ¾
                }
                TIM_ClearITPendingBit (TIM3, TIM_IT_Update);        //±ØDëòaÇå3yÖD¶Ï±ê־λ
        }








回复

使用道具 举报

发表于 2014-9-16 11:13:16 | 显示全部楼层
阁下火星来的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-16 12:53:01 | 显示全部楼层
程序我粘上去结果就是这样了    我也不知道怎末发着好    要不你能办忙看看不    我把程序 发给你
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-16 12:53:20 | 显示全部楼层
强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-16 13:03:49 | 显示全部楼层
刀_口 发表于 2014-9-16 11:13
阁下火星来的?

程序我粘上去结果就是这样了    我也不知道怎末发着好    要不你能办忙看看不    我把程序 发给你
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-16 13:04:11 | 显示全部楼层
刀_口 发表于 2014-9-16 11:13
阁下火星来的?

强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

发表于 2014-11-4 13:09:26 | 显示全部楼层
比雷公还雷人哦~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 19:06 , Processed in 0.039486 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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