2个串口互相发码,出现乱码

2019-08-18 18:22发布

void USART2_IRQHandler(void)
{
        u8 res;
         if(USART_GetITStatus(USART2,USART_IT_RXNE))
     {
         res= USART_ReceiveData(USART2);
         USART_SendData(USART1,res);
         printf("qwer");
         USART_SendData(USART1,0x02);         
        }
}

复用了2个串口(USART1和USART2),想通过触摸屏按某个坐标,通过串口2接收到串口调试助手发来的数据,进入串口2中断程序,给串口1发送"qwer",但是在串口调试助手接收到乱码
   这是发送了3次的。"USART_IT_RXNE"自定义寄存器,整个寄存器的定义每个位的解释在哪,给的资料里面没找到
望吧内大神指导,还有原子哥帮我解释一下

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
板板
1楼-- · 2019-08-18 19:32
 精彩回答 2  元偷偷看……
Xrunovingo
2楼-- · 2019-08-18 23:36
板板 发表于 2017-5-22 09:54
USART_SendData(USART1,res);
USART_SendData(USART1,0x02);
这两句去掉,寄存器定义看STM32的用户手册

我是想让它将数据发到串口2

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);        //ê1ÄüUSART1£¬GPIOAê±Ö
                //USART1_TX   GPIOA.9
        GPIO_PinRemapConfig(GPIO_Remap_USART2, DISABLE);
  GPIO_InitStructure2.GPIO_Pin = GPIO_Pin_2; //PA.9
  GPIO_InitStructure2.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure2.GPIO_Mode = GPIO_Mode_AF_PP;        //¸′óÃíÆíìêä3ö
  GPIO_Init(GPIOA, &GPIO_InitStructure2);//3õê¼»ˉGPIOA.9
   
  //USART1_RX          GPIOA.103õê¼»ˉ
  GPIO_InitStructure2.GPIO_Pin = GPIO_Pin_3;//PA10
  GPIO_InitStructure2.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿Õêäèë
  GPIO_Init(GPIOA, &GPIO_InitStructure2);//3õê¼»ˉGPIOA.10  
       
  NVIC_InitStructure2.NVIC_IRQChannel = USART2_IRQn;
        NVIC_InitStructure2.NVIC_IRQChannelPreemptionPriority=1 ;//ÇàÕ¼óÅÏ輶3
        NVIC_InitStructure2.NVIC_IRQChannelSubPriority = 1;                //×óóÅÏ輶3
        NVIC_InitStructure2.NVIC_IRQChannelCmd = ENABLE;                        //IRQí¨μàê1Äü
        NVIC_Init(&NVIC_InitStructure2);        //¸ù¾YÖ¸¶¨μÄ2Îêy3õê¼»ˉVIC¼Ä′æÆ÷

        USART_InitStructure2.USART_BaudRate = 38400;//′®¿ú2¨ìØÂê
        USART_InitStructure2.USART_WordLength = USART_WordLength_8b;//×Ö3¤Îa8λêy¾Y¸ñê½
        USART_InitStructure2.USART_StopBits = USART_StopBits_1;//ò»¸öí£Ö1λ
        USART_InitStructure2.USART_Parity = USART_Parity_No;//ÎTÆæżD£Ñéλ
        USART_InitStructure2.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎTó2¼têy¾Yá÷¿ØÖÆ
        USART_InitStructure2.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //êÕ·¢Ä£ê½

  USART_Init(USART2, &USART_InitStructure2); //3õê¼»ˉ′®¿ú1
  USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//¿aÆô′®¿ú½óêüÖD¶Ï
  USART_Cmd(USART2, ENABLE);
Xrunovingo
3楼-- · 2019-08-19 00:49
Xrunovingo 发表于 2017-5-22 13:28
我是想让它将数据发到串口2

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);        //ê1Äü ...

这是我的串口的配置代码,上面是串口2的中断响应函数,里面
res= USART_ReceiveData(USART2);
USART_SendData(USART2,res);
串口2的接收到的也是乱码。
我知道用printf函数肯定可以的,
菜鸟L
4楼-- · 2019-08-19 01:43
首先你的程序里串口中断没有清除中断标志,其次可以试试波特率降低点。我经常用这个方法从未乱码过
lvkanger
5楼-- · 2019-08-19 05:07
发送没有等发送标志!
lvkanger
6楼-- · 2019-08-19 08:38
 精彩回答 2  元偷偷看……

一周热门 更多>