你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

新人求助。串口数据出错。

[复制链接]
AnswerRaul 提问时间:2015-1-20 16:31 /
在写一个ad采集程序,调试时用串口输出数据,结果输出数据跟采集到的数据一直不对。
然后做了一个最简单串口程序进行测试,发现数据传递到寄存器时都是正确的,但是串口调试助手收到的数据还是有问题。

环境:Keil 5,stm32f103;
配置串口函数

  1. #include <stm32f10x.h>
  2. #include <config.h>

  3. void RCC_Configuration(void)
  4. {
  5.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  6.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
  7.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
  8. }

  9. void GPIO_Configuration(void)
  10. {
  11.         GPIO_InitTypeDef GPIO_InitStructure;
  12.        
  13.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                         // Configure USART1_Tx as alternate function push-pull  
  14.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  15.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  16.         GPIO_Init(GPIOA, &GPIO_InitStructure);          
  17.          
  18.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;                            // Configure USART1_Rx as input floating
  19.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  20.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  21.        
  22. }

  23. void USART_Configuration(void)
  24. {
  25.         USART_InitTypeDef USART_InitStructure;
  26.        
  27.         USART_InitStructure.USART_BaudRate = 9600;
  28.   USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  29.   USART_InitStructure.USART_StopBits = USART_StopBits_1;
  30.   USART_InitStructure.USART_Parity = USART_Parity_No;
  31.   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  32.   USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;

  33.         USART_Init(USART1, &USART_InitStructure);
  34.         USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

  35.         USART_Cmd(USART1, ENABLE);
  36. }

  37. void NVIC_Configuration(void)
  38. {
  39.         NVIC_InitTypeDef NVIC_InitStructure;
  40.        
  41.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  42.        
  43.         NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  44.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  45.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  46.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  47.        
  48.         NVIC_Init(&NVIC_InitStructure);

  49. }
复制代码


串口发送数据调试过程截图
data.PNG
串口调试助手收到数据截图
捕获.PNG

求大神帮忙分析一下问题可能出现再哪些地方。


收藏 评论11 发布时间:2015-1-20 16:31

举报

11个回答
moyanming2013 回答时间:2015-1-20 16:45:15
发一个字节都不对?
AnswerRaul 回答时间:2015-1-20 17:07:34
moyanming2013 发表于 2015-1-20 16:45
发一个字节都不对?

发一个字节都不对,每个字符的高位都会变成E,低位随机
wamcncn 回答时间:2015-1-20 18:27:00
用printf +串口助手看看
moyanming2013 回答时间:2015-1-20 21:21:04
AnswerRaul 发表于 2015-1-20 17:07
发一个字节都不对,每个字符的高位都会变成E,低位随机

这么有规律的话,建议单步调试下,是一行一行的走代码调。
我是酱油哥 回答时间:2015-1-21 08:34:30
表示赞同   
AnswerRaul 回答时间:2015-1-21 09:48:08
moyanming2013 发表于 2015-1-20 21:21
这么有规律的话,建议单步调试下,是一行一行的走代码调。

一直是单步调试。一直到 SendData函数内部给 USART->DR 寄存器附的值都是正确的,但是输出就不对了。
AnswerRaul 回答时间:2015-1-21 09:48:45
wambob 发表于 2015-1-20 18:27
用printf +串口助手看看

printf出来的也是错误数据,跟串口助手的值一样。
wamcncn 回答时间:2015-1-21 12:53:59
AnswerRaul 发表于 2015-1-21 09:48
printf出来的也是错误数据,跟串口助手的值一样。

先单独调试好串口后,再把串口模块+到你的程序里,再调试
废鱼 回答时间:2015-1-21 16:10:04
考虑一下电平转换的问题,PC和STM32之间怎么连接的?
星辰一方 回答时间:2015-2-16 19:59:36
查下硬件,波特率别太高
wamcncn 回答时间:2015-2-17 08:47:54
你这是查询还是中断。初始化串口需要清标志位

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版