• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

STM32_hal库的稳定性问题

chenne 2018-09-04 浏览量:1245
while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
        while(flag)
        {
        HAL_GPIO_WritePin(GPIOAGPIO_PIN_1GPIO_PIN_RESET);
        HAL_GPIO_WritePin(GPIOAGPIO_PIN_2GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOAGPIO_PIN_3GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOAGPIO_PIN_4GPIO_PIN_SET);
        HAL_Delay(i);
        


        
        HAL_GPIO_WritePin(GPIOAGPIO_PIN_1GPIO_PIN_RESET);
        HAL_GPIO_WritePin(GPIOAGPIO_PIN_2GPIO_PIN_RESET);
        HAL_GPIO_WritePin(GPIOAGPIO_PIN_3GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOAGPIO_PIN_4GPIO_PIN_SET);
        HAL_Delay(i);
            

        
        HAL_GPIO_WritePin(GPIOAGPIO_PIN_1GPIO_PIN_RESET);
        HAL_GPIO_WritePin(GPIOAGPIO_PIN_2GPIO_PIN_RESET);
        HAL_GPIO_WritePin(GPIOAGPIO_PIN_3GPIO_PIN_RESET);
        HAL_GPIO_WritePin(GPIOAGPIO_PIN_4GPIO_PIN_SET);
        HAL_Delay(i);

            
        HAL_GPIO_WritePin(GPIOAGPIO_PIN_1GPIO_PIN_RESET);
        HAL_GPIO_WritePin(GPIOAGPIO_PIN_2GPIO_PIN_RESET);
        HAL_GPIO_WritePin(GPIOAGPIO_PIN_3GPIO_PIN_RESET);
        HAL_GPIO_WritePin(GPIOAGPIO_PIN_4GPIO_PIN_RESET);

        HAL_Delay(i);

       
       while(flag);

    }

 }


flag变量是根据外部中断进行触发反转,为什么我把while(flag)包含整个LED闪烁操作的程序的时候,可以实现暂停和继续,但是如果把while(flag)放到最后一句话后面的时候(这时候不包含上面的while(flag))就会卡住,外部中断只能触发一次,也就是说只能暂停,但是不能再次处罚反转flag,我个人认为逻辑没问题,但是while()的位置也不应该出现这种问题,我怀疑hal库的性能是不是比较差

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 你这个显然是程序哪里出了错误,才会卡住了。和性能没关系吧。和hal库的性能更没关系吧。

    错误和性能是两码事,性能差还是会运行的,不会因为性能差就出错呀。

    hal 库封装了很多东西,性能是差,但是跑你这几行代码还是绰绰有余的吧。hal 库性能和你这个问题没啥必然联系吧!

    • 发布于 2018-09-04
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:8
  • 反过来想,库的稳定性,库代码是st公司开发的,经过他们自己测试过的,发布之后又经过很多用户使用过的,也更新了很多版本了,hal库本身是个成熟的产品,不管自己水平再高,我都觉得库的稳定性比自己写的代码都强得多,多得多,你觉得呢
    • 发布于2018-09-04
    • 举报
    • 评论 0
    • 1
    • 0

chenne 回复了 一笔之名也 :你说的那两个同条件的while不是同时存在的,我是为了让大家知道我这两次不同的while的位置,所以都写了一下。 回复
chenne 回复了 一笔之名也 :你说的那两个同条件的while不是同时存在的,我是为了让大家知道我这两次不同的while的位置,所以都写了一下。 回复

  • 这个跟HAL库的性能没有关系,确定一下是否确实卡在while(flag)那里,然后看一下你flag置1的条件是什么,是否确实能触发
    • 发布于2018-09-09
    • 举报
    • 评论 0
    • 0
    • 0

  • 你要看一下你的程序卡死的地方,然后根据卡死的条件进行排查
    • 发布于2018-09-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 这种要检查你的while语句里面的条件触发语句,看你的条件是不是一直满足
    • 发布于2018-10-13
    • 举报
    • 评论 0
    • 0
    • 0

  • while(flag);前面要加括号.
    • 发布于2018-09-04
    • 举报
    • 评论 3
    • -1
    • 0
chenne 回复了 Andrewz :什么意思? 回复
chenne 回复了 Andrewz :什么意思? 回复
Andrewz 回复了 Andrewz :do{...}while(flag); 回复

  • 看你循环的次数,以及有没有语法错误
    • 发布于2018-09-04
    • 举报
    • 评论 1
    • -2
    • 0
chenne 回复了 FEItwo :没有语法错误 回复

相关问题

问题达人换一批

STM32_hal库的稳定性问题