在写一个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);
- }
复制代码
串口发送数据调试过程截图
串口调试助手收到数据截图
求大神帮忙分析一下问题可能出现再哪些地方。
|
发一个字节都不对,每个字符的高位都会变成E,低位随机
这么有规律的话,建议单步调试下,是一行一行的走代码调。
一直是单步调试。一直到 SendData函数内部给 USART->DR 寄存器附的值都是正确的,但是输出就不对了。
printf出来的也是错误数据,跟串口助手的值一样。
先单独调试好串口后,再把串口模块+到你的程序里,再调试