OpenEdv-开源电子网

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

新手买了块开发办学习,用GPIO延时做PWM呼吸灯遇到问题了

[复制链接]

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-11-18
在线时间
0 小时
发表于 2015-11-18 15:45:44 | 显示全部楼层 |阅读模式
5金钱

各位大大好,是这样的,本人初学STM32F4买了探索者的开发板学习,学到GPIO这一节后想试试使用延时函数实现输出PWM控制LED的呼吸灯效果,程序如下
uint32_t Tpwm=5000;
uint32_t p,q;

int main(void)
{
while(1)
 {
   for(p=0; p<Tpwm; p++)
    {
    q=Tpwm-p;
    GPIO_ResetBits(GPIOF,GPIO_Pin_9);
    Delay(p);
    GPIO_SetBits(GPIOF,GPIO_Pin_9); 
    Delay(q);
    }
   
   for(p=Tpwm; p>0; p--)
    {
    q=Tpwm-p;
    GPIO_ResetBits(GPIOF,GPIO_Pin_9);
    Delay(p);
    GPIO_SetBits(GPIOF,GPIO_Pin_9); 
    Delay(q);
    }

 }
}

以上程序在板子上跑没有问题,红色LED像呼吸灯一样渐亮渐暗,效果满意。
然而
我把上面的Delay函数替换成delay_us之后,无论怎么调整时间长度,LED不是常亮就是常暗,完全没有呼吸的效果,不知道为什么会这样?
本想看看Delay函数与delay_us函数到底有什么区别,无奈Delay这个函数软件都找不到在哪里定义的。

请各位大大指教!

最佳答案

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

找到原因了,原来delay_us()这个函数的参数不能为0,否则就出现问题了。 问题解决,谢谢大家。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-11-18
在线时间
0 小时
 楼主| 发表于 2015-11-18 15:45:45 | 显示全部楼层
找到原因了,原来delay_us()这个函数的参数不能为0,否则就出现问题了。
问题解决,谢谢大家。
回复

使用道具 举报

13

主题

611

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1929
金钱
1929
注册时间
2014-10-6
在线时间
625 小时
发表于 2015-11-18 16:27:13 | 显示全部楼层
delay_us是US级的延时,延时时间太短了,人的眼睛没有办法看见这么快的变化,
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-11-18
在线时间
0 小时
 楼主| 发表于 2015-11-18 16:37:39 | 显示全部楼层
回复【2楼】烟酒不沾:
---------------------------------
延长了时间仍然如此啊
回复

使用道具 举报

13

主题

611

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1929
金钱
1929
注册时间
2014-10-6
在线时间
625 小时
发表于 2015-11-18 16:41:55 | 显示全部楼层
回复【3楼】sephoney:
---------------------------------
你延时多长时间?
回复

使用道具 举报

18

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
383
金钱
383
注册时间
2015-11-1
在线时间
49 小时
发表于 2015-11-18 17:34:07 | 显示全部楼层
我觉得最好用pwm输出控制比较好,这样资源利用比较大。
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-11-18
在线时间
0 小时
 楼主| 发表于 2015-11-18 19:32:55 | 显示全部楼层
回复【4楼】烟酒不沾:
---------------------------------
回复【4楼】烟酒不沾:
---------------------------------
10000、100000、1000000都试过了没用
而且就算用1000也不应出现你说的太快的问题。计算一下就知道每个周期是1000us,占空比从最小到最大要经历1000个周期也就是1s的时间,正常运行下肉眼不可能看不出明暗变化。
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-11-18
在线时间
0 小时
 楼主| 发表于 2015-11-18 19:33:55 | 显示全部楼层
回复【5楼】小可爱:
---------------------------------
还没学到那里,没想到在GPIO这里就遇上问题了
回复

使用道具 举报

70

主题

6758

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12989
金钱
12989
注册时间
2012-11-26
在线时间
3788 小时
发表于 2015-11-18 19:56:21 | 显示全部楼层
你原来的delay函数是delay多久  


按照那个改
学无止境
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-11-18
在线时间
0 小时
 楼主| 发表于 2015-11-18 20:15:42 | 显示全部楼层
回复【8楼】jermy_z:
---------------------------------
原来那个函数查不到在哪里定义的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 15:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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