|
硬件stm32f103vc
功能通过模拟开关切换采集adc共1024个,也就是十六进制2048字节,然后转化为浮点型,通过接收不同串口命令,发送十六进制或者发送字符串。
故障现象,串口助手自动发送请求浮点型字符串(用Printf打印),间隔500ms就开始卡死了,间隔越短越容易卡死,但是发送数据请求十六进制ADC值却没问题。
自己做过定时printf打印 证明发送没问题
各种清标记位,加__HAL_UNLOCK(),故障还是存在,烦请各位看下是啥问题,部分代码如下
主函数中串口发送
if(k == 0xF0)
{
k = 0;
PrintSysinfo();
}
if(k == 0xF1) // 串口接收不会卡死,串口助手自动发送间隔可以到50ms 100 ms都不会卡死,每请求一次单片机发送2048字节
{
k = 0;
HAL_UART_Transmit(&huart2,(u8 *)&ADC_TotalBuffer,2048,0xFFFF);
}
if(k == 0xF3) // 串口接收卡死,串口助手自动发送间隔500ms都会几秒后卡死,时间越长越不容易卡死,每请求一次单片机发送1024个字符串。
{
printf("\r\n");
printf("-------------------------------------------------------------------------------------------------------------------------------");
k = 0;
printf("\r\n");
for(H = 0;H <= 31;H ++)
{
for(V = 0;V <= 31;V ++)
{
printf("%.1f ",Vot_TotalBuffer[V][H]);
}
}
printf("\r\n");
printf("-------------------------------------------------------------------------------------------------------------------------------");
}
串口接收中断
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(HAL_UART_Receive_IT(&huart2, (uint8_t *)&RxBuffer, 1) != HAL_OK)
{
huart2.RxState = HAL_UART_STATE_READY;
__HAL_UNLOCK(&huart2);
}
if (__HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_PE) != RESET)
{
HAL_UART_Receive_IT(&huart2,RxBuffer,1);
__HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_PE);
}
if (__HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_ORE) != RESET)
{
HAL_UART_Receive_IT(&huart2,RxBuffer,1);
__HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_ORE);
}
if (__HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_FE) != RESET)
{
HAL_UART_Receive_IT(&huart2,RxBuffer,1);
__HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_FE);
}
if (__HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_TC) != RESET)
{
HAL_UART_Receive_IT(&huart2,RxBuffer,1);
__HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_TC);
}
if(__HAL_UART_CLEAR_FLAG(&huart2, UART_IT_RXNE) != RESET)
{
__HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_RXNE);
__HAL_UART_CLEAR_FLAG(&huart2, UART_IT_RXNE);
HAL_UART_Receive_IT(&huart2,RxBuffer,1);
}
HAL_UART_IRQHandler(&huart2);
if(*RxBuffer == 0xF0)
{
k = 0xF0;
}
if(*RxBuffer == 0xF1)
{
k = 0xF1;
}
if(*RxBuffer == 0xF2)
{
k = 0xF2;
}
if(*RxBuffer == 0xF3)
{
k = 0xF3;
}
}
|
|