芯片: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接收中断,也不懂怎么调试。
请问大家,我应该怎么办呢?
|
评分
查看全部评分