stm32f4 串口DMA,空闲中断接收数据,单步调试成功,全速运...
本帖最后由 wangjinkui 于 2017-10-30 22:29 编辑stm32F4 使用串口DMA,空闲中断接收不定长的数据,单步调试的时候没有问题,全速运行时就出错了,出错的原因是进入中断后只收到几个数据,我想是不是时序的问题,改不过来了,请问有没有了解这是什么情况的能不能给一下指导,谢谢。相关代码如下:
主函数:
HAL_UART_Transmit(&huart2,HG1134_stop,6, 0xFFFF);//
// HAL_UART_Transmit(&huart6,HG1134_stop,6, 0xFFFF);//
__HAL_UART_DISABLE_IT(&huart3, UART_IT_IDLE); //
__HAL_UART_ENABLE_IT(&huart2, UART_IT_IDLE); //
HAL_UART_Receive_DMA(&huart2, Usart2Type.usartDMA_rxBuf, RECEIVELEN);//
while(Eph_ready == 0)
{
HAL_UART_Transmit(&huart2,HG1134_stop,6, 0xFFFF);//
HAL_Delay(1);
HAL_UART_Transmit(&huart2,HG1134_ephout,8, 0xFFFF); //
HAL_UART_Transmit(&huart6,HG1134_ephout,8, 0xFFFF); //
HAL_Delay(300);
huart2.hdmarx->State = HAL_DMA_STATE_READY;
HAL_UART_Receive_DMA(&huart2,Usart2Type.usartDMA_rxBuf,RECEIVELEN);
}
__HAL_UART_DISABLE_IT(&huart2, UART_IT_IDLE); //
HAL_UART_DMAStop(&huart2); //
HAL_UART_Transmit(&huart3,HG1134_close,7, 0xFFFF);//
__HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE); //
HAL_UART_Receive_DMA(&huart3, Usart3Type.usartDMA_rxBuf, RECEIVELEN);中断函数
:
void Usart2Receive_IDLE(UART_HandleTypeDef *huart)
{
uint32_t temp;
if((__HAL_UART_GET_FLAG(huart,UART_FLAG_IDLE) != RESET))
{
__HAL_UART_CLEAR_IDLEFLAG(huart);
HAL_UART_DMAStop(huart);
temp = __HAL_DMA_GET_COUNTER(huart->hdmarx);
Usart2Type.rx_len =RECEIVELEN - temp;
if(Usart2Type.usartDMA_rxBuf == 0x90&&Usart2Type.usartDMA_rxBuf ==0xEB&&Usart2Type.usartDMA_rxBuf ==0x45)
{
Eph_ready = 1;
Eph_len = Usart2Type.rx_len;
memcpy(Eph_buf,Usart2Type.usartDMA_rxBuf,Usart2Type.rx_len);
}
}
}
需要接收超过1000个字节的数据,全速运行的时候可以收到5个字节,单步调试的时候可以全部接收到 请问有工程师遇到这种情况吗? 用的 FreeRTOS来控制?对于串口这种收发资源,要判断状态信号量的。 感觉是接收时,没有处理溢出,只接收了第一次的数据。 :)为什么不把接收缓冲设成DMA环形,然后在任务里处理数据。我不知你接收数据的间隔多少?还有你在发送时关了接收。你可以试下只接收不发送是不是正常的
页:
[1]