本帖最后由 mcbot 于 2017-10-30 14:22 编辑
一、单片机型号 STM32F103C8T6
二、串口初始化如下
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure USART1 RX as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_InitTypeDef USART_InitStructure;
/* USART Format configuration ------------------------------------------------------*/
USART_InitStructure.USART_BaudRate = 1200;
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);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
/* Enable the USARTy */
USART_Cmd(USART1, ENABLE);
USART_ClearFlag(USART1, USART_FLAG_TC);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
三、问题:
设置为8N1,与电脑串口助手通信,电脑串口助手也设置成8N1,结果总是丢数,
电脑发送 1234567890abcdefghijklm
单片机收到 1234567890bcdefghijkm
但是如果把电脑串口设置成8N1.5 或者8N2,就不会丢数。
在波特率从1200 9600 115200都是这种情况。
求大神指点,是哪里的问题?
为什么我单片机设置8N1,电脑设置成8N1.5或者8N2才能保证电脑发出的数据,单片机全部收到?如果我电脑也设置成8N1,单片机就会丢固定位置的数!没有修改过底层库文件、
中断只有一个systick10ms一次,再就是这个USART1接收中断。
系统主频72MHZ,换过一个以前用的没问题的晶振,还是同样现象,应该和晶振偏差无关。如果和晶振偏差有关,那么降低通信波特率就应该解决了
问题已经解决:接收中断中发送送数据,结果影响了数据的接收!!!
|