3071|2

10

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

STM32VET6串口1守法数据出错??! [复制链接]

问题现象描述:在使用STM32VET6串口1,中断接收到数据后立即返回接收到的数据。用上位机串口
调试助手发送数据,一个字节一个字节(例如一次只发0x55)发送,上位机可以正确接收
数据(0x55)。但是如果一次发多个数据(例如发送0x55 0x66 0x77),上位机收到的数据
是乱码。请高手指教问题可能原因。
下面是相关代码:
void USART1_Init(u16 Baudrate)
{
  USART_InitTypeDef USART_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;              //定义一个结构体
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA , ENABLE);  
//******************************************************************************
//串口1所使用管脚输出输入定义
//******************************************************************************
//定义UART1 TX (PA.09)脚为复用推挽输出
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;         //IO口的第九脚
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   //IO口复用推挽输出
  GPIO_Init(GPIOA, &GPIO_InitStructure);            //初始化串口1输出IO口
  // 定义 USART1 Rx (PA.10)为悬空输入
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;           //IO口的第十脚
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//IO口悬空输入
  GPIO_Init(GPIOA, &GPIO_InitStructure);               //初始化串口1输入IO口
   
//******************************************************************************
    //串口1参数初始化定义部分,串口1参数为00 , 8 ,1 ,N  接收中断方式
//*****************************************************************************  
  USART_InitStructure.USART_BaudRate = Baudrate; //设定传输速率
  USART_InitStructure.USART_WordLength = USART_WordLength_8b; //设定传输数据位数
  USART_InitStructure.USART_StopBits = USART_StopBits_1;    //设定停止位个数
  USART_InitStructure.USART_Parity = USART_Parity_No ;      //不用校验位
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//不用流量控制
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;   //使用接收和发送功能
  USART_Init(USART1, &USART_InitStructure);  //初始化串口1
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);  //使能串口1接收中断
  USART_Cmd(USART1, ENABLE);  //使能串口1
  
   //使能串口1中断,
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);   
}

/************************************************************
//------------------------USART1接收中断函数------------------------
**************************************************************/
void USART1_IRQHandler(void)
{     
    if(USART_GetFlagStatus(USART1,USART_IT_RXNE)==SET)
    {               
  SciReceive1_Buffer[SciReceiveBuffer1_id] = USART_ReceiveData(USART1);
  Usart1_PutChar(USART_ReceiveData(USART1)); //收到的值返回
  if(++SciReceiveBuffer1_id>=100) {SciReceiveBuffer1_id = 0 ;}
}
}

硬件环境为火牛开发板STM32F103VET6。软件设置波特率9600。
同样的程序,将USART1更改为USART2后一切正常。
此帖出自stm32/stm8论坛

最新回复

换了一个口,其他都没有变?gpio口的定义也没有变?  详情 回复 发表于 2012-7-24 15:49

点评

换了一个口,其他都没有变?gpio口的定义也没有变?  详情 回复 发表于 2012-7-24 15:49
点赞 关注
 

回复
举报

82

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

回复 楼主 zys230719 的帖子

换了一个口,其他都没有变?gpio口的定义也没有变?
此帖出自stm32/stm8论坛

点评

已经调试好了。 更换自己设计的电路板,程序一切正常。 程序本身应该没有问题,估计是开发板硬件某些地方没设置好或者开发板本身有问题。  详情 回复 发表于 2012-7-27 15:33
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 jensenhero 的帖子

已经调试好了。
更换自己设计的电路板,程序一切正常。
程序本身应该没有问题,估计是开发板硬件某些地方没设置好或者开发板本身有问题。
此帖出自stm32/stm8论坛
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表