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

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

[复制链接]
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,低位随机
wambob 回答时间: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出来的也是错误数据,跟串口助手的值一样。
wambob 回答时间:2015-1-21 12:53:59
AnswerRaul 发表于 2015-1-21 09:48
printf出来的也是错误数据,跟串口助手的值一样。

先单独调试好串口后,再把串口模块+到你的程序里,再调试
回答时间:2015-1-21 16:10:04
考虑一下电平转换的问题,PC和STM32之间怎么连接的?
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版