Zephyr版本号:2.2.0
开发板:STM32F429IGT6(野火STM32F429挑战者 V2开发板)
开发环境:Windows 7 64位
这里选择的是Zephyr当前最新的Release版本2.2.0进行说明的。
1、修改代码
前面文章的操作,虽然在Windows下能够成功的编译STM32F429的工程,但是却不能在野火挑战者V2开发板上运行,因为Zephyr代码中的STM32F429硬件和野火的外围硬件不一样(其实CPU也有一些差异)。主要体现在外部晶振,时钟的配置以及MPU上面(野火挑战者V2开发板使用的CPU是STM32F429IGT6,不带MPU功能)。
进入到 boards/arm/stm32f429i_disc1 文件夹中,然后修改文件 stm32f429i_disc1_defconfig,需要修改的内容如下:
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=180000000 CONFIG_ARM_MPU=n CONFIG_CLOCK_STM32_HSE_CLOCK=25000000 CONFIG_CLOCK_STM32_PLL_M_DIVISOR=25 CONFIG_CLOCK_STM32_PLL_N_MULTIPLIER=360
在 stm32f429i_disc1_defconfig 文件的末尾,添加如下的内容(该内容的含义是编译出的代码不进行优化,这样便于调试):
CONFIG_NO_OPTIMIZATIONS=y
修改文件 board.cmake,需要修改的内容如下:
board_runner_args(jlink"--device=STM32F429IG""--speed=4000")
2、编译HelloWorld应用
确定命令提示符的路径在Zephyr2.2.0源代码目录中,执行下述命令:
westbuild-pauto-bstm32f429i_disc1samples/hello_world
编译成功的输出信息如下:
3、下载程序到开发板
确保Windows中安装了JLink驱动,并且将JLink驱动的路径(JLink.exe所在的路径)添加到系统环境变量的Path中。我这里安装的是Jlink V6.48a,其路径为:C:Program Files (x86)SEGGERJLink_V648a。
如果没有将JLink驱动的路径添加到环境变量中,下载程序时会出现类似的错误:FATAL ERROR: required program JLink.exe not found; install it or add its location to PATH。
将开发板上电,连接好JLink调试器,连接好串口线并且打开串口调试助手,然后执行下述命令将程序烧写到开发板中:
westflash--runnerjlink
程序下载成功之后,会在串口调试助手中打印出信息,如下图所示:
4、使用GDB调试程序
程序下载成功之后,执行命令:west debug --runner jlink(该命令会自动打开JLink GDB Server,不需要提前手动打开JLink GDB Server),可以使用GDB调试Zephyr,先前的镜像不能成功打印信息,我也是通过这个命令来调试Zephyr,最终定位时钟参数问题的。
接下来的一篇文章,会讲述如何使用Eclipse来调试Zephyr,虽然也是使用的GDB,但是调试更加的方便,能够手动添加断点,添加观察的变量,随意切换文件