你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
tryfly 提问时间:2020-4-2 10:07 /
芯片: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);
  1. void MY_UART_IRQHandler(UART_HandleTypeDef *huart)
  2. {
  3.         if(USART1==huart1.Instance)
  4.         {
  5.                 if(RESET != __HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE))
  6.                 {
  7.                         __HAL_UART_CLEAR_IDLEFLAG(&huart1);
  8.                         //printf("\r\nUART1 Idle IQR Detected\r\n");
  9.                   MY_UART_IDLECallback(huart);
  10.                 }
  11.         }
  12. }

  13. void MY_UART_IDLECallback(UART_HandleTypeDef *huart)
  14. {
  15.         HAL_UART_DMAStop(&huart1);
  16.         uint8_t data_length=BUFFER_SIZE-__HAL_DMA_GET_COUNTER(&hdma_usart1_rx);
  17.        
  18. cmd_chuli(receive_buff,data_length);//就是在这个函数里面处理收到的命令。
复制代码


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

收藏 评论1 发布时间:2020-4-2 10:07

举报

1个回答
陌路夕颜 回答时间:2020-4-3 09:41:10
个人觉得,你应该在线调试一下串口数据是否收全了,发送是否成功,data_length是否越界

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版