OpenEdv-开源电子网

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

PWM输出,控制灯亮灭的的小程序,求助

[复制链接]

9

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2015-5-26
在线时间
0 小时
发表于 2015-6-10 20:28:34 | 显示全部楼层 |阅读模式
5金钱
#include "pwm.h"
void gpio_init()
{
    GPIO_InitTypeDef GPIO_TypeStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //使能GPIOA
    GPIO_TypeStructure.GPIO_Pin=GPIO_Pin_8;      
    GPIO_TypeStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_TypeStructure.GPIO_Mode=GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_TypeStructure);
}
void tim1_init(uint16_t arr, uint16_t psc)
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructrue;
    TIM_OCInitTypeDef TIM_OCInitTypeStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);    //使能TIM1
    
    TIM_TimeBaseInitStructrue.TIM_Prescaler=psc;
    TIM_TimeBaseInitStructrue.TIM_Period=arr;
    TIM_TimeBaseInitStructrue.TIM_CounterMode=TIM_CounterMode_Up;
    TIM_TimeBaseInitStructrue.TIM_ClockDivision=0;
    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStructrue);
    
    TIM_OCInitTypeStructure.TIM_OCMode=TIM_OCMode_PWM2;   //PWM模式2
    TIM_OCInitTypeStructure.TIM_OutputState=TIM_OutputState_Enable;
    TIM_OCInitTypeStructure.TIM_Pulse=0;
    TIM_OCInitTypeStructure.TIM_OCPolarity=TIM_OCPolarity_High;
    
    TIM_OC1Init(TIM1,&TIM_OCInitTypeStructure); //TIM1的CH1初始化
    TIM_CtrlPWMOutputs(TIM1, ENABLE);
    TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);
    TIM_ARRPreloadConfig(TIM1,ENABLE);
    TIM_Cmd(TIM1,ENABLE);
}
#include<stm32f10x.h>
#include "delay.h"
#include "pwm.h"

int main()
{
    uint16_t time=1;
    uint8_t mark=1;
    gpio_init();
    tim1_init(899,0);
    while(1)
    {
        delay_ms(10);
        if(mark)time++;
        else
            time--;
        if(time>300)
            mark=0;
        if(time==0)
            mark=1;
        TIM_SetCompare1(TIM1,time);            
    }
}
灯一直亮,不知道为什么,求助

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

使用道具 举报

10

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2015-6-3
在线时间
4 小时
发表于 2015-6-10 20:50:52 | 显示全部楼层
我也没学多久,可能说的不对,只是自己的看法,仅供参考,CH1与CH2输出极性相反,也就是你的灯最暗也是2/3的亮度(以一直亮为1).所以可能不明显。看上去是一直亮。
回复

使用道具 举报

9

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2015-5-26
在线时间
0 小时
 楼主| 发表于 2015-6-10 21:22:31 | 显示全部楼层
回复【2楼】98675972:
---------------------------------
我的这个最暗时是灭的.....TIM_SetCompare1(TIM1,0);是灭的。TIM_SetCompare1(TIM1,300);是亮的。但是就是实现不了呼吸灯,
回复

使用道具 举报

3

主题

2165

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5773
金钱
5773
注册时间
2013-11-22
在线时间
1211 小时
发表于 2015-6-10 22:12:44 | 显示全部楼层
没看出什么问题,单独把变量time 从0慢慢改大到300,是逐渐变亮的么?
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2015-3-3
在线时间
7 小时
发表于 2015-6-10 22:52:04 | 显示全部楼层
uint16_t time=1;
 将time定义成0试试
回复

使用道具 举报

9

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2015-5-26
在线时间
0 小时
 楼主| 发表于 2015-6-11 10:50:32 | 显示全部楼层
回复【4楼】lycreturn:
---------------------------------
只是灭
回复

使用道具 举报

3

主题

2165

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5773
金钱
5773
注册时间
2013-11-22
在线时间
1211 小时
发表于 2015-6-11 11:11:07 | 显示全部楼层
回复【6楼】时代将军:
---------------------------------
你不说time 为300是亮的么?怎么又是灭?  你的led电路怎么接的,一端接IO,另一端接限流电阻到地还是Vcc?
回复

使用道具 举报

9

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2015-5-26
在线时间
0 小时
 楼主| 发表于 2015-6-11 11:13:21 | 显示全部楼层
回复【7楼】lycreturn:
---------------------------------
从0到300,应该是逐渐亮的。但是现在它一直亮,不知道为什么
回复

使用道具 举报

3

主题

2165

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5773
金钱
5773
注册时间
2013-11-22
在线时间
1211 小时
发表于 2015-6-11 11:20:31 | 显示全部楼层
回复【8楼】时代将军:
---------------------------------
 大哥,究竟是亮还是灭啊,一会儿说一直亮,一会儿说只是灭,你是在忽悠我么??  问你电路怎么接的也不说
回复

使用道具 举报

9

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2015-5-26
在线时间
0 小时
 楼主| 发表于 2015-6-11 11:46:51 | 显示全部楼层
回复【9楼】lycreturn:
---------------------------------
电路是PA8(TIM1_CH1)接LED,我的想要的的结果是从灭逐渐到亮,再逐渐到灭,循环,就是呼吸灯。 但现在的情况是程序烧进去,它一直亮,不知道怎么解决......
回复

使用道具 举报

2

主题

239

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2015-6-5
在线时间
110 小时
发表于 2015-6-11 16:42:48 | 显示全部楼层
你系統主頻率用多少啊?
回复

使用道具 举报

3

主题

2165

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5773
金钱
5773
注册时间
2013-11-22
在线时间
1211 小时
发表于 2015-6-11 16:42:51 | 显示全部楼层
回复【10楼】时代将军:
---------------------------------
我是问你led另一端怎么接的,另一端如果接 一个限流电阻到地,那你就把定时器改为PWM模式1
回复

使用道具 举报

9

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2015-5-26
在线时间
0 小时
 楼主| 发表于 2015-6-11 18:15:56 | 显示全部楼层
回复【12楼】lycreturn:
---------------------------------
另一端接的是1K的电阻到3.3V...
回复

使用道具 举报

9

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2015-5-26
在线时间
0 小时
 楼主| 发表于 2015-6-11 18:19:02 | 显示全部楼层
回复【11楼】Rocks:
---------------------------------
系统主频率???我用库函数之前写的程序都没带啊?
回复

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2015-5-29
在线时间
4 小时
发表于 2015-6-25 13:55:47 | 显示全部楼层
TIM_OCInitTypeStructure.TIM_OCPolarity=TIM_OCPolarity_High;
是高电平输出,改成低电平输出试试
   TIM_OCInitTypeStructure.TIM_OCPolarity=TIM_OCPolarity_Low;
回复

使用道具 举报

10

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2015-11-11
在线时间
29 小时
发表于 2016-12-19 13:13:01 | 显示全部楼层
重映射要开AFIO时钟
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 08:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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