你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【学习经验】STM32学前班教程之四:打好基础建立模板

[复制链接]
ashantx 发布时间:2015-5-14 19:19
本帖最后由 ashantx 于 2015-5-14 19:20 编辑 6 Z1 D3 C- W9 u8 I9 P

6 _: I9 \" ]4 S" @: wsw笨笨的STM32学前班教程之四:打好基础建立模板
: N, U, [6 o3 K& Z
9 }/ @! z9 m% j0 I) N; W& j1、 新建目录Project_IAR4,按照自己的顺序重新组织dll(驱动);inc、src函数库;settings,其他所有文件全部放这个新建的目录下。# S6 z& E, s# {5 y
2、 双击打开Project.eww,继续更改内部设置。& k+ L, M5 a9 s: p* e. e
3、 需更改的内容列表:( o' j$ G% f! U4 L' Z
位置和项目 目标 说明
2 q! O$ `+ ^0 R+ ~2 O% k+ p) t/ KProject/Edir confignations 新建基于STM3210B的配置 编译目标和过程文件存放
' q1 y5 `9 W8 a5 Q" O) O) [Project/Option/General Option/Target ST STM32F10x 选择芯片类型( |* n9 ?/ u  R. W* ~
Project/Option/ C/C++ Compiler/Preprocessor/Additional include directories $PROJ_DIR$/
. z7 h! d* s3 b7 N' U$PROJ_DIR$/inc 头文件相对位置,需要包括“map/lib/type”的位置
* O% {, c: Y5 r5 d  D$ }Project/Option/ C/C++ Compiler/Preprocessor/Defined symbols  空 空白是在Flash里面调试程序,VECT_TAB_RAM是在RAM里调试程序
& l! ?/ U* w! x- @0 s( DProject/Option/ C/C++ Compiler/Optimizations/Size 最终编译一般选择High1 g: c2 w5 H$ s$ C" Y; b
调试可选None None,Low,Medium,High是不同的代码优化等级
) d# m, @3 k! ]5 LProject/Option/ Linker/Output 去掉Overrride default 输出格式使用默认/ X3 c- g$ X: Q# a# n( `* A* v
Project/Option/ Linker/Extra Output 打开General Extra Output去掉Overrride default 厂家要求
" z9 ?) y$ N3 V& h+ r+ }Project/Option/ Linker/Config 打开Overrride default: ~# r3 b' N0 Z6 Z; z/ \
$PROJ_DIR$/lnkarm_flash.xcl 使用Flash调试程序,如果需要使用RAM调试则改为lnkarm_RAM.xcl
: l/ O1 J7 z; f8 {( {9 N" kProject/Option/ Debugger/Setup/Driver  Third-Party Driver 使用第三方驱动连接单片机
) ]# g: u0 v. k. y# }" p+ mProject/Option/ Debugger/ Download Use flash loader 下载到flash所需的设置2 {( i+ L0 X% M: H/ h' [
Project/Option/ Debugger/ Third-Party Driver/ Third-Party Driver/IAR debugger driver $PROJ_DIR$/ddl/STM32Driver.dll 驱动文件路径
- x1 \) ~5 j% k: p1 J5 A注1:所有跟路径相关的设置需要根据实际情况编写,相对路径的编写——“$PROJ_DIR$”代表eww文件所在文件夹,“..”代表向上一层。
1 v, P/ e3 \" @注2:其他设置使用库函数里面的工程文件的默认选项即可,初学不用了解太多。* ~/ a! p9 W$ x3 B, X1 Z. I
4、 需要重新删除并重新添加Project下“FWLib”和“User”的所有文件,为了删减外设模块方便需要在“USER”额外添加“stm32f10x_conf.h”(不添加也可以,需要展开main.c找到它)。然后执行Project/Rebuid All,通过则设置完毕。
6 l' g$ B: R/ d7 X& a& F! j# ~9 G5、 完成以上步骤,第一个自己习惯的程序库就建立完毕了,以后可以从“stm32f10x_conf.h”中删减各种库文件,从“stm32f10x_it.c”编辑中断,从“main.c”编写得到自己的程序。最后需要将这个库打包封存,每次解压缩并修改主目录名称即可。
3 H1 B9 s5 t1 C+ y$ S- L6、 我的程序库特点:! L7 Q4 O9 K: J
a) 默认兼容ST-LINK-II,IAR EWARM 4.42A,Flash调试,其他有可能需要更改设置+ D5 o8 {# `. b: {: o4 |
b) 为操作方便减少了目录的层次9 D4 L& b# M% e% v$ O  P$ X
c) 为学习方便使用网友汉化版2.0.2固件,主要是库函数中c代码的注释。
4 U% f: w3 z: j1 D' V后面随着学习深入将在我的模板里面加入如下内容:% p1 S* s9 @+ {
d) 加入必用的flash(读取优化),lib(debug),nvic(中断位置判断、开中断模板),rcc(时钟管理模板,开启外设时钟模板),gpio(管脚定义模板)的初始化代码,所有模板代码用到的时候只要去掉前面的注释“//”,根据需求填入相应值就可以了。
+ ^+ p: m3 g% _- D; i9 Ce) 因为自己记性不好,所以main函数中的代码做到每行注释,便于自己以后使用。
3 Q! f0 p6 J3 p5 Sf) 集成Print_U函数简单串口收发函数代码,便于调试,改变使用Printf函数的调试习惯。
4 S& o) j2 g4 r4 ^8 \5 C( Kg) 集成使用systick的精确延时函数delay。2 Q% x* [( ]7 a0 Q1 k
h) 集成时钟故障处理代码。
, f1 S0 |" H4 A1 Fi) 集成电压监控代码。
  _" l! {# V" S2 L& Hj) 集成片上温度检测代码。4 e# i! k/ T( G& b9 M6 `) s% ]' X
k) 逐步加入所有外设的初始化模块# Y7 k' z0 R5 t6 B. n! S: k
一、编写程序所需的步骤
' ]# b8 J/ `' T, \1、解压缩,改目录名称,和eww文件名,以便跟其他程序区分。
6 t% {& d3 d, U0 X  t8 Q$ `2、更改设置:在“stm32f10x_conf.h”关闭不用的外设(在其声明函数前面加注释符号“//”)。并根据外部晶振速度更改其中“HSE_Value”的数值,其单位是Hz。
! R) N7 I2 B4 W* E7 }& a) X; R4 d3、完成各种头文件的包含(#include "xxx.h";),公共变量的声明(static 数据类型 变量名称;),子程序声明(void 函数名称(参数);)……C语言必须的前置工作。5 X+ }0 ~1 g0 }' P
4、改写我的程序库里面所预设的模板,再进行其他模块的初始化子程序代码的编写,并在程序代码的开始部分调用。注意:必须记住所有外设的使用需要考虑4个问题:
) C8 R6 Q) {, Z1 \a)     开时钟RCC(在RCC初始化中);
& s; m% e" H3 p8 Yb)     自身初始化;7 P. j0 [4 i( i4 r
c)     相关管脚配置(在GPIO初始化中);
$ D% L+ L1 M' _, u) b* V0 Pd)     是否使用中断(在NVIC初始化中)
1 e* p. D1 E, i5、编写main.c中的主要代码和各种子函数。3 Y" c. `- V1 d, Z4 W' ]( V) z! `, g- \
6、在“stm32f10x_it.c”填写各种中断所需的执行代码,如果用不到中断的简单程序则不用编写此文件。! S/ g/ O8 A& q# [1 X0 f
7、编译生成 “bin”的方法:Project/Option/ Linker/Output/Format,里面选择“Other”,在下面的“Output”选 “raw-binary”生成bin。8 }4 u2 ~+ V/ q) d7 H
8、编译生成“hex”的方法:Project/Option/ Linker/Output/Format,里面选择“Other”,在下面的“Output”选“intel-extended”,生成a79直接改名成为hex或者选中上面的“Output Flie”在“Overrride default”项目里面改扩展名为hex。
! e6 y9 Z3 D& i* c+ r使用软件界面的Debug烧写并按钮调试程序。注意,ST-Link-II是直接将程序烧写进Flash进行调试,而不是使用RAM的方式。' G$ k; I8 n/ e3 R

3 p  J$ K+ S) D$ {" Y6 E" K
赞 收藏 1 评论5 发布时间:2015-5-14 19:19

举报

5个回答
wwwhlw 回答时间:2015-5-15 09:15:38
要是图文并茂就更好了。。
zhangdaijin 回答时间:2015-5-16 00:14:13
mark0668 回答时间:2015-5-16 00:18:33
还是要跟着学习的,学到老用到用老
为什么是EEFOCUS小白 回答时间:2015-5-16 08:53:25
谢谢分享
qscvhu 回答时间:2015-5-16 09:55:20
谢谢分享
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版