OpenEdv-开源电子网

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

关于PWM 波形输出,来控制LED灯的亮度

[复制链接]

33

主题

310

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
495
金钱
495
注册时间
2016-12-31
在线时间
63 小时
发表于 2017-1-8 22:12:12 | 显示全部楼层 |阅读模式
5金钱
主函数:

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"

#include "timer.h"
#include "pwm.h"










int main(void)
{               

         u16 led0pwmval=0;
         u8 dir=1;
         
         
         
        delay_init();                     //延时函数初始化          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
       
        LED_Init();                                  //初始化与LED连接的硬件接口
       
        TIM3_PWM_Init(899,0);    //不分频。PWM频率=72000/(899+1)=80Khz
       
       
                      
         
        //TIM3_Int_Init(4999,7199);   //10Khz=2*(36MHZ)/(7199+1)的计数频率,计数到5000为500ms(括号前面一个数就是设置计数次数的)
         
        while(1)
        {            
                 //LED0=!LED0;       
                //delay_ms(500);
               
                delay_ms(10);
                if(dir)led0pwmval++;
                else  led0pwmval--;
                if(led0pwmval>300) dir=0;
               
                if(led0pwmval==0) dir=1;
                TIM_SetCompare3(TIM3,led0pwmval);
        }  
       
}



pwm.c


#include "pwm.h"
#include "led.h"

//PWM输出初始化
//arr :自动重装载值
//psc: 时钟预分频数

void TIM3_PWM_Init(u16 arr,u16 psc)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
       
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStructure;  
       
        TIM_OCInitTypeDef   TIM_OCInitStructure;
       
       
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);    // ① 使能GPIO外设时钟   
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //  ① 使能TIM3的时钟
       
        // GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射  TIM3_CH3->PB0
       
       
        //,输出TIM3 _CH3的PWM脉冲波形
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;    //TIM3 _CH3
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;   //复用推挽输出
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;  //输出频率
        GPIO_Init(GPIOB,&GPIO_InitStructure);     //初始化GPIOB.0
       
       
       
        TIM_TimeBaseInitStructure.TIM_Period=arr;   //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
        TIM_TimeBaseInitStructure.TIM_Prescaler=psc;   //设置用来作为TIMx时钟频率消除的预分频值   不分频
        TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;    //设置时钟分割:TDTS=Tck_tim
        TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
        TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);       //   ② 初始化 TIM3
       
       
       
        //这里,使用的是通道3,
       
        TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;   //脉宽调制模式2
        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;  //比较输出使能
       
        TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;  //输出极性高
        TIM_OC3Init(TIM3,&TIM_OCInitStructure);         // ③ 初始化外设 TIM3     
         
         
         

        TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable);    // CH3预装载使能
       
        //TIM_ARRPreloadConfig(TIM3,ENABLE);    // 使能TIMx在ARR上的预装载寄存器
       
        TIM_Cmd(TIM3,ENABLE);   //④ 使能TIM3寄存器
         
         
}

最佳答案

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

你要看你是否改变了PWM的占空比,占空比不改变亮度肯定不变了,如果改变的WPM占空比找个示波器看看引脚波形是否改变了,如果也是改变了那就加大占空比的量,我之前做的时候也是这样RGB灯亮度基本不变,后来发现PWM占空比的太大了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

71

帖子

0

精华

高级会员

Rank: 4

积分
817
金钱
817
注册时间
2016-2-5
在线时间
163 小时
发表于 2017-1-8 22:12:13 | 显示全部楼层
你要看你是否改变了PWM的占空比,占空比不改变亮度肯定不变了,如果改变的WPM占空比找个示波器看看引脚波形是否改变了,如果也是改变了那就加大占空比的量,我之前做的时候也是这样RGB灯亮度基本不变,后来发现PWM占空比的太大了
不甘黄土掩枯骨,宁化寒光映碧霄。
回复

使用道具 举报

33

主题

310

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
495
金钱
495
注册时间
2016-12-31
在线时间
63 小时
 楼主| 发表于 2017-1-8 22:13:58 | 显示全部楼层
求助,学习pwm来控制LED灯的亮度的实验,然后跟着视频写的代码,但是下载到开发板里面去却没有现象,现象是LED0(PB0脚相连的)灯一直是亮的,但是亮度不发生变化
回复

使用道具 举报

33

主题

310

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
495
金钱
495
注册时间
2016-12-31
在线时间
63 小时
 楼主| 发表于 2017-1-8 22:14:47 | 显示全部楼层
arao和xiaomi 发表于 2017-1-8 22:13
求助,学习pwm来控制LED灯的亮度的实验,然后跟着视频写的代码,但是下载到开发板里面去却没有现象,现象是 ...

跟着视频和例程找了好久,都不知道是哪里出了错,求助
回复

使用道具 举报

33

主题

310

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
495
金钱
495
注册时间
2016-12-31
在线时间
63 小时
 楼主| 发表于 2017-1-8 22:16:28 | 显示全部楼层
arao和xiaomi 发表于 2017-1-8 22:14
跟着视频和例程找了好久,都不知道是哪里出了错,求助

还有就是我想看一下例程里面那个LED管脚输出的PWM波形,但是不知道怎么设置。这个好像和一般的控制IO脚的输出观看bit位的状态不一样吧?
回复

使用道具 举报

5

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2016-11-7
在线时间
63 小时
发表于 2017-1-8 22:28:16 | 显示全部楼层
你的有些语句被注释掉了吧?
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2017-1-9 08:53:25 | 显示全部楼层
shop60994719.taobao.com
回复

使用道具 举报

13

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2015-10-12
在线时间
21 小时
发表于 2017-1-9 08:57:36 | 显示全部楼层
你的重映射时钟开启了吗?
回复

使用道具 举报

13

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2015-10-12
在线时间
21 小时
发表于 2017-1-9 08:58:52 | 显示全部楼层
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE)
回复

使用道具 举报

26

主题

280

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2013-8-2
在线时间
279 小时
发表于 2017-1-9 09:20:55 | 显示全部楼层
我个性签名档的博客地址,《STM32之timer3产生PWM》。
博客:http://blog.csdn.net/feilusia
CC2541群(127442605);CC2640群(557278427);
Android群(541462902);STM8/STM32群(164311667);
Linux群(512598061);职场交流群(450154342);
回复

使用道具 举报

0

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2014-6-7
在线时间
7 小时
发表于 2017-1-9 13:46:37 | 显示全部楼层
居然还有代码卖,水深啊
回复

使用道具 举报

33

主题

310

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
495
金钱
495
注册时间
2016-12-31
在线时间
63 小时
 楼主| 发表于 2017-1-9 16:14:16 | 显示全部楼层
命运枷锁 发表于 2017-1-9 08:57
你的重映射时钟开启了吗?

我的PB0端口就是接的LED0 ,然后我看那个手册TIM3的CH3通道在PB0端口不需要重映射的吧?
回复

使用道具 举报

33

主题

310

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
495
金钱
495
注册时间
2016-12-31
在线时间
63 小时
 楼主| 发表于 2017-1-9 16:16:02 | 显示全部楼层
lihilong 发表于 2017-1-8 22:28
你的有些语句被注释掉了吧?

你是说的那个端口复用语句吗?这个我也尝试过了,不过我查了一下手册,那个TIM3的CH3通道通过PB0端口输出好像不用端口复用的吧?
回复

使用道具 举报

33

主题

310

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
495
金钱
495
注册时间
2016-12-31
在线时间
63 小时
 楼主| 发表于 2017-1-9 16:16:21 | 显示全部楼层
lihilong 发表于 2017-1-8 22:28
你的有些语句被注释掉了吧?

你是说的那个端口复用语句吗?这个我也尝试过了,不过我查了一下手册,那个TIM3的CH3通道通过PB0端口输出好像不用端口复用的吧?
回复

使用道具 举报

33

主题

310

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
495
金钱
495
注册时间
2016-12-31
在线时间
63 小时
 楼主| 发表于 2017-1-9 16:26:27 | 显示全部楼层
feilusia 发表于 2017-1-9 09:20
我个性签名档的博客地址,《STM32之timer3产生PWM》。

你好,我看了一下你的程序,请教一下那个TIM3的CH3通道通过PB0通道输出PWM,需要用到端口复用吗?
回复

使用道具 举报

33

主题

310

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
495
金钱
495
注册时间
2016-12-31
在线时间
63 小时
 楼主| 发表于 2017-1-9 16:34:04 | 显示全部楼层
夜乄歌 发表于 2017-1-9 16:23
你要看你是否改变了PWM的占空比,占空比不改变亮度肯定不变了,如果改变的WPM占空比找个示波器看看引脚波形 ...

这个观察PB0管脚的占空比是否变化只能通过示波器来看嘛?能不能通过KEIL5里面自带的软件仿真功能来观察呀?
回复

使用道具 举报

10

主题

71

帖子

0

精华

高级会员

Rank: 4

积分
817
金钱
817
注册时间
2016-2-5
在线时间
163 小时
发表于 2017-1-9 16:37:09 | 显示全部楼层
arao和xiaomi 发表于 2017-1-9 16:34
这个观察PB0管脚的占空比是否变化只能通过示波器来看嘛?能不能通过KEIL5里面自带的软件仿真功能来观察呀 ...

可以,但是没示波器直接看直观
不甘黄土掩枯骨,宁化寒光映碧霄。
回复

使用道具 举报

33

主题

310

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
495
金钱
495
注册时间
2016-12-31
在线时间
63 小时
 楼主| 发表于 2017-1-9 16:43:01 | 显示全部楼层
夜乄歌 发表于 2017-1-9 16:37
可以,但是没示波器直接看直观

示波器的两个管脚一个接PB0另外一个接哪里呀?
还有就是如果软件观察的话,是观察PB0的bit位还是state还是analog呀?
回复

使用道具 举报

33

主题

310

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
495
金钱
495
注册时间
2016-12-31
在线时间
63 小时
 楼主| 发表于 2017-2-17 19:10:45 | 显示全部楼层
lihilong 发表于 2017-1-8 22:28
你的有些语句被注释掉了吧?

恩,是有一些注释掉了,不过是另外一个人说的那个问题,还是谢谢你
回复

使用道具 举报

33

主题

310

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
495
金钱
495
注册时间
2016-12-31
在线时间
63 小时
 楼主| 发表于 2017-2-17 19:11:13 | 显示全部楼层
命运枷锁 发表于 2017-1-9 08:57
你的重映射时钟开启了吗?

恩,开启了呢,不过不是这个问题,还是谢谢你
回复

使用道具 举报

33

主题

310

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
495
金钱
495
注册时间
2016-12-31
在线时间
63 小时
 楼主| 发表于 2017-2-17 19:11:32 | 显示全部楼层
命运枷锁 发表于 2017-1-9 08:58
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE)

谢谢你的热心帮助
回复

使用道具 举报

3

主题

55

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
318
金钱
318
注册时间
2017-1-27
在线时间
34 小时
发表于 2017-2-18 14:51:29 | 显示全部楼层
夜乄歌 发表于 2017-1-9 16:37
可以,但是没示波器直接看直观

您好,我想问一下 为什么我的代码 在MDK上仿真结果是对的,但是一下到板子上就没有现象啊。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 18:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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