
个人操作:
第一步:新建文件目录
- 在桌面上新建了一个文件夹 STM32,用于存放后续的各种STM32工程
- 在STM32文件目录下,建立存放第一个项目的文件夹 Proj1
- 进入Proj1,创建文件夹 USER,用于新建第一个项目文件
- 在USER同级目录下,创建存放启动引导文件.S和C语言头文件的文件夹INCLUDE
第二步:引入工程需要的头文件
- 将下面图片中的文件全部复制到INCLUDE目录下:(在U盘的电控文件目录中的STM32F4对应固件包)
- 如果手上没有1,可以去官网下载最新版本的:参考:STM固件包官网下载(找到对应芯片固件包,例如STM32F4)
- 也可以下载常用的工具CubeMX,这个软件可以方便地管理固件包下载以及自动更新,参考:官网下载

完成以上两步后,Proj1文件夹中应该有如下内容:

第三步:在MDK中设置头文件和汇编引导文件的存放路径
- 打开MDK5,开始创建工程

- 选择工程存放目录,选择之前的USER文件目录,对工程命名为proj1

- 对工程选择对应芯片,之前已经添加过固件STM32系列固件包(如果之前没有添加keil的stm32支持,参考:博客)

选择STM32F429IGTx(实验室开发板对应x=6,但是这个目前不用选)

点击OK,完成项目创建
如果此时Project窗口被误点关掉了,可以按下图再次打开

- 设置 引导启动汇编文件
双击图中Source Group 1

回到上一级的INCLUDE 目录,导入汇编文件startup_stm32f429xx.s

点击一次add,然后点击close

此时可以看到,Souce Group 下面已经有了启动文件 .s
- 设置 头文件引入和全局宏定义
右键Target 1(或者直接在上面的Project选项卡中点击Options)

点击C/C++选项卡

然后导入之前的INCLUDE文件夹位置,主义MDK不会进行递归搜索,如果INCLUDE文件夹目录下面还有有效文件夹,此时需要将其子目录也添加进来




此时就完成了头文件的添加
第四步:设置全局宏定义:

在输入框中填入:
STM32F429xx


此时添加的宏定义STM32F429xx对整个工程都可见,可见范围是最大的
步骤五:编写用户函数
1.新建一个文件

- 编写入口函数int main(void)

- 保存文件

步骤六:编译,调试,并修改错误
点击build按钮,开始进行编译
出现报错:


这里首先没有将刚才的main.c添加到工程proj1中,修正:

首先把开始的SOURCE Group 1的名字改为SETUP,显示这是一个.s的汇编引导文件
然后新建一个分组,用来存放用户编写的.c文件

新建分组,并命名为SOURCE

点击Add Files…,添加刚才写的main.c文件

添加,Add->Close

此时已经完成了添加,点击OK:

此时可以看到 Target 1下面有了两个分组:SETUP和SOURCE

再次编译:

此时进入startup_stm32f429xx.s,找到Reset handler

这段汇编代码:

Reset handler 作用为引导复位之后执行SystemInit 函数
然后执行main函数
这里,SystemInit函数(系统初始化函数)找不到是因为这个函数属于HAL库中的函数,这里是使用寄存器来新建项目,有以下两种解决办法:
1.手写这个函数

再次编译就没有问题了:

但是考虑到寄存器的代码与HAL库版本的代码的适配,通常不采用第一种方法:
第二种:
修改引导汇编文件startup_stm32f429xx.s
将有SystemInit函数引导调用的相关代码注释掉:(汇编的注释使用符号’;’)

再次编译,发现不再报错

正式开发:引入头文件”stm32f4xx.h”

引入之后,可以操作STM32的芯片中的寄存器
可以打开这个头文件的定义进行查看:

在这个头文件的定义中,可以看到这个头文件包含STM32F429的头文件:

进一步查看STM32F429的头文件:

在STM32F429的头文件中,就会含有很多有用的宏定义

此时再次进行工程的编译:

依然没有错误和警告,此时可以在工程中操作对应的寄存器了
此时一个基本的项目模板搭建完毕
最后,进行系统时钟的配置:
第六步:添加ALIENTEK 系统文件夹SYSTEM,自动完成时钟的配置:
如果不打算使用正点原子的STM32F429开发板(配有25MHz的外部晶振)进行开发,而使用其他开发板,也可以使用这个库,除了最初引入的头文件改为对应的芯片之外,还需要做三处修改以适配新的芯片的外部晶振:
//***************这里目前有点问题,找不到对应的路径了,之后回来修改*****************************\\
(修改F4去stm32f4xx.h/system_stm32f4xx.c , 修改F3去stm32f10x.h/system_stm32f10x.c)
1)修改HSE_VALUE的值
将#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
修改为 #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
2)修改PLL_M的值
将#define PLL_M 8修改为 #define PLL_M 25
3)修改STM32F407工程的Options设置
在Option for target"Flash"窗口中,选择Target页面,修改STMicroelectronics STM32F429IGTx栏中Xtal(MHz)的值为25.0

\\************************************待修改********************************************//
在文件路径:“chenhanxuan/电控/资料盘/4.程序源码/1,标准例程-寄存器版本/”下打开任意一个不带操作系统UCOS的例程:
例如复制这个SYSTEM文件夹:
AlienTek提供的一个示例工程,里面包含了其提供的SYSTEM库
链接:https://pan.baidu.com/s/1SkJVpDORx79efUqZUwN6ZQ
提取码:bht5

然后复制到之前的USER和INCLUDE的同级目录中:


然后将这个SYSTEM文件加入到项目中:
新建SYSTEM分组:

然后将SYSTEM目录下面的.c文件全部添加进来:


然后添加三个.c文件对应的.h文件到MDK中:
再次点击魔术棒打开项目管理:

添加三个.h文件所在的目录:

此时再次对工程进行编译:

此时,可以将之前的INCLUDE文件夹删掉,因为sys文件夹中,已经有了最初需要的8个头文件,不删也没有影响
然后可以使用正点原子的优化版本的引导.s文件(增强了浮点运算能力)替换掉之前的官方.s文件




///*********************************************待补充****************************************************\\
引导文件这里加上了这4行AlienTek代码,就莫名奇妙地可以进行串口通信了,之前不加这四行自己测试时没有能力向外发送信息的
目前还不知道原因,之后弄懂了再来补充
\\************************************************待补充*************************************************//
将测试的main.c文件替换内容,准备下载:

设置实验室的JLINK进行下载

勾上Reset and run:

打开串口助手监测串口:

点击load下载到开发板:

可以使用魔术棒设置output并在编译之后生成HEX文件:

再次编译:
查看生成的目标文件,发现已经有生成的.hex文件:


被折叠的 条评论
为什么被折叠?



