OpenEdv-开源电子网

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

pwm实现呼吸灯效果的问题

[复制链接]

2

主题

6

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2018-1-21
在线时间
3 小时
发表于 2018-1-26 21:03:54 | 显示全部楼层 |阅读模式
2金钱
请问原子哥和各位大佬,我用定时器生成PWM做呼吸灯,程序是按视频的写的,但是灯只是亮而已,没有其他的变化,并没有出现呼吸灯的效果,这是为什么呢?下面是定时器生成PWM的初始化设置
void TIM2_pwm_Init(u16 arr,u16 psc)
{
        GPIO_InitTypeDef GPIO_InitTypeDefStruct;
        TIM_TimeBaseInitTypeDef  TimeBaseInitTypeDefStruct;
        TIM_OCInitTypeDef OCInitTypeDefStruct;
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
        GPIO_PinRemapConfig(GPIO_FullRemap_TIM2,ENABLE);
                 
       
        GPIO_InitTypeDefStruct.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_InitTypeDefStruct.GPIO_Pin=GPIO_Pin_10;
        GPIO_InitTypeDefStruct.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitTypeDefStruct);
       
        TimeBaseInitTypeDefStruct.TIM_CounterMode=TIM_CounterMode_Up;
        TimeBaseInitTypeDefStruct.TIM_Period=arr;
        TimeBaseInitTypeDefStruct.TIM_Prescaler=psc;
        TimeBaseInitTypeDefStruct.TIM_ClockDivision=0;
        TIM_TimeBaseInit(TIM2,&TimeBaseInitTypeDefStruct);
       
        OCInitTypeDefStruct.TIM_OCMode=TIM_OCMode_PWM2;
        OCInitTypeDefStruct.TIM_OutputState=TIM_OutputState_Enable;
        OCInitTypeDefStruct.TIM_OCPolarity=TIM_OCPolarity_High;
        TIM_OC2Init(TIM2,&OCInitTypeDefStruct);
       
        TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Enable);
        TIM_Cmd(TIM2,ENABLE);
}

下面是主函数
#include "led.h"
#include "delay.h"
#include "TIMER.h"
#include "usart.h"
int main(void)
{
        u16 led1pwmval=0;
        u8 flag=1;
        led_Init();
        delay_init();       
        uart_init(115200);
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        TIM2_pwm_Init(899,0);
        while(1)
        {
                delay_ms(10);
                if(flag) led1pwmval++;
                else led1pwmval--;
                if(led1pwmval>300) flag=0;
                if(led1pwmval==0) flag=1;
                TIM_SetCompare2(TIM2,led1pwmval);
        }

}


CR}{@RT)$$UVH013HR1%LI5.png
$LS[6RBCAHZI48K4H_3N11Y.png

最佳答案

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

把PWM的极性改一下,试试看
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-1-26 21:03:55 | 显示全部楼层
把PWM的极性改一下,试试看
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2018-1-21
在线时间
3 小时
 楼主| 发表于 2018-1-26 23:25:53 来自手机 | 显示全部楼层
麻烦大神帮我看看
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2018-1-21
在线时间
3 小时
 楼主| 发表于 2018-1-27 14:17:14 来自手机 | 显示全部楼层
正点原子 发表于 2018-1-27 00:32
把PWM的极性改一下,试试看

可以了,谢谢哈,这是为什么?不太懂
回复

使用道具 举报

6

主题

55

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2017-12-12
在线时间
47 小时
发表于 2018-1-27 15:50:21 | 显示全部楼层
你用的LED灯应该是在低电平是点亮,而你的PWM又是在低电平时间较长,也就是亮的时间较长,加上频率较高所以看起来亮度不变。呼吸灯一般是高亮的时间要短。
回复

使用道具 举报

0

主题

28

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1013
金钱
1013
注册时间
2017-8-8
在线时间
67 小时
发表于 2018-1-28 17:12:08 | 显示全部楼层
应该就是极性的问题,刚开始的时候也遇到过!
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2018-1-21
在线时间
3 小时
 楼主| 发表于 2018-2-1 00:03:19 来自手机 | 显示全部楼层
知行天下 发表于 2018-1-27 15:50
你用的LED灯应该是在低电平是点亮,而你的PWM又是在低电平时间较长,也就是亮的时间较长,加上频率较高所以 ...

之前那个可以实现了,然后我在里面加了ADC的,就又不行了,改了极性也没用耶
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2021-3-18
在线时间
7 小时
发表于 2021-7-17 20:03:04 | 显示全部楼层
知行天下 发表于 2018-1-27 15:50
你用的LED灯应该是在低电平是点亮,而你的PWM又是在低电平时间较长,也就是亮的时间较长,加上频率较高所以 ...

强,经过实验,确实如此。
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2022-11-15
在线时间
7 小时
发表于 2023-1-5 00:04:00 | 显示全部楼层
为什么我灯都不亮
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 19:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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