新人求助。串口数据出错。
在写一个ad采集程序,调试时用串口输出数据,结果输出数据跟采集到的数据一直不对。然后做了一个最简单串口程序进行测试,发现数据传递到寄存器时都是正确的,但是串口调试助手收到的数据还是有问题。
环境:Keil 5,stm32f103;
配置串口函数
#include <stm32f10x.h>
#include <config.h>
void RCC_Configuration(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; // Configure USART1_Tx as alternate function push-pull
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; // Configure USART1_Rx as input floating
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void USART_Configuration(void)
{
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 9600;
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_Tx | USART_Mode_Rx;
USART_Init(USART1, &USART_InitStructure);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_Cmd(USART1, ENABLE);
}
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
串口发送数据调试过程截图
串口调试助手收到数据截图
求大神帮忙分析一下问题可能出现再哪些地方。
发一个字节都不对? moyanming2013 发表于 2015-1-20 16:45
发一个字节都不对?
发一个字节都不对,每个字符的高位都会变成E,低位随机 用printf +串口助手看看 AnswerRaul 发表于 2015-1-20 17:07
发一个字节都不对,每个字符的高位都会变成E,低位随机
这么有规律的话,建议单步调试下,是一行一行的走代码调。 表示赞同 moyanming2013 发表于 2015-1-20 21:21
这么有规律的话,建议单步调试下,是一行一行的走代码调。
一直是单步调试。一直到 SendData函数内部给 USART->DR 寄存器附的值都是正确的,但是输出就不对了。 wambob 发表于 2015-1-20 18:27
用printf +串口助手看看
printf出来的也是错误数据,跟串口助手的值一样。 AnswerRaul 发表于 2015-1-21 09:48
printf出来的也是错误数据,跟串口助手的值一样。
先单独调试好串口后,再把串口模块+到你的程序里,再调试 考虑一下电平转换的问题,PC和STM32之间怎么连接的?
页:
[1]
2