keil中使用stlink调试stm32点击运行时程序没跑起来

keil中使用stlink调试stm32点击运行时程序没跑起来,第1张

在keil中使用stlink调试时,点击运行,程序始终跑不起来,可能的运行是:在上一次调试中,有程序运行错误,例如:数组访问越界,导致keil中的项目工程文件出现错误,所以跑不起来,可以新建工程解决该问题,问题主要出现在keil的工程文件上

有问题的那个程序

u8 ReadValue=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10);

只在上面那条指令采集了一次按键数据。

等到执行到 while(!ReadValue);//等待按键被放开 这条指令时

数据仍然是上次采集到的那个值代表按键按下,(!ReadValue)这个值永远成立,所以无法代表按键断开。所以程序一直卡死在这条指令上。如果要通过就必须在判据里重新读取按键状态,像正确的程序那样用这样的指令

while(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10));//等待按键被放开

另外因为你只读取了一次按键状态,所以下面那么多一堆软件消除抖动的程序白写了。

综上,正确的程序在每个判断的时刻都要重新读取下按键状态。

stm32的调试接口SWD要配置下载器才可以既有下载功能又有io功能。

比较常用的是Jlink下载器 ,这种下载器有一个缺点就是使用的Jtag 20PIN接口,太多的PIN会导致一些小型的PCB板很拥挤,也会增加布线的难度。 而使用SWD接口下载调试,只需要要使用4个PIN:  GND, RST, SWDIO, SWDCLK ,而且下载速度可以达到10M/s,优势显而易见。

打开工程OPTION设置:

因为USART_InitTypeDef结构体里面就没有你下面哪些呀,你下面那些CLOCK CPOL CPHA都是USART_ClockInitTypeDef结构体里面的。。。。。你仔细看库函数定义了么。

首先,你在

void HardFault_Handler(void)

{

/ Go to infinite loop when Hard Fault exception occurs /

while (1)

{

}

}

里面设置一个断点,看程序运行的时候会不会进去,进去则说明你的程序逻辑上有问题,有可能是数组越界之类的错误;

其次,如果没有进去,你需要量一下boot0和boot1的电平,看是不是正常的flash内启动模式。

我之前也遇见过类似的问题,发现时开发板上boot前的一个三极管击穿了所以导致启动模式不对,希望对你有所帮助!

以上就是关于keil中使用stlink调试stm32点击运行时程序没跑起来全部的内容,包括:keil中使用stlink调试stm32点击运行时程序没跑起来、请教一个stm32程序:我写了一个按键控制LED灯翻转,调试成功的程序如下:、stm32的调试接口SWD如何配置既可以下载程序又可以当一般IO口使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9859710.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存