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

【心得】用传统方法开发STM32,放弃固件库的使用!

[复制链接]
ST老少女 发布时间:2008-12-2 14:40
阅读主题, 点击返回1楼
赞 收藏 评论1459 发布时间:2008-12-2 14:40
1459个回答
bluehacker-1165 回答时间:2009-11-27 14:50:13

回复:【心得】用传统方法开发STM32,放弃固件库的使用!

 hehe第一次来st论坛发贴。lz说的问题是肯定的,这个没办法,天下没有免费的午餐。这种封装库在linux之类的系统中是标准做法,由于cpu速度的快速提升,通常不在乎损失些性能,不过对于stm32这种级别的cpu来说,个人觉得还是值得商榷的
GAOXS072926 回答时间:2009-11-30 10:21:11

RE:【心得】用传统方法开发STM32,放弃固件库的使用!

学学
srxzxl 回答时间:2009-11-30 11:07:57

RE:【心得】用传统方法开发STM32,放弃固件库的使用!

我正在学STM32,刚开始觉得使用固件库的确比较方便,直接调用函数就行,但看到你的文章,猛然回头
ufoofuwm 回答时间:2009-11-30 14:10:03

回复:【心得】用传统方法开发STM32,放弃固件库的使用!

边走边瞧3 c6 o% R9 f' N. G4 I3 S
 
barrie1973 回答时间:2009-11-30 17:03:13

回复:【心得】用传统方法开发STM32,放弃固件库的使用!

呵呵,正在用这种方法
max2650-121346 回答时间:2009-11-30 20:26:43

RE:【心得】用传统方法开发STM32,放弃固件库的使用!

感谢楼主分享  学习一下
wangyinnian 回答时间:2009-12-2 11:09:24

RE:【心得】用传统方法开发STM32,放弃固件库的使用!

我找了很久了,下来看看!
pulpdog-161062 回答时间:2009-12-2 16:07:04

RE:【心得】用传统方法开发STM32,放弃固件库的使用!

我也看看,同时感谢trinove,如果是他原创的话
langong-161171 回答时间:2009-12-3 09:31:24

回复:【心得】用传统方法开发STM32,放弃固件库的使用!

vbncvbn
bearmoneky1028 回答时间:2009-12-3 10:05:42

RE:【心得】用传统方法开发STM32,放弃固件库的使用!

我正在学STM32,刚开始觉得使用固件库的确比较方便,直接调用函数就行,但看到你的文章,猛然回头
wutao0808-15849 回答时间:2009-12-3 13:01:30

RE:【心得】用传统方法开发STM32,放弃固件库的使用!

好东东
jzq_415 回答时间:2009-12-3 14:15:18

回复:【心得】用传统方法开发STM32,放弃固件库的使用!

回复第 1 楼 ST老少女于2008-12-02 06:40:59发表:
$ i9 e! k# v& n- l9 m0 ?( P3 s2 D仔细研究了固件库,发现使用的代价,性能损失还是相当的大。
! V/ n. J9 o% e- P4 a+ G, S/ F激进点说,速度更快的Cortex-M3在使用了固件库后,将比7S更慢。' ?9 r' @( ~) K
由于还没有完全研究过固件库的全部代码,不能完全下这个结论,但是从部分情况看,基本上脱不开这个顽疾。
: k8 K8 F" G" y  J/ Y很想指责这个固件库的开发和设计者,完全丧失了M3内核的优势,浪费太多了。& y0 J6 E* o3 d
我要尝试进行无固件库的开发,这个才是正真的传统开发手段,也许复杂一点,但我相信会很好。
: `9 d& [# w  _: `在此留个贴,慢慢记录无固件库的尝试过程。
9 D& X( k0 j% l9 B0 S9 {4 J# t1 y
IAR编译器传统的INC目录中包含有两个STM32的头文件. r5 W# N: G% i3 t1 z* c
分别是9 [! T* O( @: @1 i. d8 G
iostm32f10xxB.h
6 T5 A6 k  h" `3 {; t6 m. hiostm32f10xxE.h8 z5 {+ f4 A6 o% Y( Z' T
经过对比,E比B的头文件:APB 和 AHB 部分不同,增加了TIM5、6、7、8,UART4、5,ADC3,DMA2,SRAM、NOR,GPIOF,GPIOG,BKP,SPI3,FSMC,SDIO,DAC。4 h6 {9 R" l$ |3 @% s& d
6 f$ W! v% `/ O
也就是说 iostm32f10xxB.h 文件,适用于STM32F10xx6、STM32F10xx8、STM32F10xxB。* R2 b9 w& Z+ f2 i& y* {
而 iostm32f10xxE.h 文件,适用于STM32F10xxC、STM32F10xxD、STM32F10xxE。0 w% C$ w3 @/ g. G( x

+ f4 j" ?0 V0 v0 Z: y( L仔细研究了启动代码部分: A  Y8 Y0 |8 K3 |1 f; M
cortexm3_macro.s 文件可以不经修改,包含进项目中。(请有项目管理的ADD加入,不要用include包含)
$ @: y- u0 V5 Q' r' E0 y
8 \' o0 J3 Z' g$ R为了方便进行中断处理,将
: b, U6 N, G% h& Q) w4 J, lstm32f10x_vector.c
0 o% |) b$ T; `* J2 {3 c/ F. ?stm32f10x_it.c
6 T1 I& J  w& p* M9 kstm32f10x_it.h( h1 [  P) |4 b
三个文件进行脱离固件库的修改。然后Include进main文件。
9 n3 [9 Q5 m/ w
' R. R9 n) x. {! D" c  I好了,进行main文件的编写吧,已经不需要固件库了,对着 《STM32F10x参考手册》逐个来修改寄存器吧。; e# O! G% i$ U/ b  e- V& x

2 l8 E/ x' h! s$ Vmain.c头部
" u. b/ d  Y' e) h+ _4 e) q1 \9 U#include "iostm32f10xxB.h"- V# c1 k. s: a2 u2 t3 I0 ~/ a, N
#include "stm32f10x_it.c"
! Z$ v8 b( ~; u#include "stm32f10x_vector.c"7 q, J# [: `+ O, w6 o1 ^( N0 N: S! E" I
以下附件为开源代码。
0 Y+ H7 T+ g, o) Z: ^
" C5 d# H1 h; Z! q, q/ S# ?8 T# X; F3 l9 s/ i5 d
 1 }. \: u* x: u. h* E" Q
6 Z; h; x6 f$ d
看看
KEY1 回答时间:2009-12-6 00:41:53

回复:【心得】用传统方法开发STM32,放弃固件库的使用!

很辛苦啊!
panjl168 回答时间:2009-12-6 11:16:41

回复:【心得】用传统方法开发STM32,放弃固件库的使用!

回复第 1 楼 ST老少女于2008-12-02 06:40:59发表:! y( G% b1 b7 X; R, L
仔细研究了固件库,发现使用的代价,性能损失还是相当的大。1 a* _2 ~) o4 ]
激进点说,速度更快的Cortex-M3在使用了固件库后,将比7S更慢。* D  t. a; ?- H: c$ T, X! d
由于还没有完全研究过固件库的全部代码,不能完全下这个结论,但是从部分情况看,基本上脱不开这个顽疾。- h' l( }: x4 }5 q
很想指责这个固件库的开发和设计者,完全丧失了M3内核的优势,浪费太多了。: s) r5 q- _7 M8 B
我要尝试进行无固件库的开发,这个才是正真的传统开发手段,也许复杂一点,但我相信会很好。
$ E3 `" P" L2 k" Q2 x. X% b在此留个贴,慢慢记录无固件库的尝试过程。& F2 L9 \8 W. S# V4 ~" b2 f
1 H! ~/ F; z# @) r) }% r+ d
IAR编译器传统的INC目录中包含有两个STM32的头文件
+ k# p0 ]3 P" x2 P  N分别是
1 ]4 Z, f5 t  p% d# F9 M; e/ C  oiostm32f10xxB.h
" A' b7 Q- J% m, r0 l: |2 ^* j" oiostm32f10xxE.h
! \! v7 Y4 E3 X. |* Q4 w4 i经过对比,E比B的头文件:APB 和 AHB 部分不同,增加了TIM5、6、7、8,UART4、5,ADC3,DMA2,SRAM、NOR,GPIOF,GPIOG,BKP,SPI3,FSMC,SDIO,DAC。( J, K7 |# H& N

6 s* c( R  _$ @, B也就是说 iostm32f10xxB.h 文件,适用于STM32F10xx6、STM32F10xx8、STM32F10xxB。
6 ]  H6 t  E. X6 \2 Q而 iostm32f10xxE.h 文件,适用于STM32F10xxC、STM32F10xxD、STM32F10xxE。2 x+ g2 R8 {8 j" N8 t
! B" M" y+ S( W
仔细研究了启动代码部分
  F4 S" E, L' Z- `9 b7 hcortexm3_macro.s 文件可以不经修改,包含进项目中。(请有项目管理的ADD加入,不要用include包含). g3 n: R! n* n. c8 r1 Q
% Q' q5 E% l! L3 m
为了方便进行中断处理,将  Y: ~" o! f3 _# x, V, ?
stm32f10x_vector.c& Y2 y: q( D: n- H% C1 _  u3 q
stm32f10x_it.c ) O' O) y, Z4 P* M& K
stm32f10x_it.h
4 d- d9 I9 r$ u8 k8 J三个文件进行脱离固件库的修改。然后Include进main文件。
- }. F. N1 d3 u7 R/ G% N
8 U  c) ~) @( ~. i" m好了,进行main文件的编写吧,已经不需要固件库了,对着 《STM32F10x参考手册》逐个来修改寄存器吧。
2 f4 D& w* b" X& K! ^
5 Q; ^7 W  |6 {main.c头部
) o! n# J1 J3 V# s#include "iostm32f10xxB.h"3 n% j* r9 T+ s5 c% C* u- a) Y2 E
#include "stm32f10x_it.c"% u; r: e% T5 `# U+ Y
#include "stm32f10x_vector.c"
* p" X5 ~( L7 t- P5 G9 C- B& V: i6 K以下附件为开源代码。
  K2 {5 H; ^+ Y( U! {( y" e; G8 I3 i7 z6 I. c) X
% F7 p! d' }& `
 
1 u  B6 N+ X) x- x% j6 H+ p7 n: @2 `+ j
tks!
panjl168 回答时间:2009-12-6 11:17:53

回复:【心得】用传统方法开发STM32,放弃固件库的使用!

回复第 2 楼 ST老少女于2008-12-02 06:41:45发表:
原帖由ST老少女于2008-12-02 14:40发表:
& A9 r5 M5 v4 I, f1 g! K仔细研究了固件库,发现使用的代价,性能损失还是相当的大。
" _# V3 I7 d) X! _, ^激进点说,速度更快的Cortex-M3在使用了固件库后,将比7S更慢。$ g. Z; o3 _  f5 o* V- P
由于还没有完全研究过固件库的全部代码,不能完全下这个结论,但是从部分情况看,基本上脱不开这个顽疾。! g, C+ {" ^. R  d* H
很想指责这个固件库的开发和设计者,完全丧失了M3内核的优势,浪费太多了。, m4 r" m3 C$ U
我要尝试进行无固件库的开发,这个才是正真的传统开发手段,也许复杂一点,但我相信会很好。7 q3 U1 |& S7 t6 l5 Q
在此留个贴,慢慢记录无固件库的尝试过程。- K% n9 D# L! u4 z9 S
3 H1 O5 D+ z* V1 Q9 y7 C
IAR编译器传统的INC目录中包含有两个STM32的头文件$ u5 C4 X" r/ p( d: s2 `
分别是
. l' H! [4 S% y( u  `0 Viostm32f10xxB.h
7 u* s" E* B' l& O. l. ^: g( ^3 Wiostm32f10xxE.h
3 V$ D+ z+ e. A* d$ K8 J- Y经过对比,E比B的头文件:APB 和 AHB 部分不同,增加了TIM5、6、7、8,UART4、5,ADC3,DMA2,SRAM、NOR,GPIOF,GPIOG,BKP,SPI3,FSMC,SDIO,DAC。
* d8 j; v) c- f- {% z& z3 }$ ], q: |! D4 i! |8 p
也就是说 iostm32f10xxB.h 文件,适用于STM32F10xx6、STM32F10xx8、STM32F10xxB。" Z( \" }1 I9 m! m1 E$ \6 v
而 iostm32f10xxE.h 文件,适用于STM32F10xxC、STM32F10xxD、STM32F10xxE。
8 Q+ s. N* s/ T) b
7 Y. W. j& J/ L" z7 z* e1 e仔细研究了启动代码部分$ z" J2 n$ R/ |1 L8 ~
cortexm3_macro.s 文件可以不经修改,包含进项目中。(请有项目管理的ADD加入,不要用include包含)
& q* H. N5 p- @3 g0 J; Y$ I% b. q  ]3 b0 z: {! p
为了方便进行中断处理,将, u' x* w, G! h7 ^- f
stm32f10x_vector.c
2 ^6 F& m1 n5 e: G) O! L1 P0 Lstm32f10x_it.c * X, `# ]) i+ p, o. Y5 K1 _2 m
stm32f10x_it.h, z: g" \" A! T$ j& y
三个文件进行脱离固件库的修改。然后Include进main文件。
0 k$ S4 e# H. W9 G# n/ n) `3 |" P0 u/ O1 {
好了,进行main文件的编写吧,已经不需要固件库了,对着 《STM32F10x参考手册》逐个来修改寄存器吧。1 l8 [& d- |, P( E

1 n. y) ~5 T8 K  Y, J3 {2 amain.c头部# R& n" ^6 p$ I4 Z
#include "iostm32f10xxB.h"5 @& Y  E7 e0 y, \
#include "stm32f10x_it.c"
" K$ |/ H: S9 ^! w% G#include "stm32f10x_vector.c"
' u) w  f( C+ \: a& k以下附件为开源代码。
( i) v( o% |0 z2 ^( X, m) {
依然是代码 
0 m& {" I* U8 D' E7 e2 p2 u* }0 b
: K; g$ J, ~" O" i  Y( J' v5 Utks!
! G7 I1 x" E9 M/ Y5 X+ H 

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版