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

stm32新手入门之 01点亮LED

[复制链接]
feixiang20 发布时间:2018-1-15 20:33
1   LED闪烁实验/ H" V. v: d- {0 J5 ]

: L1 B! y3 m5 p- Y+ o2 }STM32 最简单的外设莫过于 IO 口的高低电平控制了,本次实验将通过一个经典的 LED 闪烁程序,带大家进入 STM32 的学习, 通过本次的实验, 将了解到STM32 的 IO 口作为输出使用的方法。在本次实验中我们将通过代码控制STM32 开发板上的 8 个 LED,实现闪烁灯果。 本次实验要学会如下:/ }4 g2 n5 g2 R$ {$ g4 b5 r
1、 知道 STM32 有几种 GPIO 模式,怎么配置。$ P% c  J+ F2 j8 }
2、学会设置 STM32 的 GPIO 输出高低电平控制 LED 灯。
+ F8 e8 c5 q6 M4 B
. y5 Q" n# R( ?4 w% |硬件设计+ {' F: }. k  |" C9 Y. G8 e( T; f
可以看到开发板上面 LED 的接线图如下,LED1~LED8 接到了单片机的PC0~PC7上面。
. c/ g% h4 H9 n( O# m
9 b. v3 O" ]. A/ H+ E$ S 1.jpg
+ V! Q. |. X4 Z( b9 S# P* \  `; Y0 w+ v. ~: b, D- f
2.jpg 0 G& D4 M: L2 a- r0 R
6 G5 |" B+ v. i/ F) j" K
从上面的原理图中,我们可以看到 LED 灯是接到STM32的 IO口的 PC0 到 PC7。点 亮一盏LED的原理就是把相应的IO口输出低电平, IO口 输出为高电平就能够熄灭 LED,要实现 LED 闪烁也就是将STM32管脚每间隔一段时间不输出一个高低电平脉冲即可。4 `  O2 I9 o0 P8 H7 }
STM32 的  IO  口简介/ ^# j2 w4 J# O6 a7 i! p2 A% L1 f, |
STM32 的每个 IO 口都有 7 个寄存器来控制。分别是:配置模式寄存器 CRL 和 CRH; 数据存器 IDR 和ODR;置位/复位寄存器 BSRR;复位寄存器 BRR; 锁存寄存器 LCKR。如果想要了个寄存器的详细使用,可以参考 STM32 中文参考手册.配置模式如图3,图4,图5
7 s. ?' @# U. n- w/ o1 b
! z# K1 D8 O% Q9 Q$ ` 3.jpg
6 V4 s0 a* F; }
1 G/ F& N9 o  @: M 4.jpg / h4 Z2 ?' m) P; U* Y! p  a
( {3 f( Z8 O5 C" @- x, A
5.jpg
" B8 f" Y% l. W+ j+ p& K# ~0 e6 Q8 v4 k* r, k1 Z/ |
控制 LED 的时候, IO 口可以设置为推挽输出模式。我们为 什么不用开漏输出来控制 LED 灯呢?其实推挽输出和开漏输出学过模拟电路的 应该都知道它的工作原理,一般来说推挽输出:可以输出高,低电平,连接数 字器件;开漏输出:输出端相当于三极管的集电极, 要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收电流的能力相对强(一般 20ma以内)。所以这里 我们选择推挽输出控制 LED 灯。
7 {. @, M! \; g  a$ I9 I+ i" K/ B& W$ L( H9 q# Y0 L& V! t
设置  GPIO (主要是基于库函数版本的)0 X4 T  R1 K2 R0 S" q$ ]
GPIO_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。一共定义了三个参数如下
* U! e; x% ^+ ^; q# f/ u4 c0 k- ]8 e, y! V0 c
1.   GPIO_Pin:选择要设置的 Pin 口。2 a; h1 r, Y: l  a
2.   GPIO_Speed:设置 IO 口的速率' L) X0 T0 B8 t, z8 S
3.   GPIO_Mode:选择要设置的 IO 模式。
  N4 E% w: C" x$ P( n# t, L& J, e* ~7 ^& T" h: b- P9 D
接下来我们来配置一下 LED GPIO的初始化
' Z! K' T6 o) E, p3 ~$ \% @; n* S' \- V1 b% d# `
6----.png . K( y/ E  v' J% {$ Q# h+ O# X

# I! }3 o# y7 u( N* F4 U% `接下来写一下 LED 灯闪烁函数。
9 I- ~% z0 O& Y8 \% Rvoid led_display()
+ ]3 N1 Q$ p# M8 o{/ Q' ]/ H, Y& L7 A8 m2 t% r
GPIO_SetBits(GPIOC,LED);      //GPIO PC0~PC7给高电平
8 w; f& m; b6 U  w' @  idelay(6000000);                     //延时约为 1s  这里的延时是软件延时,还没涉及到定时器 大家不要急
3 \  T0 D5 o: G& ]1 aGPIO_ResetBits(GPIOC,LED);   //GPIO PC0~PC7给低电平% L! @( W2 r5 z+ _3 B# t
delay(6000000);/ p/ O& L) L+ R3 b' z
}
6 B& K2 L% S  o这样就实现了对LED的闪烁实验是不是很简单& q8 l' J' w1 x0 l1 c7 C$ n
- c; h0 g6 ~$ W( w" F
收藏 评论1 发布时间:2018-1-15 20:33

举报

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

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版