• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

串口发送的和接受的不一样是怎么回事

huihui163 2017-10-11 浏览量:1803
	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
  {
    GPIO_ResetBits(GPIOC, GPIO_Pin_0);
		Res =USART_ReceiveData(USART1);
		
		USART_ClearFlag(USART1,USART_FLAG_RXNE);
		USART_SendData(USART1,Res);
		
    if(rec_flag==0)
    {
//			USART_SendData(USART1,rec_flag);
			GPIO_ResetBits(GPIOC, GPIO_Pin_1);
      if(USART_ReceiveData(USART1)==0xff)
      {
				GPIO_ResetBits(GPIOC, GPIO_Pin_1);
        rec_flag=1;	
//				USART_SendData(USART1,rec_flag);
        i=0;

      }			
    }
    else
    {
      if(USART_ReceiveData(USART1)==0xff)
      {
        rec_flag=0;	
//				USART_SendData(USART1,rec_flag);
//				
        if(i==3)
        {
         
					if(buffer[0]==0x00)//ÊÖ¶¯¿ØÖÆ
         {
        GPIO_SetBits(GPIOC,GPIO_Pin_0);
        
         switch(buffer[1])
           {
            case 0x01:GPIO_ResetBits(GPIOC, GPIO_Pin_1);break;//Ç°½ø

            }
         }
        }
        i=0;
      }
      else
      {
        buffer[i]=USART_ReceiveData(USART1);
        i++;
      }
    }		
  }
  else
  {
    USART_ClearFlag(USART1,USART_FLAG_LBD);
  }	

1.png

单独发送FF没有应答连中断都进不去,我在中断里设置的有指示灯

1.png

就发送00返回来00其他的都不一样,发送FE返回来FC怎么回事

USART.rar

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 你先调试一下,接收数据打个断点,看看接收到数据RDR寄存器寄存器的值是不是对面发送的值

    然后单步调试发送程序部分,看看你往TDR寄存器写入的值是不是你要发送的数据。

    然后判断问题出在哪里。

    • 发布于 2017-10-13
    • 举报
    • 评论 5
    • 0
    • 0
huihui163 回复了 我是爆米花啊:在线调试仿真吗 回复
我是爆米花啊 回复了 我是爆米花啊:是的呀,用JLINK或者STLING仿真器仿真一下,应该能很快发现问题。 回复
huihui163 回复了 我是爆米花啊:仿真我知道,仿真时怎么进入中断啊,外部触发中断都可以到断点吗 回复
我是爆米花啊 回复了 我是爆米花啊:Res =USART_ReceiveData(USART1);举个例子,在这一句前面双击打个断点,然后程序停在这里的时候RDR寄存器里已经有数据了。 回复
huihui163 回复了 我是爆米花啊:我知道怎么设置断点,问题是怎么触发中断啊,我用ST link调试仿真时,没有办法用串口助手再发送指令啊 回复

其他答案 数量:12
  • 你看下你程序设置的波特率是不是设置的14400,我怀疑是波特率设置的有问题
    • 发布于2017-10-11
    • 举报
    • 评论 1
    • 0
    • 0
huihui163 回复了 1151854667 :设置没问题,我上传了串口文件看一下谢谢诶 回复

  • 没有看到你串口配置部分的程序,配置可能存在问题。你的收发逻辑比较乱,可以选进行串口的自发自收测试。

    硬件上,连接是不是可靠,是不是共地之类 的进行查找问题。


    • 发布于2017-10-11
    • 举报
    • 评论 1
    • 0
    • 0
huihui163 回复了 汉云 :设置没问题,我上传了串口文件看一下谢谢诶 回复

  • 不启用后面那部分程序试试看能不能正常收到,这种情况不常见的

    另外发什么数据收到会那些E0的?

    • 发布于2017-10-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 发FE回FC,看看串口配置中波特率、校验位等参数是否匹配串口助手的设置。


    • 发布于2017-10-12
    • 举报
    • 评论 0
    • 0
    • 0

  • FE->FC,数据相当于左移了一位,检查单片机的串口配置吧,跟你串口助手的保持一致。
    • 发布于2017-10-12
    • 举报
    • 评论 1
    • 0
    • 0
huihui163 回复了 xiefy21 :设置没问题,我上传了串口文件看一下谢谢诶 回复

  • 看看波特率设置是否匹配,有没有设置校验位。
    • 发布于2017-10-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 波特率、检验位、数据位看看是不是和串口助手配置的一样
    • 发布于2017-10-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 你用的型号是什么?我看工程配置的是105
    • 发布于2017-10-13
    • 举报
    • 评论 1
    • 0
    • 0
huihui163 回复了 Sourcelink :用103也行,串口引脚都一样,一直找不到问题所在 回复

  • 你可以分开来调试,尝试先发送一组数据到串口看看数据对了没有,然后用串口发另外一组数据过去,做出相应的指示看看对不对再调整一下程序
    • 发布于2017-10-13
    • 举报
    • 评论 1
    • 0
    • 0
huihui163 回复了 原董 :您看一下我的串口助手发送的,回来的都变了 回复

  • 一个是你波特率是否一致,一个是你晶振的大小。就这两个方面看看
    • 发布于2017-10-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 波特率没有匹配好吧,检查一下
    • 发布于2017-10-15
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

串口发送的和接受的不一样是怎么回事