STM32F4教程从零开始1——建工程

今天,新买的机械到手,很开心,用得很爽,所以决定再写一篇,话说这是我第一次买机械键盘,我现在也支持程序员可以没有一个好的电脑,但必须有一个好的键盘的说法了。。。

接着,开始我们的游戏吧。

建工程分成5个阶段:

建目录——复制文件——MDK建工程——下载器设置

第一个阶段——建目录

1、在一个干净的文件夹里,见一个新文件夹F407,然后把下载好的固件库复制过来


2、在F407里面建5个目录(我们先来必须的,具体工程应用时目录更多,随着这系列的教程的继续会持续增加。。)

CMSIS:用于存放STM32的CPU核心相关的文件

Library:存放STM32的外设库,这是STM32好入门的关键,大大简化了编程

Driver:存放芯片级的驱动文件,如Bsp.c(板级支持包)、中断处理函数的文件、外设库的配置文件

User:用户的文件夹,存放如main..c、Global.h、用户新建的其他文件

Prj:MDK工程相关的目录,存放编译生成的中间文件,KEIL工程相关的文件


然后在Prj目录下新建Output目录和List目录,把编译生成的临时文件放在Output里面,备份或者拷给别人的时候,把Output里面的文件删掉可以大大减小压缩包的容量。


3、解压缩固件库到当且目录


这个目录里面我们主要用Libraries和Project里面的文件,那个chm是这个固件库的说明文档,里面有大量的例程。

然后,把我们的工程目录和固件库目录在桌面上并排方便操作


然后进入下一个阶段

第二阶段——复制文件

1、复制CMSIS里面的文件,也就是CPU相关的文件

都在固件库的\Libraries\CMSIS目录下

\Libraries\CMSIS\Device\ST\STM32F4xx\Include下的system_stm32f4xx.h和stm32f4xx.h

\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates下的system_stm32f4xx.c

\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm下的startup_stm32f40xx.s,这个目录下文件要根据所用的芯片选择,我们用的是F407所以。。。

\Libraries\CMSIS\Include\下的core_cm4.h和core_cm4_simd.h和core_cmFunc.h和core_cmInstr.h,STM32F1XX的小伙伴们注意选带cm3的。。。

这样CMSIS目录下共有8个文件


2、复制Library里的文件

这个简单,把\Libraries\STM32F4xx_StdPeriph_Driver下的src目录和inc目录复制过去就可以了

3、复制到Driver里的文件

\Project\STM32F4xx_StdPeriph_Templates下的stm32f4xx_conf.h和stm32f4xx_it.c和stm32f4xx_it.h

并且在目录下新建文件Bsp.c和Bsp.h(暂时不用,也可以不建)

4、复制到User里的文件

\Project\STM32F4xx_StdPeriph_Templates下的main.c和main.h

这个就不用截图了吧,复制结束,进入下一关

第三阶段——MDK建工程

1、启动MDK,也就是KEIL,我用是MDK5.1,并点击Project->New u.......不打了

2、目录选择到我们的工程的Prj目录下,敲入工程名F407,点确定

3、芯片选择F407VG,脑残级操作,把后来弹出来的窗口关了,没有弹出来的就算了

4、点工具栏上那个三个正方形的图标

5、添加目录,并添加响应文件夹里的文件,

注意添加CMSIS里面的文件的时候要把文件类型选成.*,避免漏掉.s文件,Library目录只需要添加src里面的文件就行了,那个Bsp就不用加了,还没写呢。。

6、工程设置,点击工具栏上的魔术棒图标

7、设置Output到Output目录,List到List目录

8、切换到C/C++选项卡,填入define内容

USE_STDPERIPH_DRIVER STM32F40XX(注意XX是大写的,就是跟CMSIS里面的.s文件一样,后来发现截图错了,懒得改了)

然后,点include paths后面的按钮,进入include设置窗口

9、添加工程的所有目录,除了Prj以外,Library里添加的是inc目录等其他目录,然后点OK


10、编译,点工具栏上的编译按钮

应该是没有错误或者有两个错误,用官方的纯净的固件库是没有错误的,如果用disvovery的包的话是会有两个错误的。就是没有选用是那块板子。。

这个时候,把main.h里面的

#if defined (USE_STM324xG_EVAL)
  #include "stm324xg_eval.h"
  #include "stm324xg_eval_lcd.h"

#elif defined (USE_STM324x7I_EVAL) 
  #include "stm324x7i_eval.h"
  #include "stm324x7i_eval_lcd.h"

#else
 #error "Please select first the Evaluation board used in your application (in Project Options)"
#endif
删了,注释比较保险。。

把main.c里面的

#if defined (USE_STM324xG_EVAL)
  #define MESSAGE1   "     STM32F40xx     "
  #define MESSAGE2   " Device running on  " 
  #define MESSAGE3   "   STM324xG-EVAL    "

#else /* USE_STM324x7I_EVAL */ 
  #define MESSAGE1   "     STM32F427x     "
  #define MESSAGE2   " Device running on  " 
  #define MESSAGE3   "  STM324x7I-EVAL    "
#endif 
删了,main函数也删了,重新写一个,哪些代码都是用官方的板子实现的,我们一般不用哪些代码

重新写一个main函数

int main(void)
{
  RCC_GetClocksFreq(&RCC_Clocks);
  SysTick_Config(RCC_Clocks.HCLK_Frequency / 100);
 while(1)
 {
 }
}

重新编译,不会报错了吧,可能有一个waring,暂时忽略。

这样一个工程就建好了。

第四阶段——下载器设置

我用的是st-LINK,jlink同理,但是jlink一般用jtag接口下载,而st-link一般用swd接口下载。jlink也是支持swd的。。。

1、点那个工具栏上的魔术棒按钮,然后点debug选项卡,选择合适的下载器,jlink之类的,然后点setting

2、选择swd模式,看自己需求,用jtag接口的就不用改了,jtag一般用20pin那种,swd只有4-6根线。。

3、点flash download选项卡,把reset打上勾,然后点adding

4、选择合适的flash,看芯片说明

5、然后一路oK就OK了。

最后点工具栏上的下载按钮,下进去了,是不是很有成就感。哇咔咔。

最后,说一点,STM32F4一般配8M或者25M的晶振,这个需要根据实际情况修改库文件

在CMSIS下的stm32f4xx.h和system_stm32f4xx.c,有一个是只读的需要设置属性,去掉只读。

stm32f4xx.h第100行

 #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */

我的板子是8M的,所以把25改成8

system_stm32f4xx.c的第155行

#define PLL_M      25

我的板子是8M的,所以把25改成8

OK,这样就差不多了。好累啊。。。

有空把我工程发上来。。

工程链接:




评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值