在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口使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)