OpenEdv-开源电子网

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

串口中断接收问题

[复制链接]

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2015-3-13
在线时间
9 小时
发表于 2016-2-15 16:45:59 | 显示全部楼层 |阅读模式
主函数:int main()
{
//  uint8_t i;
  SystemInit();
  basic_config();        //基本配置       
        while(1)
        {       
                if(flag==1)
                {         
      printf("%d",buf[0]);               
                  flag=0;       
                }                       
    }
}


中断函数:
void USART3_IRQHandler(void)
{
   u8 ch;
  if(USART_GetITStatus(USART3, USART_IT_RXNE) == SET)
    {        
           USART_ClearITPendingBit(USART3,USART_IT_RXNE);
        ch=USART_ReceiveData(USART3);                         
       flag = 1;
        buf[num]=ch;
        num++;
        }          
}


用串口打印中断接收的数据,如附件图片显示。发送数据是10  串口打印出来4949
QQ截图20160215164529.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1292
金钱
1292
注册时间
2014-12-20
在线时间
534 小时
发表于 2016-2-15 17:23:08 | 显示全部楼层
上位机发送的是字符串“10”,字符'1'对应十进制数49,'0'对应十进制数48。下位机是接收到了两个字符,但是你一直都是显示的第一个字符的十进制数字符串,即两个“49”。
回复 支持 反对

使用道具 举报

9

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2015-10-7
在线时间
18 小时
发表于 2016-2-15 17:24:59 | 显示全部楼层
num你在哪定义的,用过清零了吗
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2015-3-13
在线时间
9 小时
 楼主| 发表于 2016-2-15 17:35:10 | 显示全部楼层
BMN李 发表于 2016-2-15 17:23
上位机发送的是字符串“10”,字符'1'对应十进制数49,'0'对应十进制数48。下位机是接收到了两个字符,但是 ...

对啊。我使用的是%d 打印10进制的数据。  为什么打印出来的不是我接收的数据啊。...
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2015-3-13
在线时间
9 小时
 楼主| 发表于 2016-2-15 17:36:57 | 显示全部楼层
YYZZDDJ 发表于 2016-2-15 17:24
num你在哪定义的,用过清零了吗

在中断里边定义的,没有清零,之前我使用这个数据打印字符串没问题。现在我打印buf[0]这一个数据,应该和num没有关系吧.....num没有清零
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2015-3-13
在线时间
9 小时
 楼主| 发表于 2016-2-15 17:44:45 | 显示全部楼层
杨文轩 发表于 2016-2-15 17:36
在中断里边定义的,没有清零,之前我使用这个数据打印字符串没问题。现在我打印buf[0]这一个数据,应该和 ...

[mw_shl_code=c,true]/* Includes ------------------------------------------------------------------*/
#include "stm32f10x_it.h"
#include <stdio.h>
#include "userconfig.h"

extern void TimingDelay_Decrement(void);
uint8_t flag=0;
uint8_t buf[20];
uint8_t num=0;[/mw_shl_code]
回复 支持 反对

使用道具 举报

16

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1292
金钱
1292
注册时间
2014-12-20
在线时间
534 小时
发表于 2016-2-15 18:07:18 | 显示全部楼层
本帖最后由 BMN李 于 2016-2-15 18:15 编辑
杨文轩 发表于 2016-2-15 17:35
对啊。我使用的是%d 打印10进制的数据。  为什么打印出来的不是我接收的数据啊。...

逻辑有些问题。好好捉摸吧。
回复 支持 反对

使用道具 举报

6

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
432
金钱
432
注册时间
2016-1-19
在线时间
38 小时
发表于 2016-2-16 08:46:21 | 显示全部楼层
楼主在这里打勾再试下。
xcom.png
原来你也在这里
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2015-3-13
在线时间
9 小时
 楼主| 发表于 2016-2-16 09:03:59 | 显示全部楼层
大雄先生 发表于 2016-2-16 08:46
楼主在这里打勾再试下。

16进制发送10  打印出来的是16
16进制发送11 打印出来17
这个正常对吧。16进制的10确实是10进制的16啊,11确实是10进制的17

16进制发送0 打印出来的是013
但是我发送0的时候他应该显示0 啊......

回复 支持 反对

使用道具 举报

9

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2015-8-16
在线时间
23 小时
发表于 2016-2-16 11:12:58 | 显示全部楼层
你打印16进制输出试试
回复 支持 反对

使用道具 举报

6

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
432
金钱
432
注册时间
2016-1-19
在线时间
38 小时
发表于 2016-2-16 11:13:19 | 显示全部楼层
杨文轩 发表于 2016-2-16 09:03
16进制发送10  打印出来的是16
16进制发送11 打印出来17
这个正常对吧。16进制的10确实是10进制的16啊 ...

楼主按这个先测试下:记得在16进制发送、16进制接收前打勾。
主函数:int main()
{
//  uint8_t i;
  SystemInit();
  basic_config();        //基本配置        
        while(1)
        {        
                if(flag==1)
                {         
      printf(buf[0]);               
                  flag=0;        
                }                        
    }
}


中断函数:
void USART3_IRQHandler(void)
{
   u8 ch;
  if(USART_GetITStatus(USART3, USART_IT_RXNE) == SET)
    {         
           USART_ClearITPendingBit(USART3,USART_IT_RXNE);
        ch=USART_ReceiveData(USART3);                          
       flag = 1;
        buf[0]=ch;//buf[num]=ch;
        //num++;
        }         
}

原来你也在这里
回复 支持 反对

使用道具 举报

4

主题

35

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
351
金钱
351
注册时间
2013-4-23
在线时间
98 小时
发表于 2016-2-16 12:20:44 | 显示全部楼层
printf("%d",buf[0]);   

你本来就是要打印buf[0],而buf[0]里就是“1”,哪里错了?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 03:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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