OpenEdv-开源电子网

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

求教大神!串口发送指令控制LED灯亮灭与闪烁!

[复制链接]

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2017-9-10
在线时间
14 小时
发表于 2018-7-5 12:07:28 | 显示全部楼层 |阅读模式
2金钱
各位大神好,我是新手,刚开始照着原子哥的教程学STM32,现在想实现以下效果,请大神给个思路:


预期效果:
通过串口调试助手发送指令,进而控制LED灯。具体为发送0,灯灭;发送1,灯亮;发送2,灯一直闪烁。


我的思路:
使能串口接收中断接收上位机数据,将上位机发送的数据存储到缓冲区,判断数据是否为0,1,2.
如果为0,SetBits;
如果为1,ResetBits;
亮灭均能实现,但是闪烁这里,因为我是新手,不太了解,我之前操作LED闪烁都是做个延时,while(1)死循环。如果现在我还这样做,我想就要退出死循环,但是一顿操作,遗憾未能成功,总是无法退出这个死循环,进入之后就发送任何指令都不行了。


不知道怎么做了,求大神指教,给个闪烁的思路,谢谢啦!

最佳答案

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

while(1) { i=串口接收函数得到的值; if(i==0) 灯灭; if(i==1) 灯亮; while(i==2) { 闪烁; i=串口接收函数得到的值; if(i!=2) break; } } 大体上就是这个形式,
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

88

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
470
金钱
470
注册时间
2017-12-20
在线时间
61 小时
发表于 2018-7-5 12:07:29 | 显示全部楼层
dugumiying 发表于 2018-7-5 16:29
感谢指导!刚还没看到这条答案,做了一个,原理类似,但接着有一个问题,就是再发送新数据进来,它确实跳 ...

while(1)
{
i=串口接收函数得到的值;
if(i==0)
   灯灭;
if(i==1)
   灯亮;
while(i==2)
     {
         闪烁;
         i=串口接收函数得到的值;
         if(i!=2)
            break;
      }
}
大体上就是这个形式,
回复

使用道具 举报

8

主题

169

帖子

0

精华

高级会员

Rank: 4

积分
564
金钱
564
注册时间
2015-7-4
在线时间
105 小时
发表于 2018-7-5 15:01:35 | 显示全部楼层
1. 在while(1)死循环里不停的判断LED标志位,然后执行相应的LED程序,是亮,灭还是闪烁。 2. 在串口接收中断中根据就收到的值,改变标志位。
回复

使用道具 举报

2

主题

88

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
470
金钱
470
注册时间
2017-12-20
在线时间
61 小时
发表于 2018-7-5 15:55:11 | 显示全部楼层
把你串口数据接收的函数放在死循环里不就可以了?一旦检测到不等于2,就跳去当前死循环,执行while(1)里面的串口数据接收函数
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2017-9-10
在线时间
14 小时
 楼主| 发表于 2018-7-5 16:29:38 | 显示全部楼层
淡然若梦 发表于 2018-7-5 15:55
把你串口数据接收的函数放在死循环里不就可以了?一旦检测到不等于2,就跳去当前死循环,执行while(1)里面 ...

感谢指导!刚还没看到这条答案,做了一个,原理类似,但接着有一个问题,就是再发送新数据进来,它确实跳出了死循环,但是就不会接着继续执行相应操作了。比如发了2,正在闪灯,此时发1,会跳出死循环,但不会亮灯,因此我加了个go to,跳出小循环,跳去大循环,再去循环一遍判断接收到的这个值,目前已经实验成功,但是总感觉代码冗长,不知道还有没有宝贵意见呢?
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2017-9-10
在线时间
14 小时
 楼主| 发表于 2018-7-5 16:30:24 | 显示全部楼层
chaifuwu 发表于 2018-7-5 15:01
1. 在while(1)死循环里不停的判断LED标志位,然后执行相应的LED程序,是亮,灭还是闪烁。 2. 在串口接收 ...

感谢指导!
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2019-11-28
在线时间
0 小时
发表于 2019-11-28 12:29:09 | 显示全部楼层
老哥能分享一下代码吗
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2020-7-16
在线时间
3 小时
发表于 2020-7-22 16:40:26 | 显示全部楼层
淡然若梦 发表于 2018-7-5 12:07
while(1)
{
i=串口接收函数得到的值;

难点是不知道串口接受到 的值怎么弄,特别是字符串控制
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 04:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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