OpenEdv-开源电子网

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

串口接受中断,在中断服务函数中写的控制等闪烁次数的代码。闪烁次数由串口接受的数据决定。为何运行时闪烁次数总是不对

[复制链接]

3

主题

15

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-11-4
在线时间
8 小时
发表于 2017-2-25 15:00:30 | 显示全部楼层 |阅读模式
1金钱
void USART1_IRQHandler(void)                        //′®¿ú1ÖD¶Ï·tÎñ3ìDò
        {
        u16 Res,i;
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //½óêÕÖD¶Ï(½óêÕμ½μÄêy¾Y±ØDëêÇ0x0d 0x0a½áÎ2)
                {
                Res =USART_ReceiveData(USART1);        //¶á衽óêÕμ½μÄêy¾Y                 
    }
  for(i=0;i<Res;i++)
        {
                USART_SendData(USART1,Res);
                LED0=!LED0;
                delay_ms(300);
                LED0=!LED0;
                delay_ms(300);
        }               
}

最佳答案

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

你用上位机往下位机发值的时候是字符格式还是数字格式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

46

帖子

0

精华

高级会员

Rank: 4

积分
959
金钱
959
注册时间
2015-11-27
在线时间
109 小时
发表于 2017-2-25 15:00:31 | 显示全部楼层
李广321 发表于 2017-2-25 22:38
试了一下全局变量,返回串口调试助手的值是正确的,但用的时候不对

你用上位机往下位机发值的时候是字符格式还是数字格式
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2016-12-18
在线时间
8 小时
发表于 2017-2-25 15:47:37 | 显示全部楼层
你的清除中断标志位那里去了
回复

使用道具 举报

12

主题

46

帖子

0

精华

高级会员

Rank: 4

积分
959
金钱
959
注册时间
2015-11-27
在线时间
109 小时
发表于 2017-2-25 21:25:44 | 显示全部楼层
串口中断函数最好不要这么写,中断时间太长了,很容易出现各种各样的问题。你可以把Res设置为全局变量,根据Res对LED的操作放在主函数中实现
回复

使用道具 举报

3

主题

15

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-11-4
在线时间
8 小时
 楼主| 发表于 2017-2-25 22:20:02 | 显示全部楼层
1850334772qq 发表于 2017-2-25 15:47
你的清除中断标志位那里去了

USART_ClearFlag(USART1,USART_FLAG_RXNE);
添加清除标志位还是不行,闪烁次数不对
回复

使用道具 举报

3

主题

15

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-11-4
在线时间
8 小时
 楼主| 发表于 2017-2-25 22:28:51 | 显示全部楼层
1850334772qq 发表于 2017-2-25 15:47
你的清除中断标志位那里去了

void USART1_IRQHandler(void)                        //′&#174;&#191;ú1&#214;D&#182;&#207;·t&#206;&#241;3ìDò
        {
          if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //&#189;óê&#213;&#214;D&#182;&#207;(&#189;óê&#213;μ&#189;μ&#196;êy&#190;Y±&#216;D&#235;ê&#199;0x0d 0x0a&#189;á&#206;2)
                {
                   Res=USART_ReceiveData(USART1);        //&#182;áè&#161;&#189;óê&#213;μ&#189;μ&#196;êy&#190;Y       
       USART_SendData(USART1,Res);               
    }
                USART_ClearFlag(USART1,USART_FLAG_RXNE);
}

用串口调试助手,传入什么值返回什么值,但是这个数值用的时候就是不对
回复

使用道具 举报

3

主题

15

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-11-4
在线时间
8 小时
 楼主| 发表于 2017-2-25 22:31:01 | 显示全部楼层
氢氦李铍硼 发表于 2017-2-25 21:25
串口中断函数最好不要这么写,中断时间太长了,很容易出现各种各样的问题。你可以把Res设置为全局变量,根 ...

用过了,和不是全局变量一样。我再试一下看看
回复

使用道具 举报

3

主题

15

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-11-4
在线时间
8 小时
 楼主| 发表于 2017-2-25 22:38:28 | 显示全部楼层
氢氦李铍硼 发表于 2017-2-25 21:25
串口中断函数最好不要这么写,中断时间太长了,很容易出现各种各样的问题。你可以把Res设置为全局变量,根 ...

试了一下全局变量,返回串口调试助手的值是正确的,但用的时候不对
回复

使用道具 举报

3

主题

15

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-11-4
在线时间
8 小时
 楼主| 发表于 2017-2-25 23:07:25 | 显示全部楼层
氢氦李铍硼 发表于 2017-2-25 22:42
你用上位机往下位机发值的时候是字符格式还是数字格式

谢谢,串口调试助手勾选的发送新行。按16进制发送完全正确了。能问一下格式是怎么选的吗?可以十进制吗?
回复

使用道具 举报

3

主题

15

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-11-4
在线时间
8 小时
 楼主| 发表于 2017-2-25 23:07:57 | 显示全部楼层
氢氦李铍硼 发表于 2017-2-25 22:42
你用上位机往下位机发值的时候是字符格式还是数字格式

十分感谢,这个错误真的是改了好多次程序
回复

使用道具 举报

12

主题

46

帖子

0

精华

高级会员

Rank: 4

积分
959
金钱
959
注册时间
2015-11-27
在线时间
109 小时
发表于 2017-2-25 23:22:04 | 显示全部楼层
李广321 发表于 2017-2-25 23:07
十分感谢,这个错误真的是改了好多次程序

建议你了解一下上位机软件的编写,我经常用c#编写上位机软件协助调试下位机软件,上位机采集数据显示比下位机灵活,我之前写的一些东西你可以参考一下
http://tieba.baidu.com/p/4165655 ... p;cid=0#79198155026
http://bbs.elecfans.com/forum.ph ... d=540144&extra=
回复

使用道具 举报

3

主题

15

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-11-4
在线时间
8 小时
 楼主| 发表于 2017-2-26 13:16:18 | 显示全部楼层
氢氦李铍硼 发表于 2017-2-25 23:22
建议你了解一下上位机软件的编写,我经常用c#编写上位机软件协助调试下位机软件,上位机采集数据显示比下 ...

好的,谢谢啦。我看一下
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-9-22 16:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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