你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
安 发表于 2017-6-2 15:04 楼主看一下,接收完成后是否就关闭了中断。
安 发表于 2017-6-2 16:46 用HAL比较少,我还是用的标准库,我也没有合适的解决方法。修改办法两种,一种该驱动,接收完成也不关闭中 ...
张亚飞 发表于 2017-6-2 16:31 肯定是关了中断的,不然也不会每次在回调函数里边/HAL_UART_Receive_IT(&huart2,Uart2Data,1); 开启下一 ...
安 发表于 2017-6-3 09:51 我改过是可以的。可以通过判断接收剩余字数,这样来确定当前已经接收到多少。 ...
深谷幽泉 发表于 2017-6-4 19:19 DMA +空闲中断接收数据是正解,不过没试过你们说的cube库,我都是用的标准库 ...
安 发表于 2017-6-5 08:57 我是把下面代码中的关闭中断部分 __HAL_UART_DISABLE_IT(huart, UART_IT_RXNE);去掉了。 if(--huart->RxXf ...
安 发表于 2017-6-5 09:38 这样改就会导致一直在收数据,执行一次就可以了。
张亚飞 发表于 2017-6-5 10:35 我是那么改的驱动,为什么就是不行呢。 怎么都做不到发送几个字节就收到几个字节。 下边我贴一下代码,您 ...
肯定是关了中断的,不然也不会每次在回调函数里边/HAL_UART_Receive_IT(&huart2,Uart2Data,1); 开启下一次中断。 不知道您说这个是什么意思。 因为只接受了一个字节的数据就关闭中断了,所以后边的数据就进不来了?
HAL_UART_Receive_IT(&huart1,&Rx2Buffer,sizeof(Rx2Buffer))
改驱动的方式试过了吗? 我刚才试了下接收完成不关闭中断,好像也没什么区别,不知道哪里的问题。 第二种定义一个大的缓冲区,如果不够接受函数的字节数的话得一直在那等着吧。
我觉得每次中断后,没有关闭中断,执行这个函数 HAL_UART_Receive_IT(&huart2,Uart2Data,1); 只是重新设置了下一个数据存放的位置还是从Uart2Data[0] 开始。
能否贴一下代码,现在工程改的有点乱即使改对了也可能某个地方导致接收中断出现问题,间接导致改驱动不成功。 谢谢。
if(--huart->RxXferCount == 0)
{
__HAL_UART_DISABLE_IT(huart, UART_IT_RXNE);
/* Check if a transmit process is ongoing or not */
if(huart->State == HAL_UART_STATE_BUSY_TX_RX)
{
huart->State = HAL_UART_STATE_BUSY_TX;
}
else
{
/* Disable the UART Parity Error Interrupt */
__HAL_UART_DISABLE_IT(huart, UART_IT_PE);
/* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */
__HAL_UART_DISABLE_IT(huart, UART_IT_ERR);
huart->State = HAL_UART_STATE_READY;
}
HAL_UART_RxCpltCallback(huart);
return HAL_OK;
}
标准库的接收不用定长接收吧。
这样改了有别的副作用吗? 比如影响发送。如果关闭了中断的话,那么接收完数据也就没必要再HAL_UART_Receive_IT(&huart1,&RxData,1); 执行这个函数开启下一次中断了吧。
我是那么改的驱动,为什么就是不行呢。 怎么都做不到发送几个字节就收到几个字节。 下边我贴一下代码,您帮忙看下有问题嘛。
Uart2Data 是 uint8_t UartData[20];