[STM32] NOTE05-STM32新建寄存器版本工程模板

[STM32] NOTE05-STM32新建寄存器版本工程模板_第1张图片

个人操作:

 

第一步:新建文件目录

  1. 在桌面上新建了一个文件夹 STM32,用于存放后续的各种STM32工程
  2. 在STM32文件目录下,建立存放第一个项目的文件夹 Proj1
  3. 进入Proj1,创建文件夹 USER,用于新建第一个项目文件
  4. 在USER同级目录下,创建存放启动引导文件.S和C语言头文件的文件夹INCLUDE

 

第二步:引入工程需要的头文件

  1. 将下面图片中的文件全部复制到INCLUDE目录下:(在U盘的电控文件目录中的STM32F4对应固件包)
  2. 如果手上没有1,可以去官网下载最新版本的:参考:STM固件包官网下载(找到对应芯片固件包,例如STM32F4)
  3. 也可以下载常用的工具CubeMX,这个软件可以方便地管理固件包下载以及自动更新,参考:官网下载

[STM32] NOTE05-STM32新建寄存器版本工程模板_第2张图片

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

[STM32] NOTE05-STM32新建寄存器版本工程模板_第3张图片

 

第三步:在MDK中设置头文件和汇编引导文件的存放路径

  1. 打开MDK5,开始创建工程

[STM32] NOTE05-STM32新建寄存器版本工程模板_第4张图片

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

[STM32] NOTE05-STM32新建寄存器版本工程模板_第5张图片

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

[STM32] NOTE05-STM32新建寄存器版本工程模板_第6张图片

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

[STM32] NOTE05-STM32新建寄存器版本工程模板_第7张图片

点击OK,完成项目创建

 

如果此时Project窗口被误点关掉了,可以按下图再次打开

[STM32] NOTE05-STM32新建寄存器版本工程模板_第8张图片

  1. 设置 引导启动汇编文件

双击图中Source Group 1

[STM32] NOTE05-STM32新建寄存器版本工程模板_第9张图片

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

[STM32] NOTE05-STM32新建寄存器版本工程模板_第10张图片

点击一次add,然后点击close

[STM32] NOTE05-STM32新建寄存器版本工程模板_第11张图片

此时可以看到,Souce Group 下面已经有了启动文件 .s

 

 

  1. 设置 头文件引入和全局宏定义

右键Target 1(或者直接在上面的Project选项卡中点击Options)

 

[STM32] NOTE05-STM32新建寄存器版本工程模板_第12张图片

点击C/C++选项卡

[STM32] NOTE05-STM32新建寄存器版本工程模板_第13张图片

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

[STM32] NOTE05-STM32新建寄存器版本工程模板_第14张图片

[STM32] NOTE05-STM32新建寄存器版本工程模板_第15张图片

[STM32] NOTE05-STM32新建寄存器版本工程模板_第16张图片

[STM32] NOTE05-STM32新建寄存器版本工程模板_第17张图片

此时就完成了头文件的添加

 

第四步:设置全局宏定义:

[STM32] NOTE05-STM32新建寄存器版本工程模板_第18张图片

在输入框中填入:

STM32F429xx

[STM32] NOTE05-STM32新建寄存器版本工程模板_第19张图片

[STM32] NOTE05-STM32新建寄存器版本工程模板_第20张图片

此时添加的宏定义STM32F429xx对整个工程都可见,可见范围是最大的

 

步骤五:编写用户函数

1.新建一个文件

[STM32] NOTE05-STM32新建寄存器版本工程模板_第21张图片

  1. 编写入口函数int main(void)

[STM32] NOTE05-STM32新建寄存器版本工程模板_第22张图片

  1. 保存文件

[STM32] NOTE05-STM32新建寄存器版本工程模板_第23张图片

 

步骤六:编译,调试,并修改错误

点击build按钮,开始进行编译

出现报错:

[STM32] NOTE05-STM32新建寄存器版本工程模板_第24张图片

[STM32] NOTE05-STM32新建寄存器版本工程模板_第25张图片

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

[STM32] NOTE05-STM32新建寄存器版本工程模板_第26张图片

首先把开始的SOURCE Group 1的名字改为SETUP,显示这是一个.s的汇编引导文件

然后新建一个分组,用来存放用户编写的.c文件

[STM32] NOTE05-STM32新建寄存器版本工程模板_第27张图片

新建分组,并命名为SOURCE

[STM32] NOTE05-STM32新建寄存器版本工程模板_第28张图片

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

[STM32] NOTE05-STM32新建寄存器版本工程模板_第29张图片

添加,Add->Close

[STM32] NOTE05-STM32新建寄存器版本工程模板_第30张图片

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

[STM32] NOTE05-STM32新建寄存器版本工程模板_第31张图片

 

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

[STM32] NOTE05-STM32新建寄存器版本工程模板_第32张图片

再次编译:

[STM32] NOTE05-STM32新建寄存器版本工程模板_第33张图片

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

[STM32] NOTE05-STM32新建寄存器版本工程模板_第34张图片

这段汇编代码:

[STM32] NOTE05-STM32新建寄存器版本工程模板_第35张图片

Reset handler 作用为引导复位之后执行SystemInit 函数

然后执行main函数

这里,SystemInit函数(系统初始化函数)找不到是因为这个函数属于HAL库中的函数,这里是使用寄存器来新建项目,有以下两种解决办法:

 

1.手写这个函数

[STM32] NOTE05-STM32新建寄存器版本工程模板_第36张图片

再次编译就没有问题了:

[STM32] NOTE05-STM32新建寄存器版本工程模板_第37张图片

 

但是考虑到寄存器的代码与HAL库版本的代码的适配,通常不采用第一种方法:

 

第二种:

修改引导汇编文件startup_stm32f429xx.s

将有SystemInit函数引导调用的相关代码注释掉:(汇编的注释使用符号’;’

[STM32] NOTE05-STM32新建寄存器版本工程模板_第38张图片

再次编译,发现不再报错

[STM32] NOTE05-STM32新建寄存器版本工程模板_第39张图片

 

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

[STM32] NOTE05-STM32新建寄存器版本工程模板_第40张图片

引入之后,可以操作STM32的芯片中的寄存器

可以打开这个头文件的定义进行查看:

[STM32] NOTE05-STM32新建寄存器版本工程模板_第41张图片

 

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

[STM32] NOTE05-STM32新建寄存器版本工程模板_第42张图片

进一步查看STM32F429的头文件:

[STM32] NOTE05-STM32新建寄存器版本工程模板_第43张图片

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

[STM32] NOTE05-STM32新建寄存器版本工程模板_第44张图片

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

[STM32] NOTE05-STM32新建寄存器版本工程模板_第45张图片

依然没有错误和警告,此时可以在工程中操作对应的寄存器了

此时一个基本的项目模板搭建完毕

 

最后,进行系统时钟的配置:

第六步:添加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

[STM32] NOTE05-STM32新建寄存器版本工程模板_第46张图片

\\************************************待修改********************************************//

在文件路径:“chenhanxuan/电控/资料盘/4.程序源码/1,标准例程-寄存器版本/”下打开任意一个不带操作系统UCOS的例程:

例如复制这个SYSTEM文件夹:

AlienTek提供的一个示例工程,里面包含了其提供的SYSTEM库

链接:https://pan.baidu.com/s/1SkJVpDORx79efUqZUwN6ZQ 
提取码:bht5 

[STM32] NOTE05-STM32新建寄存器版本工程模板_第47张图片

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

[STM32] NOTE05-STM32新建寄存器版本工程模板_第48张图片

[STM32] NOTE05-STM32新建寄存器版本工程模板_第49张图片

然后将这个SYSTEM文件加入到项目中:

新建SYSTEM分组:

[STM32] NOTE05-STM32新建寄存器版本工程模板_第50张图片

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

[STM32] NOTE05-STM32新建寄存器版本工程模板_第51张图片

[STM32] NOTE05-STM32新建寄存器版本工程模板_第52张图片

然后添加三个.c文件对应的.h文件到MDK中:

再次点击魔术棒打开项目管理:

[STM32] NOTE05-STM32新建寄存器版本工程模板_第53张图片

 

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

[STM32] NOTE05-STM32新建寄存器版本工程模板_第54张图片

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

[STM32] NOTE05-STM32新建寄存器版本工程模板_第55张图片

此时,可以将之前的INCLUDE文件夹删掉,因为sys文件夹中,已经有了最初需要的8个头文件,不删也没有影响

 

然后可以使用正点原子的优化版本的引导.s文件(增强了浮点运算能力)替换掉之前的官方.s文件

[STM32] NOTE05-STM32新建寄存器版本工程模板_第56张图片

[STM32] NOTE05-STM32新建寄存器版本工程模板_第57张图片

[STM32] NOTE05-STM32新建寄存器版本工程模板_第58张图片

///*********************************************待补充****************************************************\\

引导文件这里加上了这4行AlienTek代码,就莫名奇妙地可以进行串口通信了,之前不加这四行自己测试时没有能力向外发送信息的

目前还不知道原因,之后弄懂了再来补充

\\************************************************待补充*************************************************//
[STM32] NOTE05-STM32新建寄存器版本工程模板_第59张图片

将测试的main.c文件替换内容,准备下载:

[STM32] NOTE05-STM32新建寄存器版本工程模板_第60张图片

设置实验室的JLINK进行下载

[STM32] NOTE05-STM32新建寄存器版本工程模板_第61张图片

勾上Reset and run:

[STM32] NOTE05-STM32新建寄存器版本工程模板_第62张图片

打开串口助手监测串口:

[STM32] NOTE05-STM32新建寄存器版本工程模板_第63张图片

点击load下载到开发板:

[STM32] NOTE05-STM32新建寄存器版本工程模板_第64张图片

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

[STM32] NOTE05-STM32新建寄存器版本工程模板_第65张图片

再次编译:

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

[STM32] NOTE05-STM32新建寄存器版本工程模板_第66张图片

 

你可能感兴趣的:(STM32)