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

STM32F072的寄存器LED闪烁

[复制链接]
wamcncn 发布时间:2015-1-26 15:37
本帖最后由 wambob 于 2015-1-26 15:40 编辑
( u# k. ^- D0 _: x: T& C% Y+ [0 ^% Y
看了网上视频的寄存器操作,又看了下072的参考手册还真和M3核不一样
  i3 V8 [  I: aGPIO口的时钟使能寄存器是AHBENR,, v) l7 h; Q% q( H
而GPIO口寄存器有4个32位的配置寄存器,分别是MODER,OTYPER,OSPEEDR,PUPDR.; U/ k( \2 V* g% m+ [  n4 M+ a: a* Y
                             2个32位的数据寄存器IDR和ODR.
# H* M) f7 Z. C                             1个32位的设置/复位寄存器BSRR.* g: F4 [/ ?4 Y1 F( M7 P- o& L
                             1个32位的锁存器LCKR  (PORA和PORTB).
$ V  X3 W0 N5 \% Z5 T                              2个复用选择寄存器AFRH 和AFRL(PORTA-PORTE).4 E" m) W4 ?2 U5 _* ?4 ^5 V
072开发板上LED在PA5上;2 g( v0 J  j' H9 x
void LED_Init(void)
1 d2 A. _2 q: l{
$ x( Z$ [9 ]% r% s$ {# n% [    RCC->AHBENR|=1<<17;' Y( R4 Z' k" ~
    GPIOA->MODER&=0xfffff0ff;
3 g: d( [" z% s0 i. ]- f: Y2 }' ?  ]+ u1 Z    GPIOA->MODER|=0x00000400;  
. G1 K& x' W1 }( v6 Y    GPIOA->OTYPER&=0xffffffef;  ) P! {! t/ M7 t) N9 u
    GPIOA->OSPEEDR|=0x00000c00;  ' b2 P5 A- x9 l  j. ]" U( {
}2 v8 s; {5 O0 J1 u2 T

: q1 c# H, k$ T1 M6 s- Hint main(void)- [5 `% `0 N. u
{              + [1 }1 Y' J/ }$ F8 ]
    1 b! C5 d7 y9 ~. D* ]; q; g# I4 y
SystemInit();        8 p0 P$ [; \" I. R6 r$ u" l8 w& W

7 P, w7 E' Y  ~    LED_Init();
) {2 ~6 |1 e" E8 ~/ n    while(1)% s" F2 x2 t1 }) A6 G* u" I
{ / [1 c' J% B4 e; d, x' Y5 C! j
        GPIOA->ODR|=1<<5;9 k  `" \' {8 O. ]
        Delay_Ms(500);
' o* m6 q) i) q9 z: e6 P* ]        GPIOA->ODR&=0xffffffcf;3 H7 C+ Z( K0 D& z- f$ r
        Delay_Ms(500);  E5 H, [3 z4 q$ p+ H
      
. a' X, u/ i+ W2 G% N- T  }; w; F# A1 h# |" j" T6 o8 A
     }
$ u' v2 G2 }/ Y3 y$ `   比起库函数老说,是不是很精简1 Q1 X2 i1 W( \* x# a

) S& p4 F2 Z0 p            
$ t( ]  \+ d  H$ Z  k, `  [        7 A' [/ D4 c5 U# }: Q- V

" N2 s7 G7 Q+ r: L: j0 \- O7 Z! 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
喜欢这种直接点灯方式% t# {( A( c5 M- E% u, S5 T
有工程包吗? 那些头文件需要被include? 这我还不熟
5 f. y4 D4 ?* D* \/ h. L谢谢
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:499 u& x4 |$ @1 W$ T/ x0 {! `
喜欢这种直接点灯方式
$ [  ^* {& s  C' F. n有工程包吗? 那些头文件需要被include? 这我还不熟9 t9 {/ N# ?, ]
谢谢 ...

6 ^' ~# s) j( t3 O1 t6 |0 Y有,传上去了# O7 e' U% [) G$ c7 E$ l

DEMO.rar

下载

1.13 MB, 下载次数: 2

mmttss 回答时间:2015-1-27 00:40:24
我依样画葫芦下 STM32F429 discovery 也成功了
+ j) u. o6 j( X) Y* @2 [我先用 STM32CubeMX create 一個空的 STM32F429ZI Project(未规划任何Pins)' H% @0 N0 ~2 b8 S8 I" t
用Keil开启 Project  f/ y$ t# {& |" P; L! R# s
" f* I- r  U) J( [& n# Q4 ~' P
再将 wambob大大的 code 搬上 main.c
+ k) ]; o* [1 }& H最后找出 LED pin 相關的暂存器即可
- b) A- m( @4 w4 }6 E+ s5 E. w1 }6 \! ^. g  T
static unsigned char fac_us;3 j" t& w- ?/ f, K5 ~
static unsigned int fac_ms;4 ]( X9 [" U, g; w$ ^
void Delay_Init(unsigned char SYSCLK)
  h, F, |( C5 V( W# c% Q% u. f{
: Y8 G( ?3 {6 {    SysTick->CTRL&=0xFFFFFFFB;
& U4 a! C, V& B9 d9 N2 E% F    fac_us=SYSCLK/8;
$ r  K9 x  R. I    fac_ms=(unsigned int)fac_us*1000;
: x6 Q" o3 P$ t9 h, P% e* n; V}
! J: \( A  X6 R6 g& b9 [void delay_us(unsigned int nus)
+ F0 e! h! n% b* P{                                    
2 P# x6 h, X2 P        unsigned long temp;                   0 W: ~6 i, L8 l
        SysTick->LOAD=(unsigned long)nus*fac_us;, J+ R& m2 F+ r/ @! q9 P
        SysTick->VAL =0x00;           //?????
0 G! K6 t) A& q# |8 @$ Q. j        SysTick->CTRL=0x01 ;          //????  
* T7 n5 [, L4 k7 C4 [3 b5 J7 a- r        do
( a3 a; |3 X' F        {% K8 D1 U# y: A: M3 S& n
                temp=SysTick->CTRL;3 x$ {6 K" A! g$ s) C
        }
* _0 @5 S# _* h1 x3 X5 R, r        while((temp&0x01)&&!(temp&(1<<16)));//??????   
7 T5 Z3 y/ S6 s# j# _) B8 G" A' @        SysTick->CTRL=0x00;       //?????  W& U- ?# }! j( U9 l8 d
        SysTick->VAL =0X00;       //?????                      . g+ U0 a; s. ]# s4 ^
}
- r" D4 @) t6 r/ V6 r
- G2 S2 o6 X7 J: C
0 J, ^) @* {4 J' \- Tvoid delay_ms(unsigned int nms)8 }. _$ w3 @$ V2 i) W6 j
{                                     + J. D  [' P" z
        unsigned long temp;                   . |) t3 L$ C, Y
        SysTick->LOAD=(unsigned long)nms*fac_ms;
1 z! B" l0 E8 M. j8 r( Y3 O        SysTick->VAL =0x00;           //?????9 q' N! ^/ k  ?5 M, t
        SysTick->CTRL=0x01 ;          //????  
, q( q. y7 E" o& w" x        do
: r8 v1 i& l8 Q1 @, s9 K5 g        {# z* H2 s5 b6 u8 |4 a1 E; }9 }
                temp=SysTick->CTRL;
# M) [$ G- I# ^- `( O5 ^# b; W        }  Y! b+ Y1 T- e$ @+ D+ R! U4 o7 B
        while((temp&0x01)&&!(temp&(1<<16)));//??????   
) |2 i# Q2 A# i: Q/ _        SysTick->CTRL=0x00;       //?????
1 C/ T" N( ]( y& z$ m        SysTick->VAL =0X00;       //?????                     
5 Y# u- r2 Q: r) }} . }1 e2 ?6 j. {

4 x0 A1 t; y) u( n( T' l$ qvoid LED_Init(void)0 r/ L6 e1 _) Y; ~" S
{3 b1 k! B+ e, F1 v+ r
    RCC->AHB1ENR|=0x40;//1<<17;; P. {- t: s# P4 m& g
    GPIOG->MODER&=0xf0ffffff;6 M/ t0 ]" i8 k  y0 g
    GPIOG->MODER|=0x04000000;   //怀堤
3 j0 ?# T! O$ x) |9 s2 W+ c, A    GPIOG->OTYPER&=0xffffffef;  //芢侺6 R. _& N, i4 d0 i. E5 G4 |. f
    GPIOG->OSPEEDR|=0x00000c00;  //詢厒! F& L# b5 ?2 \/ b; l* K
}) Q( V( ^% b8 ]4 ~

0 z* `% B3 P$ a0 G* S' Yint main(void). A/ K) X; o! p
{
" V7 {5 \+ P0 x0 L$ Z
+ |! W! ]. n+ |+ c+ k- F9 S: R5 V1 i  /* USER CODE BEGIN 1 */( v4 z! V  l8 Z2 x. i

4 n7 y6 a; n0 I" `* Q  /* USER CODE END 1 */
+ U( o4 d3 \( z7 Y9 L2 _+ o( S
7 s9 y" Y- J' I* q  T  /* MCU Configuration----------------------------------------------------------*/
: k( g8 }& J2 Q% x* J& S' B
- V, [( d0 X: c  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
( Z2 t) F$ l1 ]9 N- j5 a  HAL_Init();
4 W4 P/ F0 t2 y
& p1 p5 W4 G3 k$ I+ Y9 t. M  /* Configure the system clock */
, R5 `6 k+ ^6 d2 q; n  SystemClock_Config();# I* n8 r1 Y- V' r

. A9 G" j2 L$ R  /* Initialize all configured peripherals */
- M2 r/ P3 ]5 u4 s- X; y  |# v
$ c/ A" V. V+ k  /* USER CODE BEGIN 2 */
$ W2 Y) E" g# A+ M/ n# X0 z6 N, C' k7 `% k7 h8 G
  /* USER CODE END 2 */6 S* j% u) ^  A3 q
% o6 P2 t9 R: g
  /* USER CODE BEGIN 3 */; h; M! ^7 H% q# P
  /* Infinite loop */) O# T) [/ G# R( E+ R. m5 J' i' ~
        Delay_Init(48);/ T- e2 e" E" c7 T3 X6 ^3 [
  LED_Init();
. r% ?& t, K3 f) L3 l8 K" j5 r
# c. m( m/ o: C% U  while (1)
. B* ~3 x, y3 s- Q+ H" s  {
7 b3 Z3 f' }8 g) n- ?    GPIOG->ODR|=0x00002000;( c  f) \4 R% S; t5 x
    delay_ms(1000);; b' r! P6 C, q. K+ |
    GPIOG->ODR&=0xffffcfff;
* n3 V) B: D2 O' r& P5 |  W6 z. ~    delay_ms(1000);
( I& u1 S, H) y: b2 `6 r8 F  }
+ r6 D& t- |& W1 @8 x7 s$ T; e9 v  /* USER CODE END 3 */7 r+ ~* r8 S$ [+ e0 F
6 a3 z0 W3 L% }% ?  ~) z. p+ \
}
1 M) U5 A* B) V9 E3 A8 d& g4 z4 Z8 Y! {3 c" 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:16" h7 P, }# |( `4 U) R
如果不喜欢官方的库,可以自己封装一个。其实感觉官方的IO接口函数配置有点麻烦。自己写一个digitalWrite其 ...
, L; X( d1 u" i, E  G
支持digitalwrite
wamcncn 回答时间:2015-1-27 12:53:30
mmttss 发表于 2015-1-27 00:40
9 o2 }2 W) k' w& ^  o我依样画葫芦下 STM32F429 discovery 也成功了
. M/ `! R* k  t  K6 F* I- Z我先用 STM32CubeMX create 一個空的 STM32F429ZI Project( ...

8 s' A# B1 \0 X& w: k6 Q5 o1 e0 @Delay_Init(48);( j4 |! \$ P' u
参数48是系统时钟,你可以改的,429的时钟是多少呢?
qianfan 回答时间:2015-1-27 13:03:29
wambob 发表于 2015-1-27 12:53
6 {! k0 Q) C# `  d& h7 X- TDelay_Init(48);9 S3 F, y3 v1 {8 f2 \  K+ l* l0 q' c
参数48是系统时钟,你可以改的,429的时钟是多少呢?
! b7 @1 A% g/ \% S, R
标准的是180M
/ L1 A  B$ P# Q6 V: F6 t
12下一页

所属标签

相似技术帖

官网相关资源

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