初级会员
- 积分
- 92
- 金钱
- 92
- 注册时间
- 2013-8-29
- 在线时间
- 14 小时
|
1金钱
现在遇到一个情况就是 使用cubeMX 生成的2个串口函数
在main函数中,while循环之前,使用
//HAL_UART_Receive_IT(&huart1, aRxBuffer, RXBUFFERSIZE);//该函数会开启接收中断:标志位UART_IT_RXNE,并且设置接收缓冲以及接收缓冲接收最大数据量
HAL_UART_Receive_IT(&huart2, aRxBuffer2, RXBUFFERSIZE);
其中
uint8_t aRxBuffer[RXBUFFERSIZE]; // RXBUFFERSIZE=1
uint8_t aRxBuffer2[RXBUFFERSIZE];
主循环中每隔20ms 调用 HAL_UART_Transmit(&huart2,SendDataBuf,sizeof(Sbuff),1000);
在中断服务函数中分别添加了红色字部分
void USART1_IRQHandler(void)
{
HAL_UART_IRQHandler(&huart1);
HAL_UART_Receive_IT(&huart1, aRxBuffer, RXBUFFERSIZE);
}
/**
void USART2_IRQHandler(void)
{
HAL_UART_IRQHandler(&huart2);
HAL_UART_Receive_IT(&huart2, aRxBuffer2, RXBUFFERSIZE);
}
回调函数中判断解析帧
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance==USART1)
{
led=~led;//(用于观察程序有没有进来)
/*解析帧*/
}
if(huart->Instance==USART2)
{
led=~led;//(用于观察程序有没有进来)
/*解析帧*/
}
}
现在的问题是,串口2的发送一直没有问题,但是回调函数中的串口2接收,接收几次后,
整个 if(huart->Instance==USART2) 都不成立了,因为只开串口的接收,led等就不闪了, 明显就是没有进入 if(huart->Instance==USART2),
断点测试,就是串口2好像就没有触发了。但是串口2的发送一直是正常发送的。
请问各位大神,我现在的问题是出在哪里?
|
最佳答案
查看完整内容[请看2#楼]
隔了这么多天,我后来调试了很多办法, 最后发现是 发送函数的问题,
HAL_UART_Transmit(&huart2,SendDataBuf,sizeof(Sbuff),1000);
这个HAL_UART_Transmit函数发送快了, 会导致串口堵塞,从而导致收不到串口的数据,我手来使用 寄存器的发送方式,就没有出现串口收不到数据的情况了
void USART1SendToData(unsigned char a[], unsigned char cnt)
{
unsigned char i;
for(i=0; iSR & 0x40) == 0);
USART1->D ...
|