OpenEdv-开源电子网

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

PWM输出呼吸灯实验常亮的问题

[复制链接]

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2021-9-23
在线时间
13 小时
发表于 2021-10-5 19:53:52 | 显示全部楼层 |阅读模式
1金钱
#include "stm32f10x.h"
#include "led.h"
#include "pwm.h"
#include "delay.h"

int main(void)
{
        u8 flag = 1;
        u16 Led_InitVal = 0;
        delay_init();
       
        Pwm_Init(899,0);  
        Led_Init();   //把Led_Init();放在Pwm_Init(899,0)先初始化,为什么灯就一直亮,不能实现呼吸灯的功能。

        while(1)
        {
                delay_ms(10);
                if(flag)
                        Led_InitVal++;
                else
                        Led_InitVal--;
                if(Led_InitVal > 300)
                        flag = 0;
                if(Led_InitVal == 0)
                        flag = 1;
                TIM_SetCompare1(TIM1,Led_InitVal);
        }
}


void Pwm_Init(u16 arr,u16 pls)
{
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStruct;
        TIM_OCInitTypeDef  TIM_OCInitStruct;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);

       
        TIM_TimeBaseInitStruct.TIM_ClockDivision = 0;
        TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInitStruct.TIM_Period = arr;
        TIM_TimeBaseInitStruct.TIM_Prescaler = pls;
        TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);
       
        TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2;
        TIM_OCInitStruct.TIM_OutputState =  TIM_OutputState_Enable;
        TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
        TIM_OC1Init(TIM1,&TIM_OCInitStruct);
       
        TIM_CtrlPWMOutputs(TIM1,ENABLE);
        TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);
        TIM_Cmd(TIM1,ENABLE);
}



void Led_Init(void)
{
        GPIO_InitTypeDef  GPIO_InitStruct;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
       
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStruct);
       
       
        GPIO_SetBits(GPIOA,GPIO_Pin_8);
}



最佳答案

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

且手册给的gpio原理图上,GPIO复用输出和GPIO输出都是连接到输出控制上的。 在手册第8章第二个图上
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

123

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1827
金钱
1827
注册时间
2019-7-23
在线时间
282 小时
发表于 2021-10-5 19:53:53 | 显示全部楼层
tw1157727586 发表于 2021-10-29 09:36
这是手册上说的,原理上来说。当某个引脚被用作某个外设的输出引脚时,就不要使用GPIO模块来改变GPIO状态

且手册给的gpio原理图上,GPIO复用输出和GPIO输出都是连接到输出控制上的。  在手册第8章第二个图上
享受技术
回复

使用道具 举报

6

主题

890

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1477
金钱
1477
注册时间
2020-8-19
在线时间
335 小时
发表于 2021-10-8 12:31:42 | 显示全部楼层
1、仿真调试看看值有没有变化2、看看是不是真的写进去占空比了
3、PWM看看有没有配置对
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2021-9-23
在线时间
13 小时
 楼主| 发表于 2021-10-9 22:59:22 | 显示全部楼层
PWM配置GPIO的我放在LED-Init里初始化,占空比写进去了。就是LED-Init放的位置不同时会有不同的现象,LED-Init放在PWM前面初始化时不能实现呼吸灯,放在PWM后面就能实现呼吸灯
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2021-9-23
在线时间
13 小时
 楼主| 发表于 2021-10-10 19:33:42 | 显示全部楼层
bin133 发表于 2021-10-8 12:31
1、仿真调试看看值有没有变化2、看看是不是真的写进去占空比了
3、PWM看看有没有配置对

PWM配置GPIO的我放在LED-Init里初始化,占空比写进去了。就是LED-Init放的位置不同时会有不同的现象,LED-Init放在PWM前面初始化时不能实现呼吸灯,放在PWM后面就能实现呼吸灯
回复

使用道具 举报

70

主题

6758

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12995
金钱
12995
注册时间
2012-11-26
在线时间
3790 小时
发表于 2021-10-10 23:30:27 | 显示全部楼层
你这不是废话吗?led_init又把引脚变成普通GPIO了,当然结果就不是预计的
学无止境
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2021-9-23
在线时间
13 小时
 楼主| 发表于 2021-10-11 21:54:02 | 显示全部楼层
jermy_z 发表于 2021-10-10 23:30
你这不是废话吗?led_init又把引脚变成普通GPIO了,当然结果就不是预计的

我说你看代码没有,PWM里面根本就没有GPIO的初始化,我放在Led-
init里面,而且Led-init里面就是把Led的引脚设置成AF-PP,照你们这么说那么都是不行的,但就有一个可以
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2021-9-23
在线时间
13 小时
 楼主| 发表于 2021-10-11 21:54:49 | 显示全部楼层
jermy_z 发表于 2021-10-10 23:30
你这不是废话吗?led_init又把引脚变成普通GPIO了,当然结果就不是预计的

而且是放在前面不行,又不是后面
回复

使用道具 举报

0

主题

16

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2021-10-6
在线时间
4 小时
发表于 2021-10-12 15:46:32 | 显示全部楼层
仿真看一下代码跑到哪里停了
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2021-9-23
在线时间
13 小时
 楼主| 发表于 2021-10-12 23:08:53 | 显示全部楼层
xiayuu 发表于 2021-10-12 15:46
仿真看一下代码跑到哪里停了

代码并没有停下来
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2021-9-23
在线时间
13 小时
 楼主| 发表于 2021-10-12 23:18:29 | 显示全部楼层
xiayuu 发表于 2021-10-12 15:46
仿真看一下代码跑到哪里停了

仿真了一下,放在前面时,led一初始化完,灯就亮了,但我函数里面明明把A8设置成高了
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2021-9-23
在线时间
13 小时
 楼主| 发表于 2021-10-12 23:19:28 | 显示全部楼层
xiayuu 发表于 2021-10-12 15:46
仿真看一下代码跑到哪里停了

在pwm后面led初始化完,灯就不会亮
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2021-10-13
在线时间
1 小时
发表于 2021-10-16 18:42:22 | 显示全部楼层
楼主有解决吗,我和你的问题一样,我用的精英版
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2021-9-23
在线时间
13 小时
 楼主| 发表于 2021-10-16 23:01:27 | 显示全部楼层
zqyxb 发表于 2021-10-16 18:42
楼主有解决吗,我和你的问题一样,我用的精英版

没有,还在等待
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2021-9-23
在线时间
13 小时
 楼主| 发表于 2021-10-17 22:04:11 | 显示全部楼层
zqyxb 发表于 2021-10-16 18:42
楼主有解决吗,我和你的问题一样,我用的精英版

没有,还在等待
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2021-9-23
在线时间
13 小时
 楼主| 发表于 2021-10-28 12:37:06 | 显示全部楼层
就没哥们能解决下
回复

使用道具 举报

5

主题

123

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1827
金钱
1827
注册时间
2019-7-23
在线时间
282 小时
发表于 2021-10-29 09:33:38 | 显示全部楼层
huangzhenglei 发表于 2021-10-10 19:33
PWM配置GPIO的我放在LED-Init里初始化,占空比写进去了。就是LED-Init放的位置不同时会有不同的现象,LED ...

如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。
如果软件把一个GPIO脚配置成复用输出功能,但是外设没有被激活,它的输出将不确定。
享受技术
回复

使用道具 举报

5

主题

123

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1827
金钱
1827
注册时间
2019-7-23
在线时间
282 小时
发表于 2021-10-29 09:36:57 | 显示全部楼层
本帖最后由 tw1157727586 于 2021-10-29 09:49 编辑
tw1157727586 发表于 2021-10-29 09:33
如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。
如果软件把一个 ...

这是手册上说的,原理上来说。当某个引脚被用作某个外设的输出引脚时,就不要使用GPIO模块来改变GPIO状态
享受技术
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2021-9-23
在线时间
13 小时
 楼主| 发表于 2021-10-29 16:56:41 | 显示全部楼层
tw1157727586 发表于 2021-10-29 09:53
且手册给的gpio原理图上,GPIO复用输出和GPIO输出都是连接到输出控制上的。  在手册第8章第二个图上

懂了,感谢
回复

使用道具 举报

2

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2022-3-12
在线时间
24 小时
发表于 2022-4-20 15:48:05 | 显示全部楼层
我想问一下这个flag,和led_initval是代表什么的,新手
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 11:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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