STM32中断中使用HAL_Delay引起的死机分析及其解决方案
问题在使用按键配置外部中断时,使用HAL_Delay函数进行延时消抖,当进入中断时程序卡死无反应,去除HAL_Delay后恢复正常
12345678910111213141516171819void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){ if(GPIO_Pin==KEY1_Pin) { HAL_Delay(20);/* 延时一小段时间,消除抖动 */ if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==1) { HAL_Delay(20); if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==1) { printf("KEY=1\n"); } } __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); }}
原因查看HAL_Delay相关程序发现,HAL_Delay ...
Lingo速通
此为对数模一窍不通的海豹重新拾起高数的记忆
lingo的代码主要分为预定义、数据的输入、目标函数、决策变量、约束条件五个板块。
常用符号及语句算术运算符5种二元运算符:
^:乘方
*:乘
/:除
+:加
-:减
唯一1种一元运算符:
-:取反
关系运算符三种关系运算符:=,<,>。
注意:lingo中<,>分别表示小于等于和大于等于,如要A严格小于B:那么可以把它变成如下的小于等于表达式:$$A+ε<=B$$
这里ε是一个小的正数,它的值依赖于模型中A小于B多少才算不等
逻辑运算符123456789#not# ! 否定该操作数的逻辑值;#eq# ! 若两个运算数相等,则为true,否则为flase(equal);#ne# ! 若两个运算符不相等,则为true,否则为flase(not equal);#gt# ! 若左 > 右,则为true,否则为flase(greater than);#ge# ! 若左 >= 右,则为true,否则为flase(greater than or equal than);#lt# ! 若左 < 右, ...
STM32cubemx中因no debug导致的工程不能重复烧入的解决办法
暴雨天,突感一阵寒意,喝了口快乐水,大脑愈发精神,于是又敲起键盘,打下些令正人君子深恶痛绝的文字。
在cubeMX中No Debug导致的工程不能重复烧入的解决办法 试烧了一个点亮led的程序后,再次烧入就行不通了,无论怎么检查,通电,设置都没问题,而仿真器无法连接,无法下载。
显示:Error: Flash Download failed - Target DLL has been cancelled
板子似乎和废铁一样了(悲
查找资料后知道了问题所在
stm32一共有三种启动模式,对应的储存介质是芯片内置的,他们是:1.用户闪存 = 芯片内置的Flash。
2.SRAM = 芯片内置的RAM区,就是内存啦。
3.系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。
这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。
在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序,见下表 ...



