野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9767|回复: 15

stm32 呼吸灯程序

[复制链接]
发表于 2016-3-22 08:16:28 | 显示全部楼层 |阅读模式
各位大神,我把火哥以前的呼吸灯程序写入开发板,因为开发板的端口不同我就把GPIO led的端口该了  其他的都没有改,为什么开发板的灯就一直亮着不会有呼吸的效果???求解
回复

使用道具 举报

发表于 2016-3-22 08:56:58 | 显示全部楼层
呼吸灯使用的是定时器引脚,要确定你换的是定时器引脚才行
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-22 09:18:23 | 显示全部楼层
flyleaf 发表于 2016-3-22 08:56
呼吸灯使用的是定时器引脚,要确定你换的是定时器引脚才行

那就是说我定时器的引脚也要修改是吗?
回复 支持 反对

使用道具 举报

发表于 2016-3-22 13:38:17 | 显示全部楼层
钟亮亮 发表于 2016-3-22 09:18
那就是说我定时器的引脚也要修改是吗?

是的,查数据手册看看是哪些引脚
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-22 14:39:33 | 显示全部楼层
flyleaf 发表于 2016-3-22 13:38
是的,查数据手册看看是哪些引脚

数据手册是哪种?可以发一份给我吗?
回复 支持 反对

使用道具 举报

发表于 2016-3-22 15:57:01 | 显示全部楼层
钟亮亮 发表于 2016-3-22 14:39
数据手册是哪种?可以发一份给我吗?

这个帖子
http://www.firebbs.cn/forum.php? ... D%BE%DD%CA%D6%B2%E1
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-23 10:10:43 | 显示全部楼层
flyleaf 发表于 2016-3-22 15:57
这个帖子
http://www.firebbs.cn/forum.php?mod=viewthread&tid=4346&highlight=%CA%FD%BE%DD%CA%D6% ...

现在有个新的问题,之前我一直在找端口的问题,现在我用STM32里面的仿真示波器,就原来的程序的话是可以看到GPIOB_Pin_0 口是有波形反应出来   但是如果我改成GPIOC_Pin_0 示波器就显示不出出来。一直呈现直线的没有波形!!
1FB9.tmp.jpg

GPIOC_Pin_0

GPIOC_Pin_0

GPIOB_Pin_0

GPIOB_Pin_0
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-29 09:32:40 | 显示全部楼层
flyleaf 发表于 2016-3-22 15:57
这个帖子
http://www.firebbs.cn/forum.php?mod=viewthread&tid=4346&highlight=%CA%FD%BE%DD%CA%D6% ...

如果我想更改端口。原本程序中是TIM3的通道3 是PB0。然后LED的的端口是GPIOB_Pin_0
现在的话我想改成TIM3通道1,是PA6。LED口改成GPIOA_Pin_6
其他的程序都不该这样可以吗?????然后我尝试了  失败的!!是不是还有什么地方需要更改端口的?

static void TIM3_GPIO_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  /* GPIOB clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                    // ¸′óÃíÆíìêä3ö
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOB, &GPIO_InitStructure);
}

TIM_OC3Init(TIM3, &TIM_OCInitStructure);                                                                                 
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);               




现在改成


static void TIM3_GPIO_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  /* GPIOB clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);


  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                    
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOA, &GPIO_InitStructure);
}

TIM_OC1Init(TIM3, &TIM_OCInitStructure);                                                                                 
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);   
回复 支持 反对

使用道具 举报

发表于 2016-3-29 11:00:09 | 显示全部楼层
钟亮亮 发表于 2016-3-29 09:32
如果我想更改端口。原本程序中是TIM3的通道3 是PB0。然后LED的的端口是GPIOB_Pin_0
现在的话我想改成TIM ...

中断里改了没?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-31 08:07:26 | 显示全部楼层
flyleaf 发表于 2016-3-29 11:00
中断里改了没?

中断里面怎么改?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-31 08:08:26 | 显示全部楼层
flyleaf 发表于 2016-3-29 11:00
中断里改了没?

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);
}

在这里面修改?
回复 支持 反对

使用道具 举报

发表于 2016-3-31 09:30:49 来自手机 | 显示全部楼层
定时器模式配置发一下来,stm32f10x_it.c里面定时器中断发一下来
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-31 10:46:51 | 显示全部楼层
猫和四叶草 发表于 2016-3-31 09:30
定时器模式配置发一下来,stm32f10x_it.c里面定时器中断发一下来

这个是定时器配置

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_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¶ÏóÅÏ輶               
       
}






呼吸灯中断服务函数
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¸Ä¶¨ê±Æ÷μıè½Ï¼Ä′æÆ÷Öμ
                                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¶Ï±ê־λ
        }
}


回复 支持 反对

使用道具 举报

发表于 2016-4-6 12:49:04 | 显示全部楼层
钟亮亮 发表于 2016-3-31 10:46
这个是定时器配置

static void TIM3_Mode_Config(void)

哥们,先不说TIM模式配置吧。我看到你开启了GPIOB的时钟,配置了GPIOB管脚,那肯定有波形输出啊。你有没有配置GPIOC的时钟和管脚呢?
回复 支持 反对

使用道具 举报

发表于 2016-4-6 12:52:03 | 显示全部楼层
钟亮亮 发表于 2016-3-31 10:46
这个是定时器配置

static void TIM3_Mode_Config(void)

另外也需要查你使用的芯片具体型号对应的数据手册,看看TIM3到底那几个管脚对应哪几个通道。不是任意GPIO都可以输出TIM的PWM波形的。
回复 支持 反对

使用道具 举报

发表于 2016-4-6 15:08:34 | 显示全部楼层
最老版本的野火板子三个LED都没有接到PWM输出引脚吧
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 16:57 , Processed in 0.037466 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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