STM32
登录
直播中
贾虎世
7年用户
1662经验值
私信
关注
[问答]
怎样去新建一种基于ST官方固件库的STM32F407工程呢
开启该帖子的消息推送
STM32F407
固件库
IAR
怎样去新建一种基于ST官方固件库的
STM32
F407工程呢?详细步骤是什么?
回帖
(1)
李霞
2021-10-25 10:57:54
在建立工程之前,为了使自己的工程看起来更加清晰,方便后期的修改,分别建立不同的文件夹以存放不同类型的文件,本工程建立的文件夹如下图所示。
本文基于ST官方固件库建立STM32F407工程,详细步骤如下:
1. 官方固件库下载
官方固件库下载链接为:STM32F4xx_DSP_StdPeriph_Lib_V1.8.0.rar
2. IAR新建空工程
1. 打开IAR软件,单击 project 里面的 Create New Project,创建新的工程。
2. 创建新的工程后弹出如下窗口,点击 Empty project 后点击 OK 创建新的空的工程。
3. 点击上一步的 OK 后弹出保存界面(如下图),选择保存路径和并在下图2处填入工程的名字,本例中命名为test,然后单击 保存 。
4. 上一步保存之后点击软件上面的 全部保存 按钮,在相同的路径下写入工程的名字后单击 保存 。
5. 新建完成的空工程如下图所示 。
3. 复制添加官方文件
3.1 复制启动文件 .s
在文件夹 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0LibrariesCMSISDeviceSTSTM32F4xxSourceTemplatesiar 下找到相对应的.s启动文件,本文是基于 IAR 开发环境建立的工程,因此在iar文件夹下找相关的启动文件,如果是Keil的开发环境,则在Templatesarm 中寻找相应的启动文件。
具体使用哪个启动文件需要自己根据自己的开发板来定义,本文使用的是STM32F407开发板,可以选择startup_stm32f40_41xxx.s启动文件,将此文件复制到自己的工程目录下的bsp文件夹下(参考 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0LibrariesCMSISDeviceSTSTM32F4xxIncludestm32f4xx.h 中的定义进行选择)。
3.2 复制system相关文件
复制文件夹 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0LibrariesCMSISDeviceSTSTM32F4xxSourceTemplates 下的 system_stm32f4xx.c 到自己目录下的bsp文件夹下。
复制文件夹 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0LibrariesCMSISDeviceSTSTM32F4xxInclude 下的 system_stm32f4xx.h 和 stm32f4xx.h 文件到自己的工程目录下的bsp文件夹下。
3.3 复制底层驱动文件
复制文件夹 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0LibrariesSTM32F4xx_StdPeriph_Driver 下的 inc 和 src 文件夹到自己工程目录下的 driver 文件夹下。
3.4 复制.icf链接文件
复制文件夹 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0ProjectSTM32F4xx_StdPeriph_TemplatesEWARM 下的 stm32f4xx_flash.icf 文件到自己的工程目录下的bsp文件夹下。
3.5 复制中断和配置相关文件
复制文件夹 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0ProjectSTM32F4xx_StdPeriph_Templates 下的 stm32f4xx_conf.h、stm32f4xx_it.c和stm32f4xx_it.h 文件文件到自己的工程目录下的bsp文件夹下。
复制完成的工程如下图所示。
4. IAR工程的修改
新建IAR工程之后,为了使工程能够编译成功,需要对工程中的文件和配置选项进行修改,详细过程如下:
4.1 工程文件的修改
4.1.1 具体单板的选择
打开 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0LibrariesCMSISDeviceSTSTM32F4xxInclude 下的 stm32f4xx.h 文件,依据自己手中的单板类型找到相应的宏。例如本实验中使用的是STM32F407开发板,所以在IAR的配置中添加宏定义
除此之外,我们使用了标准外设库,所以还应该添加 USE_STDPERIPH_DRIVER 宏。该宏也在stm32f4xx.h 中可以找到。
添加宏的方法如下:通常情况下,我们会在IAR工程选项中进行该宏的定义。右击工程 Options-》 C/C++ Comliler -》 Proprecessor -》 Defined Symbols 中填写需要定义的宏,如下图所示。
4.1.2 外部晶振的修改
STM32F4中外部晶振默认的是 25MHz ,在使用时需要根据自己的开发板来修改具体的外部晶振值,否则会影响开发板的正常工作(例如串口乱码问题)。
修改方法如下:找到并打开 stm32f4xx.h 文件,可以看出默认定义的外部晶振大小为25MHz,本次实验使用的外部晶振为8MHz,所以要将25000000改为 8000000
修改了外部晶振大小之后,还需要对分频系数PLL_M进行修改,找到并打开 system_stm32f4xx.c 文件,找到如下图所示的代码处,可以看出默认定义的PLL_M为25,与默认的外部晶振匹配,本次实验使用的外部晶振为8MHz,所以将红框部分的25改为8,详细原因需要查看STM32F4参考手册的时钟树章节,不明白为什么这么修改的可以在文末留言。
4.2 IAR配置的修改
具体单板型号的选择。根据自己的单片机型号选择,笔者使用的是STM32F407VGT6,所以按照单片机型号选择。
4.2.1 头文件包含路径修改
工程中编译时需要包含头文件,操作过程如下图所示。需要注意的是在添加头文件的时候要改成相对路径,这样可以方便工程的移植使用。
4.2.2 链接文件选择修改
链接文件包含了单片机内部RAM和ROM起始地址的定义,在做IAP远程更新时非常有用,只做单片机开发时可以不考虑对其修改。
4.2.3 printf重定向到串口出错修改
printf重定向到串口的代码如下所示,编译时会报错,错误如下图所示。
/* prinf重定向到串口
*/int fputc(int ch, FILE *f)
{
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
// 直到发送完成
USART_SendData(USART1, ch);
// 发送数据
return ch;
}
遇到这个错误时,需要对IAR配置进行修改,修改如下。将下图的选项改为 Full 后,可以解决此问题
4.2.4 Debug和下载器修改
根据自己使用的下载仿真器进行配置。笔者使用的是ST-LINK进行下载仿真,配置过程如下,需要修改两个选项卡。
4.2.5 Tab替换为4个空格修改
在编写代码时笔者常用4个空格代替Tab键,防止在不同的编译环境下代码结构混乱问题。点击标题栏 Tools-》 Options,对其修改,如下所示。
4.2.6 ctrl+T 一键格式化代码修改
IAR中可以只用ctrl + T 一键格式化代码结构,如图所示选中要修改格式的代码
按下 ctrl + T 键,格式化后的代码如下图所示
5. 编译出现 .s 警告的解决办法
编译后会出现 Warning[25]: Label ‘HardFault_Handler’ is defined pubweak in a section implicitly declared root F:FreeRTOSdemof103_freertos_demoCMSISstartup_stm32f10x_md.s 137
警告信息,找到出现警告信息的位置,如下图所示。
解决办法是在每个出现警告的地方加上 :NOROOT,结果如下图所示。
至此,完成了IAR中STM32工程的建立,接下来就可以顺利开始编写自己的工程,有什么疑问或者在移植标准库的过程中有什么疑问,欢迎一起交流。
在建立工程之前,为了使自己的工程看起来更加清晰,方便后期的修改,分别建立不同的文件夹以存放不同类型的文件,本工程建立的文件夹如下图所示。
本文基于ST官方固件库建立STM32F407工程,详细步骤如下:
1. 官方固件库下载
官方固件库下载链接为:STM32F4xx_DSP_StdPeriph_Lib_V1.8.0.rar
2. IAR新建空工程
1. 打开IAR软件,单击 project 里面的 Create New Project,创建新的工程。
2. 创建新的工程后弹出如下窗口,点击 Empty project 后点击 OK 创建新的空的工程。
3. 点击上一步的 OK 后弹出保存界面(如下图),选择保存路径和并在下图2处填入工程的名字,本例中命名为test,然后单击 保存 。
4. 上一步保存之后点击软件上面的 全部保存 按钮,在相同的路径下写入工程的名字后单击 保存 。
5. 新建完成的空工程如下图所示 。
3. 复制添加官方文件
3.1 复制启动文件 .s
在文件夹 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0LibrariesCMSISDeviceSTSTM32F4xxSourceTemplatesiar 下找到相对应的.s启动文件,本文是基于 IAR 开发环境建立的工程,因此在iar文件夹下找相关的启动文件,如果是Keil的开发环境,则在Templatesarm 中寻找相应的启动文件。
具体使用哪个启动文件需要自己根据自己的开发板来定义,本文使用的是STM32F407开发板,可以选择startup_stm32f40_41xxx.s启动文件,将此文件复制到自己的工程目录下的bsp文件夹下(参考 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0LibrariesCMSISDeviceSTSTM32F4xxIncludestm32f4xx.h 中的定义进行选择)。
3.2 复制system相关文件
复制文件夹 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0LibrariesCMSISDeviceSTSTM32F4xxSourceTemplates 下的 system_stm32f4xx.c 到自己目录下的bsp文件夹下。
复制文件夹 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0LibrariesCMSISDeviceSTSTM32F4xxInclude 下的 system_stm32f4xx.h 和 stm32f4xx.h 文件到自己的工程目录下的bsp文件夹下。
3.3 复制底层驱动文件
复制文件夹 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0LibrariesSTM32F4xx_StdPeriph_Driver 下的 inc 和 src 文件夹到自己工程目录下的 driver 文件夹下。
3.4 复制.icf链接文件
复制文件夹 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0ProjectSTM32F4xx_StdPeriph_TemplatesEWARM 下的 stm32f4xx_flash.icf 文件到自己的工程目录下的bsp文件夹下。
3.5 复制中断和配置相关文件
复制文件夹 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0ProjectSTM32F4xx_StdPeriph_Templates 下的 stm32f4xx_conf.h、stm32f4xx_it.c和stm32f4xx_it.h 文件文件到自己的工程目录下的bsp文件夹下。
复制完成的工程如下图所示。
4. IAR工程的修改
新建IAR工程之后,为了使工程能够编译成功,需要对工程中的文件和配置选项进行修改,详细过程如下:
4.1 工程文件的修改
4.1.1 具体单板的选择
打开 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0LibrariesCMSISDeviceSTSTM32F4xxInclude 下的 stm32f4xx.h 文件,依据自己手中的单板类型找到相应的宏。例如本实验中使用的是STM32F407开发板,所以在IAR的配置中添加宏定义
除此之外,我们使用了标准外设库,所以还应该添加 USE_STDPERIPH_DRIVER 宏。该宏也在stm32f4xx.h 中可以找到。
添加宏的方法如下:通常情况下,我们会在IAR工程选项中进行该宏的定义。右击工程 Options-》 C/C++ Comliler -》 Proprecessor -》 Defined Symbols 中填写需要定义的宏,如下图所示。
4.1.2 外部晶振的修改
STM32F4中外部晶振默认的是 25MHz ,在使用时需要根据自己的开发板来修改具体的外部晶振值,否则会影响开发板的正常工作(例如串口乱码问题)。
修改方法如下:找到并打开 stm32f4xx.h 文件,可以看出默认定义的外部晶振大小为25MHz,本次实验使用的外部晶振为8MHz,所以要将25000000改为 8000000
修改了外部晶振大小之后,还需要对分频系数PLL_M进行修改,找到并打开 system_stm32f4xx.c 文件,找到如下图所示的代码处,可以看出默认定义的PLL_M为25,与默认的外部晶振匹配,本次实验使用的外部晶振为8MHz,所以将红框部分的25改为8,详细原因需要查看STM32F4参考手册的时钟树章节,不明白为什么这么修改的可以在文末留言。
4.2 IAR配置的修改
具体单板型号的选择。根据自己的单片机型号选择,笔者使用的是STM32F407VGT6,所以按照单片机型号选择。
4.2.1 头文件包含路径修改
工程中编译时需要包含头文件,操作过程如下图所示。需要注意的是在添加头文件的时候要改成相对路径,这样可以方便工程的移植使用。
4.2.2 链接文件选择修改
链接文件包含了单片机内部RAM和ROM起始地址的定义,在做IAP远程更新时非常有用,只做单片机开发时可以不考虑对其修改。
4.2.3 printf重定向到串口出错修改
printf重定向到串口的代码如下所示,编译时会报错,错误如下图所示。
/* prinf重定向到串口
*/int fputc(int ch, FILE *f)
{
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
// 直到发送完成
USART_SendData(USART1, ch);
// 发送数据
return ch;
}
遇到这个错误时,需要对IAR配置进行修改,修改如下。将下图的选项改为 Full 后,可以解决此问题
4.2.4 Debug和下载器修改
根据自己使用的下载仿真器进行配置。笔者使用的是ST-LINK进行下载仿真,配置过程如下,需要修改两个选项卡。
4.2.5 Tab替换为4个空格修改
在编写代码时笔者常用4个空格代替Tab键,防止在不同的编译环境下代码结构混乱问题。点击标题栏 Tools-》 Options,对其修改,如下所示。
4.2.6 ctrl+T 一键格式化代码修改
IAR中可以只用ctrl + T 一键格式化代码结构,如图所示选中要修改格式的代码
按下 ctrl + T 键,格式化后的代码如下图所示
5. 编译出现 .s 警告的解决办法
编译后会出现 Warning[25]: Label ‘HardFault_Handler’ is defined pubweak in a section implicitly declared root F:FreeRTOSdemof103_freertos_demoCMSISstartup_stm32f10x_md.s 137
警告信息,找到出现警告信息的位置,如下图所示。
解决办法是在每个出现警告的地方加上 :NOROOT,结果如下图所示。
至此,完成了IAR中STM32工程的建立,接下来就可以顺利开始编写自己的工程,有什么疑问或者在移植标准库的过程中有什么疑问,欢迎一起交流。
举报
更多回帖
rotate(-90deg);
回复
相关问答
STM32F407
固件库
IAR
怎样
在Keil V5下
新建
一种
STM32F407
工程
吗
2021-10-15
1706
如何用
STM32F407
去
新建
一
个
工程
模板
呢
2021-11-25
1213
怎样
去
新建
一种
基于库函数的
工程
2021-08-12
742
求
一种
stm32
固件
库
工程
的设计方案
2021-11-29
800
请问
怎样
去
设计
一种
基于
STM32F407
的直流无刷电机?
2021-07-21
1876
怎样
去
设计
一种
基于
STM32F407
的直流无刷电机BLDC控制硬件电路?
2021-07-20
1199
怎样
去
新建
一种
STM32F
303CBT6
工程
模板
呢
2021-10-20
1221
怎样
使用
STM32
CubeMX
去
创建
STM32F407
工程
呢
2021-10-25
420
请问
一
下
怎样
去
下载
STM32F
的
官方
固件
库
呢
2021-10-22
791
怎样
去
设计
一种
基于
STM32F407
的人脸检测追踪系统
2021-10-18
1302
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分