Zephyr程序初探(1):LED程序及调试过程

5 篇文章 0 订阅

编译环境搭建好后开始尝试我的第一个Zephyr程序编译和运行,手里有一块stm32f103c8t的开发板,Zephyr支持nucleo_f103rb开发板,所以以此来编译我的第一个程序。

在Zephyr根目录执行

source zephyr-env.sh

例子samples\basic\blinky是一个LED闪烁的程序,先修改boards\arm\nucleo_f103rb\board.h,设置正常的LED PIN脚。

进入samples\basic\blinky目录执行

make BOARD=nucleo_f103rb

最终输出

...
AR kernel/lib.a
CC src/main.o
LD src/built-in.o
AR libzephyr.a
LINK zephyr.lnk
IRQ isr_tables.c
CC isr_tables.o
LINK zephyr.elf
BIN zephyr.bin

编译成功,使用STLINK下载到开发板上运行没反应,通过ST提供的工具查看MCU运行状态,反复run和halt, CPU始终停止在0x8000824上下,一定是这里出现了死循环,根据以往调试的经验判断应该就是时钟设置的不对,到out目录下查看有什么可以参考的文件,打开zephyr.lst,哇,就是它,所有的地址对应的代码都在这里,并且是以源码的形式呈现,我还以为会是汇编形式的文件,完全超乎我的预期。

找到这样一段:

#ifdef CONFIG_CLOCK_STM32F10X_PLL_SRC_HSE

	/* wait for to become ready */
	rcc->cr.bit.hseon = 1;
 800081a:	6823      	ldr	r3, [r4, #0]
 800081c:	f443 3380 	orr.w	r3, r3, #65536	; 0x10000
 8000820:	6023      	str	r3, [r4, #0]
	while (rcc->cr.bit.hserdy != 1) {
 8000822:	6823      	ldr	r3, [r4, #0]
 8000824:	0399      	lsls	r1, r3, #14
 8000826:	d5fc      	bpl.n	8000822 <stm32f10x_clock_control_init+0x5a>
	}
...

果然是和HSE有关,上下文中还有这样的判断#ifdef CONFIG_CLOCK_STM32F10X_HSE_BYPASS

查看nucleo_f103rb_defconfig文件中有这样的定义和描述:

# use HSE as PLL input
CONFIG_CLOCK_STM32F10X_PLL_SRC_HSE=y
# however, the board does not have an external oscillator, so just use
# the 8MHz clock signal coming from integrated STLink
CONFIG_CLOCK_STM32F10X_HSE_BYPASS=y

再看STM32F103的reference manual有关于时钟的介绍:



看来就是这里的问题,我的开发板与官方的nucleo_f103rb外部时钟源不同,删除nucleo_f103rb_defconfig中的CONFIG_CLOCK_STM32F10X_HSE_BYPASS=y,重新make并下载到开发板上后LED能够闪烁了,至此我的第一个Zephyr运行成功^_^

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值