接上篇,搭建完开发环境后,我们还要继续工作。
官方合作的开发板刚好有STM32F407,我准备试一下开发板的demo,虽然我用的不是他们的开发板。
先下载以下3份代码:
https://gitee.com/openharmony/device_board_talkweb/tree/OpenHarmony-v3.2-Beta5/
https://gitee.com/openharmony/vendor_talkweb/tree/OpenHarmony-v3.2-Beta5/
https://gitee.com/openharmony/device_soc_st/tree/OpenHarmony-v3.2-Beta5/
device_board_talkweb下载后,要解压到://device/board/talkweb
device_talkweb下载后,要解压到://vendor/talkweb
device_soc_st下载后,要解压到://device/soc/st
准备好后,我们再运行hb set可以在列表里看到talkweb的信息,选中niobe407。
根据开发板的文档,还要进入kernel/liteos_m,进行make menuconfig选择board和applications。
然后执行hb build编译试一下。
编译成功后,就在out下面能找到OHOS_Image.bin
用JLINK下载OHOS_Image.bin后,串口什么反应也没有。
由于硬件差异,需要根据自己的硬件来修改时钟配置和串口引脚。
修改里面的参数。
/device/board/talkweb/niobe407/liteos_m/bsp/src/main.c
主要是PLL和GPIO。
//板子晶振是25M的,如下修改
#define BAUDRATE 115200
#define NIOBE_PLLM 25
#define NIOBE_PLLN 336
#define NIOBE_PLLQ 7
#define NIOBE_DELAY 1000
修改后,再次编译下载,还是没有反应。
经过一番调查后,发现这demo还编译了一个bootloader,这个bootloader什么也没做,只负责跳转到0x08010000。
参见:/device/board/talkweb/niobe407/liteos_m/bootloader/src/bootloader.c
最终bootloader合并app后,生成的文件名是:OHOS_Image_allinone.bin
用JLINK下载这个bin文件,终于在串口看到日志打印信息了。
*************************************************************
████████╗ █████╗ ██╗ ██╗ ██╗██╗ ██╗███████╗██████╗
╚══██╔══╝██╔══██╗██║ ██║ ██╔╝██║ ██║██╔════╝██╔══██╗
██║ ███████║██║ █████╔╝ ██║ █╗ ██║█████╗ ██████╔╝
██║ ██╔══██║██║ ██╔═██╗ ██║███╗██║██╔══╝ ██╔══██╗
██║ ██║ ██║███████╗██║ ██╗╚███╔███╔╝███████╗██████╔╝
╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚══╝╚══╝ ╚══════╝╚═════╝
Welcome to use Niobe407 development board!
Hardware version: 1.0.0
Software version: 1.0.0
*************************************************************
entering kernel init...
hilog will init.
hievent will init.
hievent init success.
Entering scheduler
hiview init success.
[HDF:E/HDF_LOG_TAG]DeviceManagerStart in
printf error!
printf error!
[HDF:I/gpio_manager]GpioManagerAdd: start:0 count:6 added success
[HDF:D/HDF_LOG_TAG]PlatformManagerAddDevice: add dev:(null)(0) to PLATFORM_MODULE_GPIO success
[HDF:D/HDF_LOG_TAG]PlatformDeviceAdd: add dev:(null)(0) success
虽然到此代码在我的STM32F407上面跑起来了,但还有满脑子问号需要进一步学习和调查。