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

STM32基础设计---点亮LED灯

[复制链接]
STMCU小助手 发布时间:2023-1-5 21:17
首先,总结全文,用STM32f103c8点亮LED的大概步骤为:. @7 C* H) I5 @" k& p, z
1.定义GPIO口结构体9 s8 y. k: S% ~8 v- P( A
2.使能相关gpio口的时钟
6 z9 ^  J: \/ P3.如果GPIO口有其他重映射功能,先失能其重映射。
$ ^# A7 A! T/ U* h4.操纵相应GPIO口,实现LED灯的亮灭。
1 P& ~, a8 e; N& {- a* Q3 w6 K
下面详细解释具体步骤:
5 x" C- o  x. p( `
& |8 ~* A* K( p" z5 d% j6 Q1,定义GPIO口: ]1 T5 s# v2 X% S8 `+ I3 x
库函数中GPIO结构体:* [4 \( Z. l3 H; b
  1. typedef struct
    8 f; a. v* k: l7 u
  2. {4 G, z; x5 |, d' z
  3.   uint16_t GPIO_Pin;             /*!< Specifies the GPIO pins to be configured.
    " K' t3 e# q2 l# k) d7 Q
  4.                                       This parameter can be any value of @ref GPIO_pins_define */
    4 j, o. ?" W6 }

  5. ) z/ R8 \! s2 Y$ [
  6.   GPIOSpeed_TypeDef GPIO_Speed;  /*!< Specifies the speed for the selected pins.! i- p+ H3 u- A. E0 v( R6 m
  7.                                       This parameter can be a value of @ref GPIOSpeed_TypeDef */
    2 d2 h8 F# Z2 y& n1 ]
  8. , Z9 i. z5 C# u' x( {! e. j" P
  9.   GPIOMode_TypeDef GPIO_Mode;    /*!< Specifies the operating mode for the selected pins.- R+ f% I, y8 k" y% M6 z  M
  10.                                       This parameter can be a value of @ref GPIOMode_TypeDef */
      h2 r1 i' d6 |" f/ `6 b2 w
  11. }GPIO_InitTypeDef;
复制代码
! P% s/ y' |2 _# C; r! j+ H
根据库函数,博主是这样定义的:6 O1 F7 Q: f+ X

# [+ K# `* [: e( O9 z
  1. GPIO_InitTypeDef B_IO;
复制代码

0 P) z  I" W) [2 R/ Y" @/ y6 d6 c" g
根据此结构体就可以明确使用GPIOx口的某个引脚,引脚的最大速率以及引脚的使用模式。. ~1 Z2 |! [; q, Y+ {
) [9 R! ?0 C! T: w
模式分别有:模拟输入模式,浮空输入模式(复位口的状态)、上拉/下拉输入模式、通用推挽输出模式、通用开漏输出模式、复用功能推挽输出模式、复用功能开漏输出模式。  d7 b1 S8 |; w: y9 r
& L: o  `3 d3 r/ S
速率可根据相应要求,设置为10Mhz、2Mhz、50Mhz。# ]8 R! O9 q. u$ L
: O) U& z+ W4 l, k) q( K7 E2 [
接下来给GPIO口赋值:
9 u9 R  ^4 |' l3 @. ^; }+ X8 d
* n5 p& b, ~5 Z% d, q0 ~$ ]7 b) v! H
  1. B_IO.GPIO_Pin = GPIO_Pin_3;
    5 c8 \( {5 S% f$ a8 u# x9 s3 l2 u
  2. B_IO.GPIO_Speed = GPIO_Speed_50MHz;3 A, `+ {9 j& W) q4 y
  3. B_IO.GPIO_Mode = GPIO_Mode_Out_PP;//此为推挽输出
    $ y/ w1 F+ m- X- r/ T
  4. GPIO_Init(GPIOB,&B_IO);//通过GPIO_Init()函数初始化GPIO口。
复制代码

/ K+ A  b) C8 C2.使能相关gpio口的时钟
& U. s, @0 G0 i8 m  h3 ]9 V6 `5 i" e. S
函数库中相关的函数为:: _7 a: P) }7 k& E8 B0 J+ k, c4 ]
: i7 @9 v3 v2 `4 a0 l9 Z
  1. void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
复制代码

6 s/ _5 P  D% a% A/ C, s7 B. M详细内容请自查。
$ i1 v  C/ N$ f7 {7 t+ _$ d5 I* Z0 \" u/ u; {0 V
博主用的STM32板子上GPIOB的第3引脚连接了LED灯,但是根据STM32中文手册,这个引脚重映射了,所以要关闭其重映射,才可以用GPIOB_Pin_3引脚。8 b% Z& [8 Z5 y# W. i. }: A
9 |: X! f/ q1 Y+ g! E
2018031719363616.png $ |, J8 @2 f- f2 P
& p  }( D' W# D1 J4 A7 @5 M# [
调整引脚映射需要用到这个库函数:4 C: L" v- t8 `( Y) D0 j+ [
$ J& B' e( d4 A/ Z, ^' S5 @' Y
  1. void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)
复制代码

' |3 ]- x0 ?5 ~另外,对寄存器AFIO_MAPR,AFIO_EXTICRX和AFIO_EVCR进行读写操作前,应当首先打开AFIO时钟。5 z" [& H4 v# |2 |$ G( T8 }
AFIO_MAPR:配置复用功能重映射
- ~# S) n5 X) L! c

6 Z4 p& G& B2 @5 a; L+ z1 b  P  MAFIO_EXTICRX:配置外部中断线映射
* @5 w0 R' h- T* _# L( |3 D' R

$ ]) S2 e2 }& \" f) v$ o# XAFIO_EVCR: 配置EVENTOUT事件输出
; s; ]/ I1 \4 N( J* _% c, T* X: p8 p6 P
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);       
    2 I0 |& B( B& ]( ~
  2. GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
    & p- e. m6 A9 b3 m- j
  3. GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
复制代码
& a; o9 U  {/ p1 R1 Q! v' R
4.控制引脚信号,实现LED灯的亮灭( F0 S; D9 a2 z& O( S
定义了GPIO口变量,又使能了时钟,这样相关引脚就可以直接控制了。9 d9 v* S+ \9 y/ y. G& Y

5 G. J9 ?. L  `7 n
  1. delay(1000);
    # f9 ~( _( c. a
  2. GPIOB->BSRR = GPIO_Pin_3;//Pin_3置1
    ( m4 _) r) m- u  Y' o
  3. delay(1000);
    ) `* \+ n2 W( X/ j+ E+ q
  4. GPIOB->BRR = GPIO_Pin_3;//置0
    ( x7 W) J, }8 j- M
  5. delay(1000);
    : ?, G$ G8 g% D9 ^
  6. GPIOB->BSRR = GPIO_Pin_3;
复制代码
) P1 g' F2 c2 z
可以通过GPIO寄存器BRR、BSRR来设置相关引脚的信号。) U; P8 E6 P' J9 E! r$ j
+ Q) c+ x, c+ U+ d
简单地说:7 D  c, h3 Z* G* h- U0 t
  S, [8 Q" O2 O6 s# p$ a8 i/ \' @. m
对于低16位而言,BRR是用来置0的,BSRR是用来置1的。) @5 J  D8 Y4 h3 r0 D

" ~. p1 h% D1 m0 }$ y  @对于高16位而言,BRR的高16位保留,BSRR的高16位是用来置0的。
) H' [. O  n6 k  `8 `- a! o! k: O5 V$ j( [& Y
具体的请自查STM32中文手册115页。" [6 D* m7 `) I1 R0 z& _

# p9 Y- M9 k0 ^" }/ |; O! v2 ]( M, \. I因为PB3引脚接着一个电源,故PB3为低电平时灯亮,高电平时灯灭。: p* H! c' E, Z8 N2 c$ D
3 F2 Z5 i$ P' x& r- c' @; ~
详细代码如下:
) |9 v, O. [: D/ q  z* K
  1. #include<stm32f10x.h>6 O( T# B. d- d: [% j, F" P  L
  2. #define uint unsigned int
    . j8 l! M4 V. ^
  3. #define uchar unsigned char3 J0 t$ ]4 a: D4 S6 `
  4. void delay(uint n)
    4 }: x% O( e  L/ q
  5. {
    + ^8 z9 r8 S0 g3 w" W4 `
  6.         int i,j;6 m+ R# M6 D. n9 a9 f, @
  7.         for(i=0;i<n;i++)" _* D" j+ `6 ~3 ~4 v" x4 l  w: N
  8.                 for(j=0;j<8500 ; j++);5 g' Q4 x& O, B( d# c" \
  9. }) a4 o- t3 P7 L) V4 F7 `3 [" p
  10. int main(void)' m8 h% o5 W' ~' n% L
  11. {
    : V' q6 G5 |$ c
  12.         GPIO_InitTypeDef B_IO;" ~4 f4 f/ j: I7 y4 ?  @
  13.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
    : {- V. [$ d8 N+ f; m( e8 f
  14.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
    : s5 l; W+ ]1 ~6 r
  15.        
    " ~- h( I# r. H+ G  i& K
  16.         GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
    . U$ A6 X! L* c: l8 N6 R
  17.         GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
    # L3 f( T/ M! ^$ }! D; p
  18. 5 B0 d/ a0 j3 h5 J2 I
  19.        
    3 o) l2 r* b- r) C+ E
  20.         B_IO.GPIO_Pin = GPIO_Pin_3;
    ( `3 V- Y5 y( H9 N
  21.         B_IO.GPIO_Speed = GPIO_Speed_50MHz;7 P+ Y7 K& L" _6 \
  22.         B_IO.GPIO_Mode = GPIO_Mode_Out_PP;
    1 e& {% D7 J2 S. d  r/ Y3 O+ L# \
  23.         GPIO_Init(GPIOB,&B_IO);
    ' `; @/ H: b- N% o6 Z2 I1 l
  24.         7 y" b* T" B: A8 t
  25.         GPIOB->BRR=GPIO_Pin_3;
    5 A! w; L- x7 U2 u
  26.         while(1)
    8 J4 W$ p& j6 N! S4 h+ u6 a
  27.         {( A; Y$ t. A9 p( T# x# ]8 e
  28.                 delay(1000);
    , r% W) W) o, Y- C6 O
  29.                 GPIOB->BSRR = GPIO_Pin_3;4 M+ r" _- P4 h$ `) V
  30.                 delay(1000);2 U4 C1 `/ n5 ~" Q
  31.                 GPIOB->BRR = GPIO_Pin_3;6 S, J: ~  |; J5 p* ]' ]& T
  32.                 delay(1000);
    8 B- M" M6 v4 u) _! E
  33.                 GPIOB->BSRR = GPIO_Pin_3;
    + `+ Q( o; F: P5 m) g0 |) i) y; c$ `3 u
  34.         }% |8 y4 q' m' Q% [  x5 ?- h
  35. }
复制代码

! d7 U9 Q) z% J: |————————————————/ s5 J2 T' A2 ^( W5 r) L
版权声明:家安, @* `1 ^0 A0 j& z; L% [
+ T. Z# U% c. a2 @# j
3 K- F/ F, e  B  F
赞 收藏 评论0 发布时间:2023-1-5 21:17

举报

0个回答

所属标签

相似技术帖

官网相关资源

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