根据描述,发送数据时会触发串口1的发送中断,并且立即进入串口1的接收中断来处理返回数据。这可能是因为串口1的发送和接收中断优先级设置不当,导致发送中断优先级高于接收中断,导致立即进入接收中断。
为解决这个问题,可以尝试修改串口1的中断优先级设置,确保接收中断的优先级高于发送中断。可以使用`NVIC_Init()`函数来配置中断优先级。先将发送中断禁用,发送数据完成后再启用。例子代码如下:
```c
// 先禁用串口1的发送中断
USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
// 发送数据
USART_SendData(USART1, mydata2);
// 等待发送完成
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
// 启用串口1的发送中断
USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
```
另外,确保串口1的接收中断处理函数中,正确地向串口3发送响应数据。如果仍然无法解决问题,可能需要检查其他代码逻辑或硬件连接是否有问题,以进一步排查原因。
根据描述,发送数据时会触发串口1的发送中断,并且立即进入串口1的接收中断来处理返回数据。这可能是因为串口1的发送和接收中断优先级设置不当,导致发送中断优先级高于接收中断,导致立即进入接收中断。
为解决这个问题,可以尝试修改串口1的中断优先级设置,确保接收中断的优先级高于发送中断。可以使用`NVIC_Init()`函数来配置中断优先级。先将发送中断禁用,发送数据完成后再启用。例子代码如下:
```c
// 先禁用串口1的发送中断
USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
// 发送数据
USART_SendData(USART1, mydata2);
// 等待发送完成
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
// 启用串口1的发送中断
USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
```
另外,确保串口1的接收中断处理函数中,正确地向串口3发送响应数据。如果仍然无法解决问题,可能需要检查其他代码逻辑或硬件连接是否有问题,以进一步排查原因。
举报