OpenEdv-开源电子网

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

STM32F103串口问题,请各位大大指教

[复制链接]

11

主题

42

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2864
金钱
2864
注册时间
2020-4-30
在线时间
220 小时
发表于 2021-3-3 15:20:02 | 显示全部楼层 |阅读模式
5金钱
我在用串口助手调试485通信的时候,发现一个奇怪的问题,就是串口设置不一致时数据是对的,设置一致时反而是错误的。这是发送函数:

  1. void  AmmeterAddRead(void)
  2. {
  3.         UartDDS_init(9600);
  4.         memset(usart3_rcv_buf,0,sizeof(usart3_rcv_buf));
  5.         usart3_rcv_len=0;        
  6.         Electricity_ON;//CD4052切换到485
  7.         RS485_Send;//485发送模式
  8.         delay_ms(100);
  9.         USART3->DR =0x00;
  10.         while(USART_GetFlagStatus(USART3, USART_FLAG_TC)==0);
  11.         USART3->DR =0x04;
  12.         while(USART_GetFlagStatus(USART3, USART_FLAG_TC)==0);
  13.         USART3->DR =0x01;
  14.         while(USART_GetFlagStatus(USART3, USART_FLAG_TC)==0);
  15.         USART3->DR =0x00;
  16.         while(USART_GetFlagStatus(USART3, USART_FLAG_TC)==0);
  17.         USART3->DR =0x00;
  18.         while(USART_GetFlagStatus(USART3, USART_FLAG_TC)==0);
  19.         USART3->DR =0x02;
  20.         while(USART_GetFlagStatus(USART3, USART_FLAG_TC)==0);
  21.         USART3->DR =0x71;
  22.         while(USART_GetFlagStatus(USART3, USART_FLAG_TC)==0);
  23.         USART3->DR =0xE6;
  24.         while(USART_GetFlagStatus(USART3, USART_FLAG_TC)==0);
  25.         RS485_Receve;
  26.         delay_ms(100);
  27. }
复制代码
这是串口设置:
  1. void UartDDS_init(u32 bound)
  2. {
  3.         //GPIO端口设置
  4.         GPIO_InitTypeDef GPIO_InitStructure;
  5.         USART_InitTypeDef USART_InitStructure;
  6.         NVIC_InitTypeDef NVIC_InitStructure;
  7.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
  8.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);        //使能USART3,GPIOA时钟        
  9.         
  10.         //USART1_TX   
  11.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB10
  12.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  13.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出
  14.         GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB10
  15.    
  16.         //USART1_RX         
  17.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//PB11
  18.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
  19.         GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB11

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

  28.         USART_InitStructure.USART_BaudRate = bound;//串口波特率
  29.         USART_InitStructure.USART_WordLength = USART_WordLength_9b;//字长为8位数据格式</font>
  30.         USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
  31.         USART_InitStructure.USART_Parity = USART_Parity_Even;//偶校验位
  32.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
  33.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //收发模式

  34.         USART_Init(USART3, &USART_InitStructure); //初始化串口3
  35.         USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//开启串口接受中断
  36.         USART_Cmd(USART3, ENABLE);                    //使能串口3
  37. }
复制代码
这时收到的数据是一致的
12345.png
如果在串口设置里把标红的改成
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
那收到的数据就变成,反而是错误的
45678.png
想不明白,请教各位大神了!!

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

使用道具 举报

2

主题

685

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3448
金钱
3448
注册时间
2017-7-4
在线时间
869 小时
发表于 2021-3-3 20:13:12 | 显示全部楼层
两边时钟有偏差。试着把停止位改为1.5或者2.
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-29 06:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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