请高手看一下为什么会接收到乱码

2019-08-16 23:38发布

①我利用pc向串口1发送数据,然后由串口3发送给pc;②同时也可以利用pc向串口3发送数据,然后这些数据由串口1发送给pc。但是这两种情况下接收到的代码都不是我想要的,然而我相同的方法由串口1和串口2进行操作的时候都是正确的,以下是我的代码,求大佬分析以下
这是我的一种方法,还有一种是建立一个缓冲区来收发,但是接受到的数据仍然是错误的(发送的都是FF FF FF FF FF FF FF FF 82 A6 7C 03 14 39 03 00 75,串口1收到的是7F 7F 7F 7F 7F 7F 7F 7F 02 26 7C 83 94 B9 83 80 75 ,串口3收到的是 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 7F 3F 7F 3F 7F 3F 7F 3F 7F 3F 7F 3F 7F 3F 7F 3F 02 3F 26 3F 7C 3F 83 3F 94 3F B9 3F 70 3F 3F 3F 3F 70 3F F7 3F )。。。
void uart_init(u32 bound){
  //GPIO端口设置
  GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
         
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);        //使能USART1,GPIOA时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//GPIOB时钟
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);//使能USART3S
        //USART1_TX   GPIOA.9
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9
   
  //USART1_RX          GPIOA.10初始化
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10  
       
        //USART3_TX   GPIOB10
  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_10; //PB10
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出
  GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB10
   
  //USART3_RX          GPIOB11初始化
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//PA3
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
  GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB11

  //Usart1 NVIC 配置
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                //子优先级3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
        NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器
       
        //Usart3 NVIC 配置
  NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                //子优先级3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
        NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器
  
   //USART 初始化设置

        USART_InitStructure.USART_BaudRate = bound;//串口波特率
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
        USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
        USART_InitStructure.USART_Parity = USART_Parity_Odd;//校验位
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //收发模式

  USART_Init(USART1, &USART_InitStructure); //初始化串口1
        USART_Init(USART3, &USART_InitStructure); //初始化串口3
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口1接收中断
        USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//开启串口3接收中断
  USART_Cmd(USART1, ENABLE);                    //使能串口1
        USART_Cmd(USART3, ENABLE);                    //使能串口3

}
//串口1中断函数
void USART1_IRQHandler(void)
{
        u8 res;
         if(USART_GetITStatus(USART1,USART_IT_RXNE))
{
         
                 res= USART_ReceiveData(USART1);
     if(res != 0x0d && res != 0x0a)             USART_SendData(USART3,res);
         
      
  }
}
//串口3中断函数
void USART3_IRQHandler(void)
{
        u8 res;
         if(USART_GetITStatus(USART3,USART_IT_RXNE))
{       
         
                 
     res= USART_ReceiveData(USART3);
    if(res != 0x0d && res != 0x0a)               USART_SendData(USART1,res);
         
         
  }
}


int main(void)
{       
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        uart_init(1200);
         while(1);
         
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
gc475668754
1楼-- · 2019-08-17 02:03
 精彩回答 2  元偷偷看……
gc475668754
2楼-- · 2019-08-17 07:58
原子哥啊,各种大佬求支持啊,为什么一加上串口3数据就全乱了,是不是串口3有什么设置不清楚啊,是F103ZET6的板子。。
gc475668754
3楼-- · 2019-08-17 13:35
搞懂了,数据位设置错了。。。请原子哥关了这个帖子吧

一周热门 更多>