用串口1收发数据,采用中断方式收发数据,RX和TX串行工作时没有问题,也就是说接收后处理,处理后再发送,采用这样的流程数据都可正常收发
但我发现在发数据的同时又收到数据了,那么从串口TX发出来的数据就出错了,在发的同时将这些数据保存到内存中,从内存中看却又是正确的
我怀疑全双工收发时串口出问题了,不知道哪位遇到过这种事情没有,是不是可以解决,
测试代码如下,串口1采用中断方式一直向外发送数据,串口1接收中断如果接收到数据,从串口中读取后就扔掉。
这段程序上电后STM32就向计算机不停的向外发送AA,都是正常的,但一旦计算机向STM32发送大量数据,计算机接收到的就全是乱码了。
求解!!
int main(void)
{
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable USART1 Clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1 | RCC_APB2Periph_AFIO, ENABLE);
/* 配置UART1管脚 */
/* Configure USART1 Rx as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure USART1 Tx as alternate function push-pull */
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);
/* 配置UART1的配置 */
/* USARTy and USARTz configured as follow:
- BaudRate = 9600 baud
- Word Length = 8 Bits
- One Stop Bit
- No parity
- Receive and transmit enabled
- Hardware flow control disabled (RTS and CTS signals)
*/
USART_StructInit(&USART_InitStructure);
/* Configure USART1 */
USART_Init(USART1, &USART_InitStructure);
/* 配置UART1的中断 */
/* Configure the NVIC Preemption Priority Bits */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
/* Enable the USARTy Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
/* Enable USARTy Receive interrupts */
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
/* Enable the USART1 */
USART_Cmd(USART1, ENABLE);
while(1);
}
/* 中断服务程序 */
void USART1_IRQHandler(void)
{
unsigned int s;
unsigned char temp;
s = USART1->SR;
/* 接收中断 */
if(0x20 == (0x20 & s))
{
temp = USART_ReceiveData(USART1);
}
/* 发送中断 */
if(0x80 == (0x80 & s))
{
USART_SendData(USART1, 0xAA);;
}
} |