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

STM32F072的寄存器LED闪烁

[复制链接]
wamcncn 发布时间:2015-1-26 15:37
本帖最后由 wambob 于 2015-1-26 15:40 编辑
1 n. H+ l7 K2 \5 k8 z1 i! L" R. R) b1 d# _" a( z) T7 y5 U
看了网上视频的寄存器操作,又看了下072的参考手册还真和M3核不一样
; e7 o7 q8 Q1 v6 _GPIO口的时钟使能寄存器是AHBENR,5 l/ h( C( X( U
而GPIO口寄存器有4个32位的配置寄存器,分别是MODER,OTYPER,OSPEEDR,PUPDR.& K9 c. M5 e& x* q$ h
                             2个32位的数据寄存器IDR和ODR.
$ \6 L7 {, Y- R- i" h- x* K* l                             1个32位的设置/复位寄存器BSRR.: Q( @/ I1 R( f$ m! K) I
                             1个32位的锁存器LCKR  (PORA和PORTB).; }* X+ K! w# j5 o
                              2个复用选择寄存器AFRH 和AFRL(PORTA-PORTE).
7 T9 A7 G; t) Q, d: H072开发板上LED在PA5上;
4 y# d# }. @; ^) J9 ?' }. ?void LED_Init(void)
  s2 V- [9 `. Y0 z{
1 `& R: v/ q) x# v$ R0 `  B% t    RCC->AHBENR|=1<<17;
+ ?$ X& S: C& E8 G    GPIOA->MODER&=0xfffff0ff;
" f; X& p+ T2 @6 a, U" T* f    GPIOA->MODER|=0x00000400;  1 E, d& G0 ^  N6 t2 v5 `9 w' s7 t
    GPIOA->OTYPER&=0xffffffef;  & v6 R2 F' Y2 j& j# o3 |
    GPIOA->OSPEEDR|=0x00000c00;  - D- _% L5 ]+ u4 U- O
}1 T) ^0 T! `* W7 v

' v, V7 ~6 }: m1 q4 I' xint main(void)
5 N7 s' `( u5 b$ z9 r2 A4 _{              9 }: T% m! A5 L9 W7 `; Y
   
% S& S# ~- I6 C: QSystemInit();        3 x% N7 s4 h  m$ _7 p' k# H( v

5 s9 e! v& _" q4 K, f) k8 q0 v; |    LED_Init();9 X! Z* I  t# ^& l
    while(1)
2 n/ g6 ~, A. V; k# `+ g{ 3 c" H- {5 V: l1 c6 x7 {* ], Q
        GPIOA->ODR|=1<<5;
- l. p+ a& Y5 e        Delay_Ms(500);
  S6 p+ M5 \3 f6 i8 j" o2 H        GPIOA->ODR&=0xffffffcf;( [1 s. }) |* `; I
        Delay_Ms(500);) q* U) V: a  t  K7 p
      
" I' }4 F& U+ k  }
; q! u0 O' L9 |9 U" w3 ^  d+ _' F     }
" m) j( r% g& C7 h: ?. b   比起库函数老说,是不是很精简) H  p/ }( L- P6 f

# s- D( w" {4 W8 K$ e             ) \; u$ k& \# `1 p3 J3 H
        + x: C4 R: M. u2 J0 n
% z9 H1 E# s  L( t6 w

2 k$ \, }3 y+ L) w5 o' H
赞 收藏 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
喜欢这种直接点灯方式
% W6 j, s  v- c8 ]3 s1 W有工程包吗? 那些头文件需要被include? 这我还不熟
5 l  T0 }9 L9 Y$ s& {谢谢
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
4 G7 k2 i0 ^. P, {喜欢这种直接点灯方式
5 E/ O; A3 i* C; D8 O有工程包吗? 那些头文件需要被include? 这我还不熟1 v2 S+ F7 K% _' d# @0 b
谢谢 ...

, w, M& H) c5 n! t有,传上去了
( Z9 t. W6 _7 W

DEMO.rar

下载

1.13 MB, 下载次数: 2

mmttss 回答时间:2015-1-27 00:40:24
我依样画葫芦下 STM32F429 discovery 也成功了- y# S# U1 x( ~# K8 ^5 c+ E
我先用 STM32CubeMX create 一個空的 STM32F429ZI Project(未规划任何Pins)
" X' C& |+ a! n. ^) d5 j用Keil开启 Project* r3 P. v, ^5 x3 W6 S

& c7 Q2 ~6 R" u. V* L0 |再将 wambob大大的 code 搬上 main.c
( f3 F% W3 e+ F4 E9 F, |: `3 ]7 v% i最后找出 LED pin 相關的暂存器即可
$ J' Y0 A: ]# N
" v" u5 ^; g0 q& lstatic unsigned char fac_us;
3 W$ ]0 b, s: rstatic unsigned int fac_ms;; s; f7 g( ]; D( H, r0 s
void Delay_Init(unsigned char SYSCLK)- L& q% H8 x4 `3 R
{9 s: H7 I6 s8 u
    SysTick->CTRL&=0xFFFFFFFB;
4 m, P# B. @! U    fac_us=SYSCLK/8;
) E/ l$ j0 {- T( {3 Y; \9 }    fac_ms=(unsigned int)fac_us*1000;
: F0 \5 s2 s- d: h; k1 b}
' a/ L" W6 z9 h2 U8 O5 Fvoid delay_us(unsigned int nus)
5 A6 m) f& `1 b+ t6 N1 h! M{                                    
0 V1 x3 @5 o" B# `7 W        unsigned long temp;                   8 u+ r) V4 Z$ M/ V+ n/ Y* N
        SysTick->LOAD=(unsigned long)nus*fac_us;2 }2 v- m( [1 m* l
        SysTick->VAL =0x00;           //?????
! [3 l3 X1 e! E' b) R8 J' _  p        SysTick->CTRL=0x01 ;          //????  
3 d! L2 U. b6 i* T+ y        do
3 D  Z# P1 v- ?        {
& Z4 S) C9 x( \2 z& x; @6 f! e                temp=SysTick->CTRL;& y8 d& c4 I, m  v
        }
' N1 f+ ~0 ]4 l( w! \        while((temp&0x01)&&!(temp&(1<<16)));//??????   
! L  ~8 {6 e4 S        SysTick->CTRL=0x00;       //?????
3 {. l: [" Z1 ?9 S        SysTick->VAL =0X00;       //?????                     
* ?0 ]/ v. I  Y- T; |' E) Y2 \} " a7 p7 ~/ U. v' @
6 @. S5 ~) n8 N3 R  t

5 a7 |0 M0 g& N5 Bvoid delay_ms(unsigned int nms)
2 w& _. c% P0 H/ L$ C% f{                                    
2 f4 \1 b$ `) d% E7 \        unsigned long temp;                  
& W5 G+ X) Z9 d+ B' P* J2 X$ I        SysTick->LOAD=(unsigned long)nms*fac_ms;
2 K& ]7 u! h& x! z! r        SysTick->VAL =0x00;           //?????+ g: t& ~& K. H- u" o( q
        SysTick->CTRL=0x01 ;          //????  
, D# `; {6 T6 T1 P5 d7 B        do
* F( a  W5 m0 ~        {3 |4 {/ Q6 y. x* q8 I
                temp=SysTick->CTRL;
( V) M7 A# }$ p2 O$ n6 b, E. \        }
, [9 P& y& Q  V6 g& J' e; k        while((temp&0x01)&&!(temp&(1<<16)));//??????   
& [% P$ t. h. E        SysTick->CTRL=0x00;       //?????
+ [7 N; m  d8 v# x        SysTick->VAL =0X00;       //?????                      ) L) {, c' D& v
}
: j0 Y) {0 r. g+ @( J
2 B, V( F6 h9 e3 Y5 A3 ovoid LED_Init(void)8 _% ~" V( Z5 e4 u- a3 h
{
  c% ?4 N3 a' Z% z5 y! l, D  h    RCC->AHB1ENR|=0x40;//1<<17;8 |. G# \  K! z. h  @
    GPIOG->MODER&=0xf0ffffff;
  Y+ E2 H6 J& a2 [0 E    GPIOG->MODER|=0x04000000;   //怀堤' n7 R* ^1 b8 [
    GPIOG->OTYPER&=0xffffffef;  //芢侺; w' ^/ l& z/ \9 P5 ~5 ^' ^4 X# D
    GPIOG->OSPEEDR|=0x00000c00;  //詢厒
: K. e2 s6 o; k; |$ l}7 V4 n# @) p: g5 T9 Z% K
1 v! K0 _/ q& [/ d* V1 |& M9 n
int main(void). q% n6 y* @9 c" A8 j
{6 Q; I. D$ D: `/ j) d

" L3 c' H0 S( _* x" }8 @  /* USER CODE BEGIN 1 */) N! {4 ~7 _1 u' b7 A

( n6 W7 l; {6 X/ m1 t$ w  /* USER CODE END 1 */; {% n1 |* u; E( z, J* G

- R! [: ~1 L' {) f+ T- P  /* MCU Configuration----------------------------------------------------------*/% h- p: C' F" _( N
2 ?8 a  [" o; Q! E. |7 E; F
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
6 }+ K2 }5 K+ ?; t  HAL_Init();
4 X4 D+ E$ K% g' |$ g8 l+ s: I3 B+ _& ~5 m. J  s8 {/ Y# _
  /* Configure the system clock */' x2 C3 |0 g/ H, i+ Q5 _+ t7 v
  SystemClock_Config();
. k5 [4 R4 r* M- u8 N  X! y% j6 R% g* p( P* ]
  /* Initialize all configured peripherals */
4 o/ B+ F  g' W9 H: {7 F6 ^5 h/ i2 A: B# }
  /* USER CODE BEGIN 2 */; r6 e0 `6 t( M# C& U+ T
, M1 `; j  Q: m& F1 H) d) }
  /* USER CODE END 2 */
- b0 V4 `# x  F; e. a" E5 a6 F5 v  t( `' l! F
  /* USER CODE BEGIN 3 */: R/ C/ a# G8 U6 q$ j; h9 Y; c
  /* Infinite loop */
. r" k* t1 p  O" P3 m  a        Delay_Init(48);  U9 b. R1 D4 ^* |2 K
  LED_Init();: z0 n6 j- w6 B% _* @/ d
; o' L) P! |/ a2 W( {- b
  while (1)
/ T7 k! p; `  C8 D) Q$ d: c  {( E  v  W6 T" T4 ?5 S" M6 \
    GPIOG->ODR|=0x00002000;
. M6 Y7 a4 O4 Q' q6 s1 j    delay_ms(1000);8 `  P8 c$ ]! g' X3 }. @3 R% r
    GPIOG->ODR&=0xffffcfff;
. S8 {* t, S, E    delay_ms(1000);  A. g5 _. [- R- q
  }  |7 b  t: y; s5 O0 Y8 }% x
  /* USER CODE END 3 */
  X- ]6 `) O, Y, s
& m0 j8 v2 |4 e}; q4 S2 f9 u+ Z4 n: E
; d2 F6 X6 |$ H/ ~5 u. T

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& R/ H# ]! Q9 h2 h/ Y9 i
如果不喜欢官方的库,可以自己封装一个。其实感觉官方的IO接口函数配置有点麻烦。自己写一个digitalWrite其 ...
* q% Y, R2 k6 W9 [& t8 M, u
支持digitalwrite
wamcncn 回答时间:2015-1-27 12:53:30
mmttss 发表于 2015-1-27 00:408 i+ M4 M% E* L4 E5 L  {1 b  ~
我依样画葫芦下 STM32F429 discovery 也成功了
( S( z% I2 E; }$ m* ~我先用 STM32CubeMX create 一個空的 STM32F429ZI Project( ...

) ]9 D/ k! c, Y! X$ K" rDelay_Init(48);
/ h/ g! N% l2 G4 c; E8 J* B参数48是系统时钟,你可以改的,429的时钟是多少呢?
qianfan 回答时间:2015-1-27 13:03:29
wambob 发表于 2015-1-27 12:53( [' m* m8 Q- l6 a
Delay_Init(48);) q: n, r1 M' t0 a8 D# }# [) ?) E- z9 ?
参数48是系统时钟,你可以改的,429的时钟是多少呢?

9 M" F& M' s& M+ b5 y0 S6 ~; d5 q标准的是180M
9 b' I) w5 O! y% J" f1 c- ^
12下一页

所属标签

相似技术帖

官网相关资源

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