新手上路
- 积分
- 25
- 金钱
- 25
- 注册时间
- 2023-7-23
- 在线时间
- 5 小时
|
我用stm32cubemx生成的串口,在串口接收回调函数里写了一段接收字符串的函数,以\r\n结尾判断是否接收结束
然后将接收的内容再串口发出检查内容是否正确
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if( huart == &huart1)//判断中断源
{
uart1_buf[uart1_recive_count++]=g_ucUsart1ReceiveData;//uint8_t g_ucUsart1ReceiveData保存保存串口一接收的数据
if((uart1_buf[uart1_recive_count-2]=='\r')&&(uart1_buf[uart1_recive_count-1]=='\n'))
{
HAL_UART_Transmit(&huart1,uart1_buf,uart1_buf[uart1_recive_count-1],0xFFFF);
uart1_recive_count=0;
}
else if(uart1_recive_count>=255)
uart1_recive_count=0;
}
}
效果无法接收到单片机发出的数组,将 HAL_UART_Transmit(&huart1,uart1_buf,uart1_buf[uart1_recive_count-1],0xFFFF);换成
sprintf((char *)c_Data,"%c",uart1_buf[0]);
HAL_UART_Transmit(&huart1,&uart1_buf[0],1,0xFFFF);
以上两句检测是否能够接收到数据,效果正常
接着重定向printf
用这个printf((char*)uart1_buf);发出数组数据发现依然没效果
但寻找问题的时候发现
想接收完直接串口发出。用HAL_UART_Transmit想直接发出数组,但是发现并没有然后数据发出
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if( huart == &huart1)//判断中断源
{
uart1_buf[uart1_recive_count++]=g_ucUsart1ReceiveData;//uint8_t g_ucUsart1ReceiveData保存保存串口一接收的数据
if((uart1_buf[uart1_recive_count-2]=='\r')&&(uart1_buf[uart1_recive_count-1]=='\n'))
{
sprintf((char *)c_Data,"a");
printf((char*)uart1_buf);
uart1_recive_count=0;
}
else if(uart1_recive_count>=255)
uart1_recive_count=0;
}
}
这样可以将printf的数组内容发出, 将sprintf((char *)c_Data,"a");删去就无效果
想知道这是什么原因,有什么可以很好解决的办法
|
|