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

stm32新手入门之 01点亮LED

[复制链接]
feixiang20 发布时间:2018-1-15 20:33
1   LED闪烁实验2 a4 s# N* u! W9 E3 d! h/ o! r, W
* B2 \- l9 }7 X( j% z- U& j
STM32 最简单的外设莫过于 IO 口的高低电平控制了,本次实验将通过一个经典的 LED 闪烁程序,带大家进入 STM32 的学习, 通过本次的实验, 将了解到STM32 的 IO 口作为输出使用的方法。在本次实验中我们将通过代码控制STM32 开发板上的 8 个 LED,实现闪烁灯果。 本次实验要学会如下:
3 B2 t$ ]7 z% [: m  o0 A% y8 d1、 知道 STM32 有几种 GPIO 模式,怎么配置。  x- U$ A$ B0 m, o+ J
2、学会设置 STM32 的 GPIO 输出高低电平控制 LED 灯。* o1 t: M  ]. @) Y; ~4 w7 c5 t
) X6 _! H' r' R8 B: o
硬件设计
* U1 \& e. t: m0 F' k可以看到开发板上面 LED 的接线图如下,LED1~LED8 接到了单片机的PC0~PC7上面。
3 G+ g8 p9 E1 D& |. M. K2 L& i1 D+ j( S
1.jpg ! s. D7 A& K! O1 }! x6 r' Y( a
( l0 Q, |" |- G5 C1 a) c' D
2.jpg
) x* ~& R5 x) L! S& }& E4 s" v9 s. m) O- R! ~  G$ F
从上面的原理图中,我们可以看到 LED 灯是接到STM32的 IO口的 PC0 到 PC7。点 亮一盏LED的原理就是把相应的IO口输出低电平, IO口 输出为高电平就能够熄灭 LED,要实现 LED 闪烁也就是将STM32管脚每间隔一段时间不输出一个高低电平脉冲即可。
1 W- h" w, O# {9 _STM32 的  IO  口简介
' w. p2 N3 A7 mSTM32 的每个 IO 口都有 7 个寄存器来控制。分别是:配置模式寄存器 CRL 和 CRH; 数据存器 IDR 和ODR;置位/复位寄存器 BSRR;复位寄存器 BRR; 锁存寄存器 LCKR。如果想要了个寄存器的详细使用,可以参考 STM32 中文参考手册.配置模式如图3,图4,图53 x; `3 G) k5 T6 E/ y1 U

. S& l5 d' G  Z2 [3 u5 g( f 3.jpg % ~) o, n' y3 M
& x9 l6 L  e# D  [
4.jpg
1 G9 Z" i' O# N; \6 g7 D; E
! t3 B" ~, f( G' m 5.jpg
/ I' z  |# c' w4 `5 x: y4 V5 U8 a
! X: t' O4 x0 ]) D$ v7 P5 i控制 LED 的时候, IO 口可以设置为推挽输出模式。我们为 什么不用开漏输出来控制 LED 灯呢?其实推挽输出和开漏输出学过模拟电路的 应该都知道它的工作原理,一般来说推挽输出:可以输出高,低电平,连接数 字器件;开漏输出:输出端相当于三极管的集电极, 要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收电流的能力相对强(一般 20ma以内)。所以这里 我们选择推挽输出控制 LED 灯。
1 Y4 [+ A* Z: @/ \) C4 X# D+ Y  V# N
设置  GPIO (主要是基于库函数版本的)
. W$ A0 j" x9 N/ T/ R7 t; Z7 NGPIO_Init( GPIO_TypeDef*GPIOx,GPIO_InitTypeDef* GPIO_InitStruct)这么个函数,通过调用这个函数我们就可以配置 GPIO 口的模式 了。具体可以参考库函数手册。简单介绍一下 GPIO_Init( GPIO_TypeDef* GPIOx,GPIO_InitTypeDef* GPIO_InitStruct)这么个函数。这个函数有两个参数,第一个参数是用来指定要设置 GPIO,取值范围为GPIOA~GPIOG,比如你要设置 GPIOB,那么就是 GPIOB。第二个参数为初始化参数结构体指针,结构体类型为 GPIO_InitTypeDef。一共定义了三个参数如下
0 c: B8 Y4 H- f5 j1 A# l1 e: g* W4 j6 Z3 U: `; n0 U/ z- x. t
1.   GPIO_Pin:选择要设置的 Pin 口。( B& [6 A- Z3 t, w: }
2.   GPIO_Speed:设置 IO 口的速率: G5 u0 `+ W6 `
3.   GPIO_Mode:选择要设置的 IO 模式。7 j+ p9 E/ T$ m6 \" D
; o. M: j+ ~" \5 a* C( g- U7 D
接下来我们来配置一下 LED GPIO的初始化! V$ I. J* y+ ]

9 {. ^" M7 E: g- t, o 6----.png 0 q) |. r! x+ Q8 T. z2 a

& o% |' y. _9 c# R0 o6 x接下来写一下 LED 灯闪烁函数。
3 H. h- H* F6 J( I; C, xvoid led_display()
; e% s3 M1 A/ f& p- V1 h# z) M- G1 r{
; V" e1 i( d4 @! v" ~9 hGPIO_SetBits(GPIOC,LED);      //GPIO PC0~PC7给高电平  k# j2 W& `" {7 h1 s1 `! `
delay(6000000);                     //延时约为 1s  这里的延时是软件延时,还没涉及到定时器 大家不要急  v' m. o- W& O  ]& l  m5 M5 O$ Q
GPIO_ResetBits(GPIOC,LED);   //GPIO PC0~PC7给低电平
/ F1 L$ b8 B$ F2 g* x& P5 odelay(6000000);/ i1 W6 ^2 V# _0 T4 \! b
}  M! N+ m1 o: v" f& b; a2 W( F
这样就实现了对LED的闪烁实验是不是很简单( h! E& {. E8 O6 l

1 |1 X) _9 G% S; y
收藏 评论1 发布时间:2018-1-15 20:33

举报

1个回答
anywill 回答时间:2018-1-15 21:14:38
学习与巩固

所属标签

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