IAR建立STM32F4工程

  在建立工程之前,为了使自己的工程看起来更加清晰,方便后期的修改,分别建立不同的文件夹以存放不同类型的文件,本工程建立的文件夹如下图所示。
在这里插入图片描述

  本文基于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.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\iar 下找到相对应的.s启动文件,本文是基于 IAR 开发环境建立的工程,因此在iar文件夹下找相关的启动文件,如果是Keil的开发环境,则在Templates\arm 中寻找相应的启动文件。
在这里插入图片描述
  具体使用哪个启动文件需要自己根据自己的开发板来定义,本文使用的是STM32F407开发板,可以选择startup_stm32f40_41xxx.s启动文件,将此文件复制到自己的工程目录下的bsp文件夹下(参考 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\Device\ST\STM32F4xx\Includestm32f4xx.h 中的定义进行选择)。

3.2 复制system相关文件

  复制文件夹 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates 下的 system_stm32f4xx.c 到自己目录下的bsp文件夹下。
在这里插入图片描述
  复制文件夹 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include 下的 system_stm32f4xx.h 和 stm32f4xx.h 文件到自己的工程目录下的bsp文件夹下。
在这里插入图片描述

3.3 复制底层驱动文件

  复制文件夹 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\STM32F4xx_StdPeriph_Driver 下的 inc 和 src 文件夹到自己工程目录下的 driver 文件夹下。
在这里插入图片描述

3.4 复制.icf链接文件

  复制文件夹 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Templates\EWARM 下的 stm32f4xx_flash.icf 文件到自己的工程目录下的bsp文件夹下。
在这里插入图片描述

3.5 复制中断和配置相关文件

  复制文件夹 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_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.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include 下的 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:\FreeRTOS\demo\f103_freertos_demo\CMSIS\startup_stm32f10x_md.s 137
警告信息,找到出现警告信息的位置,如下图所示。
在这里插入图片描述
  解决办法是在每个出现警告的地方加上 :NOROOT,结果如下图所示。
在这里插入图片描述

至此,完成了IAR中STM32工程的建立,接下来就可以顺利开始编写自己的工程,有什么疑问或者在移植标准库的过程中有什么疑问,欢迎一起交流

  • 9
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值