OpenEdv-开源电子网

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

串口通信求助

[复制链接]

3

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-2-22
在线时间
0 小时
发表于 2013-3-21 21:38:13 | 显示全部楼层 |阅读模式
我想在串口通信是输入1,则case 0,而且只一次,不要循环。输入2,则case 1。输入3 ,则case 2。通过这些参数进一步做其他工作。
可是串口通信输不管输入1,2,3或者其他数据,串口小组手却不打印任何东西(本来应该打印ss,yy,ee什么的),也就是进不了switch语句,而且led灯也一直闪,说明在一直循环。。。
求大神们帮忙解决。


void USART1_IRQHandler(void)
{
u8 res;  
if(USART1->SR&(1<<5)==1)
res=USART1->DR;
LED0=0; 
delay_ms(30) ; 
LED0=1; 
        delay——ms(30);
switch(res)
{
 case 0: 
  printf("ss");
TIM3->CR1=0x00;
break;
 case 1:printf("yy");flag1=1;TIM3->CR1=0x01;break;
 case 2:printf("ee");flag1=0;TIM3->CR1=0x01;break;
 default:break;
}



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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-21 22:04:56 | 显示全部楼层
改为:switch(res-‘0’)试试。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-2-22
在线时间
0 小时
 楼主| 发表于 2013-3-22 09:54:21 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
上面写错了是输入0,则case 0,输入1,则case 1。输入2,则case 2。。。。可是原子哥,还是不行啊原来一样,我把u8改成char也不行,还和原来一样。。。求原子哥帮帮忙。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-22 11:19:57 | 显示全部楼层
不应该,你仿真看看res的真实值是多少吧!
我觉得改为res-'0',就可以运行了的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-3-22 12:44:38 | 显示全部楼层
你输入的 是不是 ASCII  啊
你用十六进制

另外 在中断处理里面 用延时  太不可取了。
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-2-22
在线时间
0 小时
 楼主| 发表于 2013-3-22 13:01:03 | 显示全部楼层
回复【5楼】aleda303:
---------------------------------
哦,谢谢啊。就是通过键盘输入的应该就是 ASCII码吧。我试了一下改成case ‘0’,case ‘1’,case ‘2’就可以了。我中断里用延时就是看一下程序运行吗,可是为什么不能用,麻烦解释一下啊,谢谢
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-2-22
在线时间
0 小时
 楼主| 发表于 2013-3-22 13:03:21 | 显示全部楼层
回复【4楼】正点原子:
--------------------------------
原子哥,谢谢啊。改成case ‘0’,case ‘1’,case ‘2’就可以了,应该是数据类型不一样的事
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-2-22
在线时间
0 小时
 楼主| 发表于 2013-3-22 13:13:52 | 显示全部楼层
回复【6楼】SPEEDING:
---------------------------------
中断子程序最好不要有太大的延时,否则会大大降低系统的相应性能
中断可以加延时,但不宜太长,否则有些功能你可能实现不了
理论上中断里的延时可以任意长,不出来都行。但一般不建议,中断程序越短越好。
是这些原因吗?
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-2-22
在线时间
0 小时
 楼主| 发表于 2013-3-22 13:17:29 | 显示全部楼层
回复【5楼】aleda303:
---------------------------------
中断子程序最好不要有太大的延时,否则会大大降低系统的相应性能 
中断可以加延时,但不宜太长,否则有些功能你可能实现不了 
理论上中断里的延时可以任意长,不出来都行。但一般不建议,中断程序越短越好。 
是这些原因吗?
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-3-22 13:49:05 | 显示全部楼层
回复【6楼】SPEEDING:
---------------------------------
中断处理 要求尽量短 ,否则其他低优先级的中断就没法响应了

你这个例子可以这样

定义一个变量 ,在中断里面 改变该变量的值, 然后根据它 更改LED的状态
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-3-22 13:49:15 | 显示全部楼层
回复【9楼】SPEEDING:
---------------------------------
对 是的
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-23 23:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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