OpenEdv-开源电子网

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

PWM没有输出

[复制链接]

3

主题

8

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-3-15
在线时间
4 小时
发表于 2016-4-22 09:54:31 | 显示全部楼层 |阅读模式
3金钱
下了原子哥例程,但是对应的端口接上LED灯没有明暗变化,求大家帮忙解答一下。
#include "pwm.h"
#include "led.h"



void TIM1_PWM_Init(u16 arr,u16 psc)
{  
         GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);//
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  //使能GPIO外设时钟使能
                                                                                    

   //设置该引脚为复用输出功能,输出TIM1 CH1的PWM脉冲波形
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //TIM_CH1
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

       
        TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值         80K
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
        TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位


        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
        TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
        TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

  TIM_CtrlPWMOutputs(TIM1,ENABLE);        //MOE 主输出使能       

        TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH1预装载使能         
       
        TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的预装载寄存器
       
        TIM_Cmd(TIM1, ENABLE);  //使能TIM1


}



#include "led.h"
#include "delay.h"
#include "sys.h"
#include "pwm.h"


int main(void)
{       
        u16 led0pwmval=0;   
        u8 dir=1;       
        delay_init();                     //延时函数初始化          
        LED_Init();                          //初始化与LED连接的硬件接口
        TIM1_PWM_Init(899,0);//不分频。PWM频率=72000/(899+1)=80Khz
           while(1)
        {
                delay_ms(10);         
                if(dir)led0pwmval++;
                else led0pwmval--;         
                if(led0pwmval>300)dir=0;
                if(led0pwmval==0)dir=1;                                                    
                TIM_SetCompare1(TIM1,led0pwmval);          
        }
}



最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

794

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
1502
金钱
1502
注册时间
2015-3-3
在线时间
460 小时
发表于 2016-4-22 09:54:32 | 显示全部楼层
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-3-15
在线时间
4 小时
 楼主| 发表于 2016-4-22 10:03:20 | 显示全部楼层
输出端口是PA8 应该不用再更改哪里了吧
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2016-4-22 12:39:36 | 显示全部楼层
确定硬件接到TIM1-CH1上???
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-1-26
在线时间
6 小时
发表于 2016-4-22 14:58:02 | 显示全部楼层
RCC_APB1PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);//前面加上这句试试 顺带看看sys文件有错误没...
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-3-15
在线时间
4 小时
 楼主| 发表于 2016-4-22 15:06:27 | 显示全部楼层
已经解决了  谢谢大家~
回复

使用道具 举报

10

主题

254

帖子

0

精华

高级会员

Rank: 4

积分
594
金钱
594
注册时间
2015-10-17
在线时间
145 小时
发表于 2016-4-22 17:55:28 | 显示全部楼层
hukuqu 发表于 2016-4-22 15:06
已经解决了  谢谢大家~

解决了说下自己的问题,出在了哪里,让帮助您的人也分享下。
开着单片机翱翔在天空
回复

使用道具 举报

28

主题

303

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2014-8-14
在线时间
67 小时
发表于 2016-4-23 10:02:21 | 显示全部楼层
原_子_哥门徒 发表于 2016-4-22 17:55
解决了说下自己的问题,出在了哪里,让帮助您的人也分享下。

嗯嗯  问题要多加探讨
这个世界上还有很多很多的人,但你不认识他们,他们也不属于你的世界。这个世界上还有很多好吃的好玩的好看的东西,可真正属于你的世界其实是很小的,只是你去过的地方吃过的东西和见过的落日,还有会在乎你死活的朋友。”——《龙族》
回复

使用道具 举报

20

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2015-11-11
在线时间
22 小时
发表于 2016-4-23 10:53:07 | 显示全部楼层
应该是没有开中断源的。
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-3-15
在线时间
4 小时
 楼主| 发表于 2016-4-23 20:51:20 | 显示全部楼层
其实我也不太懂  就是原来我不知道要看明亮变化的话要把LED灯接到PA7根PA8两端,而测输出是把示波器接PA8跟地,不过不懂为什么原来PA8检测不出波形,后面重新下了个例程就有了,可能是原来的例程不小心改了什么自己忘记了吧...
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-16 16:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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