个人操作:
第一步:新建文件目录
第二步:引入工程需要的头文件
完成以上两步后,Proj1文件夹中应该有如下内容:
第三步:在MDK中设置头文件和汇编引导文件的存放路径
选择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.新建一个文件
步骤六:编译,调试,并修改错误
点击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文件: