一板网电子技术论坛

天南地北客
发表于: 2017-1-22 11:12:06 | 显示全部楼层

本教程主要介绍如何配置VisualGDBOpenOCD来调试STM32L0开发板的固件,使微控制器进入睡眠模式。


我们将创建一个NUCLEO-L031K6开发板的基本工程,并介绍当CPU进入休眠模式时为什么默认配置不能正常工作,以及如何在调试设置中使用特殊的复位模式来解决该问题。


1、  首先启动Visual Studio并打开VisualGDB Embedded Project Wizard

01-prjname3.png


2、  选择“Create a new project -> Embedded binary”,然后单击“Next”:

02-prjtype.png


3、  从列表中选择ARM工具链和器件型号。 本教程中使用的NUCLEO-L031K6开发板采用的是STM32L031K6微控制器:

03-device1.png


4、  使用默认的“LEDBlink”示例继续下一步:

04-sample1.png


5、  在最后一页选择“OpenOCD”,通过USB连接开发板,然后单击“Detect”自动检测调试设置:

05-debug3.png


6、  按“Finish”生成项目。 将main()函数的内容替换为以下内容:

  1. int main(void)
  2. {
  3.     HAL_Init();
  4.    
  5.     __GPIOB_CLK_ENABLE();
  6.     GPIO_InitTypeDef GPIO_InitStructure;

  7.     GPIO_InitStructure.Pin = GPIO_PIN_3;

  8.     GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
  9.     GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;
  10.     GPIO_InitStructure.Pull = GPIO_NOPULL;
  11.     HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
  12.    
  13.     for (;;)
  14.     {
  15.         HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
  16.         HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_3);
  17.     }
  18.    
  19. }
复制代码

该段代码将使器件进入睡眠模式,直到发生SysTick中断。

06-build.png


7、  按F5开始调试。 调试应该会正常启动,并且你应该能够单步调试代码:

07-debug.png


8、  按Shift-F5停止调试,然后尝试重新启动。 现在调试会失败,并且OpenOCD显示以下错误:

  1. Error: timed out while waiting for target halted
复制代码

08-problem.png

发生错误的原因是,当器件处于睡眠模式时,OpenOCD无法通过JTAG正确连接到它。


9、  现在我们将演示如何通过编辑OpenOCD配置来解决这个问题。 打开VisualGDB项目属性的Debug Settings页面,并切换到Manual setup模式:

09-debugsetting.png


10、 单击“Target”字段中的“Open”按钮,复制原始文件(例如,复制为stm32l0_reset.cfg),然后在编辑器中打开:

11-reset.png


11、 找到以reset_config开头的行,并使用以下行将其替换:

  1. reset_config trst_and_srst srst_nogate connect_assert_srst
复制代码

12-reset.png

connect_assert_rst标志将强制OpenOCD在初始连接期间重置CPU,使其脱离睡眠模式并确保调试通信成功。


12、 保存该新脚本并确保在VisualGDB项目属性中选择它:

13-newcfg.png


13、 按F5开始调试。 不管固件是否进入睡眠模式,现在调试应该可以正常工作:

14-debug.png


参考链接:

Debugging STM32L0 Firmware with Sleep Mode with OpenOCD:http://visualgdb.com/tutorials/stm32/sleep/

跳转到指定楼层
ptr2oj
发表于: 2017-3-24 10:44:05 | 显示全部楼层

呵呵你真厉害,佩服哦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 42 | 回复: 68



Archiver|手机版|小黑屋|

GMT+8, 2018-5-26 10:28 , Processed in 0.046875 second(s), 31 queries . Powered by Discuz! X3.4

YiBoard一板网 © 2015-2018 地址:河北省石家庄市长安区高营大街 ( 京ICP备16014155号 )

快速回复 返回顶部 返回列表