1. 新建基于寄存器开发的PY32F002B工程

(1)建立存放工程的文件夹

新建文件夹,文件名为“PY32F002BProject”,以后的工程都存放在该文件夹下,这样方便工程管理。PY32F002B工程可参照以下目录创建:

一级目录

二级目录

三级目录

PY32F002BProject

工程名称(根据具体作用命名)

Project(通用项目名称)

(2)打开Keil5软件新建并保存工程

点击Project---New uVision Project---工程存放路径存放至刚新建的文件夹下。在此路径需要再新建一个文件夹用于存放本次工程。---工程文件名推荐使用开发板的名称:“PY32F002B”。然后在这个子目录下建立子文件夹“MDK_ARM”。工程具体的作用可以在文件夹名称中进行说明,比如“PY32F002B工程模板”。文件夹的名称是很方便改的,但项目名称不容易更改。

选择器件型号

Software Packs--Puya---PY32F002B--- PY32F002B。

(3)点击OK后会弹出一个Manage Run-Time Environment的窗口,这是Keil软件的一个新建工程小助手,可以帮助快速新建工程,暂时不需要该助手,关闭即可。

(4)现在看看[MDK_ARM]目录下的包含 3 个文件夹和 2 个文件。

这里的3 个文件夹是 MDK自动生成的,可以删掉或者直接不用管。【PY32F002B.uvprojx】是工程文件,不能删除!

5、接下来,在【PY32F002BProject】工程目录下面,新建 3 个文件夹 CORE,OBJ,,以及FWLib。

【CORE】 用来存放核心文件和启动文件 ;

【HAL】用来存放PY32F002B官方提供的库函数源码文件;

【CODE】 函数文件 main.c ,以及其他包括 py32f002b_it_c等等。 ;

【MDK_ARM】除了存放工程文件.

【Users】存放要实现的功能和作用的代码

6、将官方的例程的源码文件复制到我们的工程目录文件夹【User】下面。打开官方固件库包,定位到之前准备好的 PY32F002B开发板测试程序例程的目录:将测试程序下User的Inc,Src路径下。将目录下的 src ,inc 两个文件复制到刚刚建立的 【Code】文件目录下。src 是存放固件库的 .c 文件;inc 是存放对应的 .h 文件。

7、将官方例程下的Drivers中的CMSIS和PY32F002B_HAL_Driver复制进我们的core,里面用来存放核心文件和启动文件。

8、将官方例程下的User_Drivers中的User_LED和User_System_Clock_Config以及User_USART1复制进我们的Users,里面存放要实现的功能和作用的代码。

9、前面的 8 个步骤,将需要的固件库文件复制到了工程目录【PY32F002BProject】对应的文件夹下,接下来将这些文件加入到工程中去。

右键点击 【Target1】 - 【Manage Projec Items】。

10、 接着上一步,再对话框的 Project Targets一栏,将 Target 修改为 Tempalte , 然后再 Groups 一栏 删掉 Source Group1, 建立三个Groups:Core,Hal,Code,Users。然后点击【OK】,可以看到我们的Target 名称已经修改。

11、将之前复制到对应目录的文件添加进工程中。将Core的核心文件和启动文件文件添加进来:启动文件

核心文件

添加hal中的文件,从PY32F002B_HAL_Driver中的Src添加

再添加主函数

同样的方法, Users下面添加【Users】需要的文件。

把这三个文件夹的.c文件都添加进去

12、勾选 【Great HEX File】

选择好编译器

选择好正确的调试器

这个复位也要勾选,不然要在开发板上手动复位

14、配置 头文件路径。

点击 MDK 主界面左上角的 编译 按钮。

报错:头文件路径找不到。

点击魔术棒,选择 【C/C++】选项下的 Include Path 右侧的三个点,点击进去,添加头文件。把所有函数的头文件添加进去

注意:1.这里的路径是定位到 inc 目录下面,不要弄错。

2.工程中所有引用到了的头文件路径必须在这里包含。并且是包含到最后一级目录。

16、接下来,再来编译工程,又有很多同样的错误。这是为什么呢?

这是因为库函数在配置和选择外设的时候通过宏定义来选择的,所有需要配置一个 全局的宏定义变量。

填写USE_HAL_DRIVER,PY32F002Bx5到 Define 输入框内,然后点击 【OK】。

重要的预编译全局宏定义标识符:

USE_HAL_DRIVER,PY32F002Bx5 中间要用逗号“,”隔开。

这个宏定义标识符是干嘛的?

这是因为库函数在配置和选择外设的时候通过宏定义来选择的,所有需要配置一个 全局的宏定义变量。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐