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

STM32F072的寄存器LED闪烁

[复制链接]
wamcncn 发布时间:2015-1-26 15:37
本帖最后由 wambob 于 2015-1-26 15:40 编辑
- P* s) |9 ~# y' s, e2 q0 {2 b
* ^6 w& O* L, c2 J# k4 x看了网上视频的寄存器操作,又看了下072的参考手册还真和M3核不一样7 |3 N% U; x+ h- Y3 G) k* a9 X
GPIO口的时钟使能寄存器是AHBENR,& Y, G0 B8 F+ Q% ^
而GPIO口寄存器有4个32位的配置寄存器,分别是MODER,OTYPER,OSPEEDR,PUPDR./ U* }: K- x' r/ }
                             2个32位的数据寄存器IDR和ODR.
5 t1 b1 h; [( |  ?, s8 A                             1个32位的设置/复位寄存器BSRR.9 P" k" G; d) j
                             1个32位的锁存器LCKR  (PORA和PORTB).  L* Y) ^- o& k, T
                              2个复用选择寄存器AFRH 和AFRL(PORTA-PORTE).
& `7 ^7 s! L2 Y072开发板上LED在PA5上;4 a" ^$ D, S: D" `  x
void LED_Init(void)6 {' v* f. W* s: R/ a* g4 {
{: F: i  Z6 h" h# ], s) s
    RCC->AHBENR|=1<<17;- f! \$ U  l" |) K* ?3 @4 V
    GPIOA->MODER&=0xfffff0ff;- \5 d' I1 r: a# Q
    GPIOA->MODER|=0x00000400;  
4 ~. J, J, l) ^    GPIOA->OTYPER&=0xffffffef;  - B! c3 u$ ]0 o8 Y9 [( t7 V
    GPIOA->OSPEEDR|=0x00000c00;  
- A  r* n( f- V}
6 J: r/ b# c& o& ]3 v6 P' P& V$ y6 {) D' M$ V
int main(void), r" d8 N* h9 r# \
{              
" z3 v) X4 u/ I   
8 `0 @2 N4 _% R: p9 B# _; y) W" W- kSystemInit();        / K  r: ~  T- d8 `$ @
% t3 I1 ]- X" c/ S, |- y/ X/ X# n
    LED_Init();
3 w7 u5 Y9 b/ K/ v: U    while(1)% P8 @! U! W# Y5 a$ f  p
{ , ~3 w+ Q6 @8 X' M7 y# u, r
        GPIOA->ODR|=1<<5;6 t# Z9 G- R4 _# |
        Delay_Ms(500);2 j! ]  O6 l) M
        GPIOA->ODR&=0xffffffcf;
- m6 q1 ^) R  k% P+ [2 F        Delay_Ms(500);7 u( L1 S2 Q% X
       * y: ^3 j2 I$ i( l$ ?0 y+ F
  }8 l" G. a- @% q2 y. G
     }5 ], k7 s5 \2 }/ O# y1 d' }
   比起库函数老说,是不是很精简' D$ F" ?& X* [) c7 r

" {, r6 Q; ?0 V             2 t. m" B* h5 `
        
$ v2 r% [, t( ]4 x
% U! U7 O7 J2 V7 v
1 N# w$ L# K: y8 _, f
赞 收藏 1 评论15 发布时间:2015-1-26 15:37

举报

15个回答
qianfan 回答时间:2015-1-26 17:16:11
如果不喜欢官方的库,可以自己封装一个。其实感觉官方的IO接口函数配置有点麻烦。自己写一个digitalWrite其实是挺好的。
harvardx 回答时间:2015-1-26 16:01:11
好深入啊 .喜欢库操作 喜欢mbed操作的飘过. 对直接寄存器操作的表示敬佩.
mmttss 回答时间:2015-1-26 19:49:48
喜欢这种直接点灯方式
# m8 y* E5 a! i- y  z有工程包吗? 那些头文件需要被include? 这我还不熟
9 j7 }3 H8 F+ I) ]/ j6 J8 x谢谢
lkl0305 回答时间:2015-1-26 19:52:24
好,多谢分享
AndyYau-268557 回答时间:2015-1-26 19:58:53
楼主又开始搞寄存器了,厉害
yceast 回答时间:2015-1-26 20:56:22
支持  开源
damiaa 回答时间:2015-1-26 21:19:00
是精简点。
wu1169668869 回答时间:2015-1-26 21:39:14
直接操作寄存器!!!
wamcncn 回答时间:2015-1-26 22:43:53
mmttss 发表于 2015-1-26 19:49! B4 O! ^5 r) K* F8 ]. P
喜欢这种直接点灯方式9 k# K; ]# O* e' U1 Y4 I1 \, Y& _
有工程包吗? 那些头文件需要被include? 这我还不熟7 y# }9 T( i* U7 A7 H: Y
谢谢 ...
7 k" \: @& B% P7 \4 h
有,传上去了9 V0 N2 B9 p0 ?9 ]# h

DEMO.rar

下载

1.13 MB, 下载次数: 2

mmttss 回答时间:2015-1-27 00:40:24
我依样画葫芦下 STM32F429 discovery 也成功了
+ h: ~9 R& F" W9 o我先用 STM32CubeMX create 一個空的 STM32F429ZI Project(未规划任何Pins)/ \' R% G% |6 H& f& Y
用Keil开启 Project
2 {6 u3 `6 x* q$ b# ~: W' G, x, ^' t" ~. g3 q% K2 ^; b
再将 wambob大大的 code 搬上 main.c% G! V# l5 J4 d3 `, R( G& K
最后找出 LED pin 相關的暂存器即可
) ]1 ~1 n0 B( k' w" _% c( n' g, G$ s: D5 ^- f. ?- i
static unsigned char fac_us;$ w5 ?. S& k- r9 n# I9 K. I
static unsigned int fac_ms;
6 f8 L* u8 a* d" x6 u) \7 j# avoid Delay_Init(unsigned char SYSCLK)0 w" Q: X  V6 p- V# Q( B. H
{+ t9 E1 y& {- }* E7 j, Z
    SysTick->CTRL&=0xFFFFFFFB;
4 @3 m4 m2 o+ l/ Q7 L2 v    fac_us=SYSCLK/8;
1 `; [  s* j% e0 q+ `: c    fac_ms=(unsigned int)fac_us*1000;
1 U/ X8 X' H- ]4 ?& n7 {0 c1 Z9 G5 \; u}
- T2 D) ^) M. a( evoid delay_us(unsigned int nus)' S' F% h+ A* ^6 @
{                                     : D  u8 y  r2 m5 E3 |# q3 h& }
        unsigned long temp;                   , C, `7 D+ `0 I5 C2 s
        SysTick->LOAD=(unsigned long)nus*fac_us;  C4 `, G" g% X8 Z; @6 Y
        SysTick->VAL =0x00;           //?????
* |6 O1 p* x; H$ N2 }" z* e7 @$ [        SysTick->CTRL=0x01 ;          //????  : D! m$ h; \0 M0 R1 G2 ^
        do& k6 W/ R. H% b
        {
1 H0 m1 p" [: |, Z7 ?                temp=SysTick->CTRL;
7 ~8 T  K. g' G5 ~7 a9 e        }
% H1 n% j* n$ Q        while((temp&0x01)&&!(temp&(1<<16)));//??????   
2 C' Z) G1 X2 U, G$ `        SysTick->CTRL=0x00;       //?????
0 Z1 C) a& Z' T' p8 q        SysTick->VAL =0X00;       //?????                     
7 w( V5 j- F9 x) H4 S& t0 `1 h} . g( w( z% o4 `0 a6 f" w: f2 B

0 L2 h% J6 h* y9 {' h
* ?! v2 k0 e; j, }2 t& H1 qvoid delay_ms(unsigned int nms)# d* |* p, m( C: B9 o* h5 `
{                                     ' u& w) U8 Z7 ~, `: d
        unsigned long temp;                   & s# r- F; ~& n  z9 D& D8 E
        SysTick->LOAD=(unsigned long)nms*fac_ms;0 a  z8 U. e! P' ~
        SysTick->VAL =0x00;           //?????% {* v4 I* u- y* H( ?; u( k- Z
        SysTick->CTRL=0x01 ;          //????  
0 f- V* H( _3 W4 m) H2 m. Q        do6 X4 M; S9 ]( l6 B8 T* X# S& G
        {5 M( L% J; d" y) s( C5 i1 f* f$ A) f* t
                temp=SysTick->CTRL;
  K2 J% _# S& T$ x" R        }9 m+ e! L: I' O" Z/ V
        while((temp&0x01)&&!(temp&(1<<16)));//??????   
) W. u1 I# Y# u4 e0 K2 g& n$ _7 F        SysTick->CTRL=0x00;       //?????
/ T& W0 `8 J" z5 Q' u  j. m  k) \        SysTick->VAL =0X00;       //?????                     
0 C2 _  f: u1 [3 g5 k} ) [% |; ]7 \7 E0 f
/ H- @2 l7 a+ m" p0 J! K* ?% g
void LED_Init(void)
- J, N2 ]/ u- t1 B$ B{/ c/ Q! g9 L" N7 q! q- `
    RCC->AHB1ENR|=0x40;//1<<17;
1 T! F" \5 p+ a) r' s# t2 o7 }# K    GPIOG->MODER&=0xf0ffffff;
2 |7 t7 w6 v. P8 I  G# }    GPIOG->MODER|=0x04000000;   //怀堤
- w$ t7 y9 `; ^* |    GPIOG->OTYPER&=0xffffffef;  //芢侺
* y1 |$ {. t% A- j# G# q6 {    GPIOG->OSPEEDR|=0x00000c00;  //詢厒( g  t* [% W' O; P
}' a6 P% ]8 Z( C% `6 D

2 ^! O! u7 |( J: t  A3 x! T0 Oint main(void)
  f7 P; @: i3 I) n{5 H, c! Z7 C  e/ \7 v  R

5 c3 }1 H: n) O9 L% K4 j3 k7 h  /* USER CODE BEGIN 1 */$ {; t5 z4 |% Q# T
& l" Z- A1 k* i% ~4 U: b1 S
  /* USER CODE END 1 */
9 r1 _( j7 q. I0 v( s* K& W6 l( ~' \" `, x
  /* MCU Configuration----------------------------------------------------------*/: U. W% u, C  F1 \
. [, ]% ^3 I6 v4 E- y+ c
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
/ P: D5 q" ~# D8 _8 c; @' E' i  HAL_Init();6 |, O2 t7 D/ M" V; L! t
% S) i3 h. V$ r5 O  c
  /* Configure the system clock */
3 q0 t2 U# \2 a' }4 C! v) `  SystemClock_Config();
% b- b4 h, l2 U) M& c/ c  [: Z1 _' z3 R5 h' w
  /* Initialize all configured peripherals */
7 }  x/ ]$ M5 j) J0 b; t+ h
7 f. A; w+ P: ~! K* N  /* USER CODE BEGIN 2 */
: Q7 q. F) j4 h5 P0 b& h  v* U! Q0 v) q; f
  /* USER CODE END 2 */
9 Z. u/ P& B8 B# K* l! j
! g+ Z; T" U* S7 I  /* USER CODE BEGIN 3 */
& N, t! `, _3 z9 C  /* Infinite loop *// ]1 K, j) X$ M& F
        Delay_Init(48);
8 ~% P0 c- a/ i" i+ B  LED_Init();! z+ H1 I! w* F; G2 o

  e+ T9 X  D' ^2 p. a8 p5 g4 ^9 \  while (1)! J& ^5 ^+ e2 e& A# \$ n: m1 L
  {
5 ]8 l% O; M; ?% F: Y  z    GPIOG->ODR|=0x00002000;
* b* l, ~% a3 n6 R+ F. K    delay_ms(1000);
3 q% F4 [" h* q# G% T    GPIOG->ODR&=0xffffcfff;
& o. E' r& V. ?. c! l0 G* B    delay_ms(1000);
5 B- X3 l# W% \+ L9 r' B2 {. v4 H  }
. ]& h. N% X, R" Y* |# [7 B/ U  /* USER CODE END 3 */
2 @, w6 T6 g+ `& s+ D3 W' }- {4 ?0 K- C* V6 v
}
7 E! ~1 s: o* V2 Y. S
4 G! u" h: v8 K, l, X* ~

led2.zip

下载

4.47 MB, 下载次数: 0

Project

holts1 回答时间:2015-1-27 08:02:32
学习了…………
星辰一方 回答时间:2015-1-27 09:57:54
QianFan 发表于 2015-1-26 17:166 ~- Y* i) k  z4 C# ~9 h, |
如果不喜欢官方的库,可以自己封装一个。其实感觉官方的IO接口函数配置有点麻烦。自己写一个digitalWrite其 ...

; S6 L* z, n) z7 ]: T/ G3 \支持digitalwrite
wamcncn 回答时间:2015-1-27 12:53:30
mmttss 发表于 2015-1-27 00:40+ h3 }" c: a* T, q2 H) L; }( j
我依样画葫芦下 STM32F429 discovery 也成功了
) m+ E1 ]0 \+ }+ V我先用 STM32CubeMX create 一個空的 STM32F429ZI Project( ...

$ A- h( D- }" [) r, RDelay_Init(48);6 w+ T. D6 Y9 h# V
参数48是系统时钟,你可以改的,429的时钟是多少呢?
qianfan 回答时间:2015-1-27 13:03:29
wambob 发表于 2015-1-27 12:53
* R1 i2 ]0 x! h+ w+ sDelay_Init(48);
) _; [  q' u, g% B参数48是系统时钟,你可以改的,429的时钟是多少呢?
% l; o' v% u. \( Q. a6 I8 y3 H! e
标准的是180M
0 _% \$ m% @; g# X0 A( L1 h4 V
12下一页

所属标签

相似技术帖

官网相关资源

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