OpenEdv-开源电子网

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

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

[复制链接]

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2017-6-30
在线时间
15 小时
发表于 2017-7-15 12:49:00 | 显示全部楼层 |阅读模式
5金钱
①我利用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);
         
}

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2017-6-30
在线时间
15 小时
 楼主| 发表于 2017-7-15 12:49:01 | 显示全部楼层
回复

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2017-6-30
在线时间
15 小时
 楼主| 发表于 2017-7-15 13:21:14 | 显示全部楼层
原子哥啊,各种大佬求支持啊,为什么一加上串口3数据就全乱了,是不是串口3有什么设置不清楚啊,是F103ZET6的板子。。
回复

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2017-6-30
在线时间
15 小时
 楼主| 发表于 2017-7-16 22:22:47 | 显示全部楼层
搞懂了,数据位设置错了。。。请原子哥关了这个帖子吧
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-12-18 22:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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