安装好Keil MDK后,想要快速上手WB32的朋友可以直接在如下固件库路径中找到例程包进行学习。
如果想要从零开始学习,亦可根据此教程配置Keil下WB32的开发环境。
(注:本章内容主要根据《WB32F10x开发入门V1.1 》与编者自己的WB32学习经验编写,《WB32F10x开发入门V1.1 》下载链接将与本章其他资源共同放在文末,供有需要的朋友下载查阅)
3.1固件库介绍
库是开发工程的基石,了解标准库结构可以为你的编程之路打开方便之门,首先准备好WB32F10x的固件库文件压缩包(下载链接在文末)。
解压后,下图所示即为WBF10x标准库的目录结构。
Documentation 目录中存放了 WB32F10x 固件库的说明文档。
Libraries 目录中包含 CMSIS,WB32F10x_StdPeriph_Driver,WB32F10x_USBDevice_Driver 三个子目录。
其中CMSIS 目录中存放了启动文件,芯片头文件等;WB32F10x_StdPeriph_Driver 目录中存放了 WB32F10x 固件库源码文件;WB32F10x_USBDevice_Driver 目录中存放了 WB32F10x USB 设备协议栈代码。
Project 目录中包含 WB32F10x_StdPeriph_Examples 和 WB32F10x_StdPeriph_Template 两个子目录。
其中WB32F10x_StdPeriph_Examples 目录中存放了 WestBerryTech 官方提供的固件示例源码,以便客户参考(注意,在编写程序遇到困难时,建议来这个文件里寻找对应功能模块实现的例程,能为你的编程提供很大的帮助);
WB32F10x_StdPeriph_Template 目录中存放了创建工程所需要的文件模板。
Utilities 目录中存放了一些公用的源码。
3.2使用Keil MDK新建工程模板
本节内容主要讲述如何新建WB32空白工程模板,为了方便用户,亦可在文末统一下载链接下载编者整理好的模板。
1)新建一个文件夹命名为wb0001-Template用来存放整个工程,并在文件夹内新建如下图四个文件夹。
2)Doc文件夹中用来存放Readme.txt文件,可以用来攥写开发日志、引脚接口、使用注意事项等内容,可由开发者自己编写。
3)Libraries文件夹中需存放如下图所示两个文件夹
其中CMSIS由开发者新建,存放内容如下:
上图所需文件全部在我们的固件库当中,大家可能会觉得步骤很繁琐,事实上,我们只需要配置好这个新建工程模板,以后在编写其他程序时直接拷贝这个工程模板就可以直接开发WB32了。(注意!!!分清新建工程模板与WB32固件库,我们只需将WB32固件库中文件按照分类复制到新建工程模板对应文件夹中即可,全程不对WB32固件库进行改动。)
首先在CMSIS创建一个startup文件夹,接下来需要按下图路径依次打开WB32固件库的文件夹:
找到如下启动文件后拷贝到新建工程模板的CMSIS\startup文件夹中即可。
接下来我们继续拷贝固件库中其他文件放置在CMSIS文件夹下。
首先按照如下路径依次打开WB32固件库的文件夹:
找到如下文件后拷贝到CMSIS文件夹下即可。
接着按照如下路径依次打开WB32固件库的文件夹:
找到如下文件后拷贝到CMSIS文件夹下即可。
到此,CMSIS文件夹中的文件已经配置好,我们返回新建工程模板的Libraries文件夹中,此时按照如下路径依次打开WB32固件库的文件夹:
直接复制如下两个文件夹到新建工程模板的Libraries文件夹中即可(与CMSIS在同一级目录)。
4)Project文件夹中存放工程输出文件,具体内容由编译器编译时输出,开发者不用做任何改动。
5)USER文件夹中存放开发者编写的.c文件或.h头文件,我们需要在这里新建一个文本文件。
然后重命名为main.c文件(更改此类文件格式需要打开文件管理中的显示文件后缀功能,否则无法更改文本文件格式)
另外,需按照如下路径依次打开WB32固件库的文件夹:
找到如下三个文件后拷贝到USER文件夹下即可。
6)打开Keil MDK,新建项目
7)在wb0001-Template\Project目录中新建名为Template的工程。
8)选择项目使用的设备为 ARMCM3,并点击 OK。
9)此时弹出 Manage Run-Time Environment 对话框,在该对话框上点击 Cancel。
10)添加库文件之前,先建立五个新Groups。
11)向 Group 里面添加固件库文件。
向 STARTUP Group 中添加:
wb0001-Template\Libraries\CMSIS\startup\startup_wb32f10x.s
向 CMSIS Group 中添加:
wb0001-Template\Libraries\CMSIS\system_wb32f10x.c
向 FWLIB Group 中添加:
wb0001-Template\Libraries\WB32F10x_StdPeriph_Driver\src 目录中所有的.c 文件。
向 User Group 中添加:
wb0001-Template\User\main.c
wb0001-Template\User\wb32f10x_it.c
12)打开Options for Target 对话框,配置配置 Read/Only Memeory Areas 和 Read/Write Memory Areas(配置 Flash 和 SRAM 的起始地址和大小)。
13)在 C/C++选项卡中配置项目的头文件包含路径。(即包含我们在创建工程模板时所有含有.h文件的文件目录)
加入以下几个路径:
wb0001-Template\Libraries\CMSIS
wb0001-Template\Libraries\WB32F10x_StdPeriph_Driver\inc
wb0001-Template\User
14)在 Preprocessor Symbols 中加入 USE_STDPERIPH_DRIVER 和 MAINCLK_FREQ_96MHz 定义。(这两个定义的详情见后文)
15)点击 OK。至此,项目建立配置完成。接下来进行调试配置。
16)WB32F10x 是 ARM Cortex-M3 的芯片,所以可以使用支持 Cortex-M3 的调试器调试程序(比如:JLink,ULink,CMSIS-DAP 等)。
下面以 Jlink 为例演示 WB32F10x 的调试配置。
将 JLink 连接到电脑,使用 Jlink 的 SWD 接口与 WB32F10x 芯片连接,并给芯片上电。
其中,将JATG/JLINK缺口朝上,对应脚标。
如果用sw模式下载的话,只需要接:jlink的第1脚(VDD)、第7脚(TMS/SWDIO对应stm32的PA13/SWDIO)、第9脚(TCK/SWCLK对应stm32的PA14/SWCLK)、第4.6.8.10.12.14.16.18.20中的任意一个脚(地脚)、需要说明的是第15脚(RESET对应stm32的NRST)可接可不接,大家根据实际自己决定(保险起见还是建议接上)!【本段节选自CSDN博主「可乐虎」的原创文章,原文链接:https://blog.csdn.net/dcx1205/article/details/10473435】
打开 Options for Target 对话框,切换到 Debug 选项卡,选择使用 JLink 调试器,点击Settings配置调试器选项。
选择 SW 接口,可以在右侧看到 JLink 检测到了 WB32F10x 芯片,然后点击确定。
17)在 Utilities 选项卡中,进行如图所示的设置。
然后点击 Settings 按钮,打开烧录算法配置对话框,进行如图所示的配置。
如果在Downland Funcation中选择Erase Sectors,可能会导致无法下载。
18)烧录算法配置。
将 WestBerryTech 提供的 WB32F10x_256.FLM 文件复制到 Keil MDK 的安装目录中对应的文件夹下(在我的电脑上的路径是 软件(D:):\Keil_v5\ARM\Flash)
(WB32F10x_256.FLM文件将会打包放在文末下载链接中)
然后在烧录算法配置对话框中,点击 Add 按钮。
找到名为 WB32F10x 256kB Flash 的烧录算法,并点击 Add。
最后点击确定。
至此,用户可以编译,下载和调试该程序了。固件库有关配置详见下节。
3.3固件库配置详解
-
在 startup_wb32f10x.s 可配置应用程序栈和堆的大小,如下图:
-
在 wb32f10x.h 中存在两个宏定义,需要用户关注。
USE_STDPERIPH_DRIVER 定义这个宏表示应用程序需要使用固件库中的外设驱动,且会在项目中包含wb32f10x_conf.h 头文件。
HSE_VALUE 该宏用于指定 WB32F10x 芯片外接晶振的频率。默认情况下,固件库假定外部 HSE 晶振的频率是 8MHz。如果用户外接晶振不是 8MHz,务必修改或在编译器全局预定义处覆盖该定义!!! -
在 system_wb32f10x.c 中有几处定义需要用户关注。
MAINCLK_FREQ_* 这些宏定义用以配置程序在启动后芯片主时钟的频率。只能选择定义其中的一个(如果不定义任何一个,那么芯片主时钟是 MHSI)。可以在编译器全局预定义处给出定义。这些宏定义对芯片外部晶振是有要求,比如要定义 MAINCLK_FREQ_72MHz,那么芯片外部晶振频率必须是 6MHz(切记:也要覆盖 HSE_VALUE 的定义)。
VECT_TAB_SRAM 定义这个宏表示将中断向量表映射到 SRAM 中(在 SRAM 中运行的工程才需要定义这个宏)。
VECT_TAB_OFFSET 该宏用以设置中断向量表起始地址偏移(相对于 Flash 或 SRAM 的起始地址)。
文件下载地址
《WB32F10x开发入门V1.1 》、WB32F10x的固件库文件压缩包、WB新建工程模板,百度云下载地址如下:
链接:https://pan.baidu.com/s/1RhSzIz_YhWYzdqeGl0z6Lg
提取码:CSDN