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

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

[复制链接]
sos博 提问时间: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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版