sos博 发表于 2020-4-2 10:07:28

该如何处理串口命令问题?

芯片:stm32F0库:cube HAL
问题:串口处理命令
1,接收down update\r
2,发送yes\r
3,接收ok\r


1,接收down blink\r
2,发送yes\r
3,接收ok\r



每次都是这样和上位机通话的,请问应该用什么逻辑处理呢?
我当前的方法:
1,采用DMA+串口接收中断。
2,在void USART1_IRQHandler(void)里加入MY_UART_IRQHandler(&huart1);
void MY_UART_IRQHandler(UART_HandleTypeDef *huart)
{
        if(USART1==huart1.Instance)
        {
                if(RESET != __HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE))
                {
                        __HAL_UART_CLEAR_IDLEFLAG(&huart1);
                        //printf("\r\nUART1 Idle IQR Detected\r\n");
                  MY_UART_IDLECallback(huart);
                }
        }
}

void MY_UART_IDLECallback(UART_HandleTypeDef *huart)
{
        HAL_UART_DMAStop(&huart1);
        uint8_t data_length=BUFFER_SIZE-__HAL_DMA_GET_COUNTER(&hdma_usart1_rx);
       
cmd_chuli(receive_buff,data_length);//就是在这个函数里面处理收到的命令。

3,cmd_chuli(receive_buff,data_length);//就是在这个函数里面处理收到的命令。
4,许多命令是在3里收到就直接发送
5,其他命令是收到就设置flag,然后回main函数的while里面判断执行
void cmd_chuli(receive_buff,data_length)
{
if(strstr(收到升级命令))
{升级flag=1,串口发送yes}
if(strstr(收到点灯命令))
{点灯flag=1,串口发送yes}
if(strstr(收到OK命令))
{
if(升级flag==1){__disable_irq();NVIC_SystemReset();}
if(点灯flag==1)
{设置全局灯状态为1}
}
}我现在遇到问题了,能收到一条命令,然后就卡死,不知道程序在干什么了。
因为是有boot和本程序,本程序运行地址不是0x08000000,并且是串口dma接收中断,也不懂怎么调试。
请问大家,我应该怎么办呢?

陌路夕颜 发表于 2020-4-3 09:41:10

个人觉得,你应该在线调试一下串口数据是否收全了,发送是否成功,data_length是否越界
页: [1]
查看完整版本: 该如何处理串口命令问题?