大家好,我最近用stm8S103接收串口数据时,任何大小的数据包末尾的数据总是会重复接收到最后一个字节,比如我发送 01 02 03,单片机会接收到01 02 03 03,我发送01 02 03 04 05 06,单片机会接收到01 02 03 04 05 06 06。请问有没有遇到过类似问题的? 我的程序关键部分如下: 时钟部分: CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV2); 串口初始化部分: UART1_DeInit(); UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_RX_ENABLE); UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE); 串口中断部分: u8 x, ch; UART1_ClearITPendingBit(UART1_IT_RXNE); x = UART1->SR; ch = UART1->DR; //test_counter++; GPIO_WriteReverse(GPIOA, GPIO_PIN_3); if (RxCounter == 0) { if (ch == 0x55) { RxBuffer[0] = ch; RxCounter = 1; } else { RxCounter = 0; } } else { . . . } |
你好,你的意思是波特率需要自己再调整一下吗?固件库设置出来的可能有偏差?
波特率是一样的,上位机发送的数据格式与单片机也一样!
UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);
应该用
UART1_ITConfig(UART1_IT_RXNE, ENABLE);
你好,这个地方我之前也这样改过,也是不行,问题还是存在啊!
cUART1::cUART1(uint32_t BaudRate)
{
// 波特率 数据位:8 停止位:1 无检验位
UART1_Init(BaudRate, UART1_WORDLENGTH_8D, UART1_STOPBITS_1,
UART1_PARITY_NO,UART1_SYNCMODE_CLOCK_DISABLE,UART1_MODE_TXRX_ENABLE);
// 中断类型设置:接收和发送中断类型使能
UART1_ITConfig(UART1_IT_RXNE, ENABLE);
// 中断使能
UART1_Cmd(ENABLE);
}
void cUART1::SendByte(uint8_t c)
{
UART1_SendData8(c);
while (RESET == UART1_GetFlagStatus(UART1_FLAG_TXE));
}