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

stm32新手入门之 01点亮LED

[复制链接]
feixiang20 发布时间:2018-1-15 20:33
1   LED闪烁实验
& K/ p: t  W+ F& ~3 m& n7 B1 }, E: b/ v5 c
STM32 最简单的外设莫过于 IO 口的高低电平控制了,本次实验将通过一个经典的 LED 闪烁程序,带大家进入 STM32 的学习, 通过本次的实验, 将了解到STM32 的 IO 口作为输出使用的方法。在本次实验中我们将通过代码控制STM32 开发板上的 8 个 LED,实现闪烁灯果。 本次实验要学会如下:& D+ ^# Q$ X$ W% E% S! l) c. }% [. i
1、 知道 STM32 有几种 GPIO 模式,怎么配置。- r, X# |  W/ O* R8 K) O# i( j: s3 P
2、学会设置 STM32 的 GPIO 输出高低电平控制 LED 灯。8 L. U1 d$ [8 A7 ?  r

0 b  g$ M% J# [硬件设计
6 ?; O1 Z6 |# g1 u可以看到开发板上面 LED 的接线图如下,LED1~LED8 接到了单片机的PC0~PC7上面。+ f) l. n8 Y/ Y0 e
4 e- B; f7 R, p
1.jpg
4 ^  j  E9 e; W8 v  ]9 ~# ~, ~
9 K# u" t8 Q) R4 o$ l4 f 2.jpg 7 E: v7 I# M, I# ]3 w. d

- I0 J- [+ {: T) [) e7 f从上面的原理图中,我们可以看到 LED 灯是接到STM32的 IO口的 PC0 到 PC7。点 亮一盏LED的原理就是把相应的IO口输出低电平, IO口 输出为高电平就能够熄灭 LED,要实现 LED 闪烁也就是将STM32管脚每间隔一段时间不输出一个高低电平脉冲即可。- w0 C1 @3 |" o& \1 f6 x
STM32 的  IO  口简介
/ M2 I0 W/ k/ _STM32 的每个 IO 口都有 7 个寄存器来控制。分别是:配置模式寄存器 CRL 和 CRH; 数据存器 IDR 和ODR;置位/复位寄存器 BSRR;复位寄存器 BRR; 锁存寄存器 LCKR。如果想要了个寄存器的详细使用,可以参考 STM32 中文参考手册.配置模式如图3,图4,图5' W/ T8 d( A/ H- l4 _

* E9 C6 ]/ d+ r 3.jpg & x+ b3 u' ^- S6 j7 J: b

: c5 b; x. A8 W( ?3 |, Q7 f 4.jpg & J+ _! P6 n2 f9 E8 ~& ~" O

' T+ t5 `3 l* K7 r( A# @ 5.jpg ( A( T# W! W( }4 Q9 ~7 z

# P- i" o% B4 m2 G" K( j# A- ^: S8 j控制 LED 的时候, IO 口可以设置为推挽输出模式。我们为 什么不用开漏输出来控制 LED 灯呢?其实推挽输出和开漏输出学过模拟电路的 应该都知道它的工作原理,一般来说推挽输出:可以输出高,低电平,连接数 字器件;开漏输出:输出端相当于三极管的集电极, 要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收电流的能力相对强(一般 20ma以内)。所以这里 我们选择推挽输出控制 LED 灯。
9 r: L( T3 D5 ~  `; K
/ e% Z  }' k+ k6 ]设置  GPIO (主要是基于库函数版本的)
! p) l; `. `% g8 |$ G% WGPIO_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。一共定义了三个参数如下' T" c0 [( d( d. s2 M  Q1 \
, T9 A3 K$ i4 s! b4 p
1.   GPIO_Pin:选择要设置的 Pin 口。
, |3 |$ W& \2 i- S  o2.   GPIO_Speed:设置 IO 口的速率) E5 M* l0 u) L
3.   GPIO_Mode:选择要设置的 IO 模式。
0 [  B5 x$ m& N; I) h( P5 ?9 z, |: x* \
接下来我们来配置一下 LED GPIO的初始化
. T9 e# O- M6 g4 n
; s% H1 @, E- p7 i 6----.png % u( ?7 u5 `% z0 T1 _; [/ T
% i/ Q% T  _* m/ \; ]
接下来写一下 LED 灯闪烁函数。/ U$ _4 O9 M) M4 K# H& p% H
void led_display()
; t) w3 V+ l: y{$ C$ Q  t) c2 `, V# y7 r1 ~1 e* k3 J
GPIO_SetBits(GPIOC,LED);      //GPIO PC0~PC7给高电平
8 d! ~2 i. H! e+ v- tdelay(6000000);                     //延时约为 1s  这里的延时是软件延时,还没涉及到定时器 大家不要急
9 s3 J# {8 w3 D2 q( SGPIO_ResetBits(GPIOC,LED);   //GPIO PC0~PC7给低电平& Y6 _4 e* t: I' Y  e, h
delay(6000000);2 X% H7 p( ]7 S" t. Z
}
8 l) [5 H+ F* C1 Q% f1 B这样就实现了对LED的闪烁实验是不是很简单
1 U2 I# n" ?# B& I$ H, V3 L0 d6 q+ ]8 `) c6 {1 w  k0 |
收藏 评论1 发布时间:2018-1-15 20:33

举报

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

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版