本帖最后由 电子星辰 于 2018-6-6 11:19 编辑 当我用串口HAL_UART_Transmit函数定时向上位机发送数据的同时,我需要不定时不定长的接收上位机数据。我用的是HAL_UART_Receive_IT函数,当我接收频率稍高就会进不了HAL_UART_Receive_IT函数。 那么除了将__HAL_LOCK(huart),__HAL_UNLOCK(huart)语句注释,和改为用HAL_UART_Transmit_IT发送外,还有没有其它方法? 解决方案: 目前为止我已知的方法包括: 1.将接收中断改为DMA接收。2.将__HAL_LOCK(huart),__HAL_UNLOCK(huart)语句注释。 1.DMA具体解决请看该贴:https://www.stmcu.org.cn/module/forum/thread-616097-1-1.html 另外我猜测:1.不使用HAL_UART_Transmit重定向的printf,改用HAL_UART_Transmit_IT发送。2.用寄存器或标准库对printf重定向。可能也可以解决该问题,暂未验证。 |
HAL_UART_Receive_ITå½æ°é注éæé
是的,我就是这样处理的。
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(USART_RX_STA < UART_RecSize)
{
r[USART_RX_STA] = aRxBuffer;
USART_RX_STA++;
}
timer_count = 0;
if(HAL_UART_Receive_IT(&huart1,&aRxBuffer,1) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
}
点评
是的,不过我只用了串口接收中断,没用DMA和IDLE
DMA传输确实可以,谢谢你。
我用的是DMA循环接收模式,每次接收1字节,测试未出现串口接收中断的不能接收现象。
就是这样的,接收完了一个字节后,马上做判断处理