STM32F030串口数据丢失问题
这两天调试F030的串口,cubemx配置,2400波特率、8、1,HAL库,用(HAL_UART_Receive_IT(&huart1,(uint8_t *)aRxBuffer,1),启动中断,接受1字节,进入回调函数,后续需要在回调中处理帧识别等操作,发现串口中断接受只能收前2字节数据,从第3字节起变为00,很是烦恼int main(void)
{
xxxxxxx
if(HAL_UART_Receive_IT(&huart1,(uint8_t *)aRxBuffer,1)!=HAL_OK)
Error_Handler();
while (1)
{
if(Uart1Ready_R==SET)
{
Uart1Ready_R=RESET;
Txtemp=Rx_count_UART1;
Rx_count_UART1=0;
Uart1_Send(Rxbuff, 10);
memset(&Rxbuff, 0, sizeof(Rxbuff) / sizeof(uint8_t));//缓存清理
}
}
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if( huart == (&huart1))
{
UNUSED(huart);
Rxbuff=aRxBuffer;
Rx_count_UART1++;
if(Rx_count_UART1==10)
{
Uart1Ready_R=SET;
}
HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 1);
}
}
在HAL_UART_RxCpltCallback中增加
__HAL_UART_CLEAR_IDLEFLAG(&huart1);
__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
试试看
参考
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if (huart->Instance == USART1)
{
uart1_RxBuff = uart1_Rx_Temp;
HAL_UART_Receive_IT(huart, (uint8_t *)&uart1_Rx_Temp, 1);
if (++uart1_Rx_Count >= RECEIVELEN)
{
uart1_Rx_Count--;
}
__HAL_UART_CLEAR_IDLEFLAG(&huart1);
__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
}
} 串口接收我也调试了好几天,因为发送端经常发送不定长度,把我真的搞晕了。 289466080 发表于 2019-5-23 16:23
在HAL_UART_RxCpltCallback中增加
__HAL_UART_CLEAR_IDLEFLAG(&huart1);
__HAL_UART_ENABLE_IT(&hu ...
你调试好了么,加了这两句,还不行,卡机触发关门狗reset了 sammychen 发表于 2019-5-23 17:25
你调试好了么,加了这两句,还不行,卡机触发关门狗reset了
https://www.stmcu.org.cn/module/forum/thread-620624-1-1.html
參考我这个不定长也可以,但是最大值时要重置,我用的STM32F030F4P6
还有一个比较好的我先整理下 本帖最后由 sammychen 于 2019-5-24 08:55 编辑
感谢各位,此问题暂时已经解决,实际上数据已经成功接收了,问题出在发送返回的时候,因为使用中断发送,然后立即清理缓存,此时刚发送2个字节,后面的字节还未发送是就被清理掉了。后续按需要加入帧的检测再测试看看。
Uart1_Send(Rxbuff, 10);
memset(&Rxbuff, 0, sizeof(Rxbuff) / sizeof(uint8_t));//缓存清理
页:
[1]