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

stm32新手入门之 01点亮LED

[复制链接]
feixiang20 发布时间:2018-1-15 20:33
1   LED闪烁实验3 V/ H9 Z8 s7 B1 N: _. W
" p! o/ _; M/ C3 G; r# K4 [
STM32 最简单的外设莫过于 IO 口的高低电平控制了,本次实验将通过一个经典的 LED 闪烁程序,带大家进入 STM32 的学习, 通过本次的实验, 将了解到STM32 的 IO 口作为输出使用的方法。在本次实验中我们将通过代码控制STM32 开发板上的 8 个 LED,实现闪烁灯果。 本次实验要学会如下:
& N9 u5 y& }% d- t1、 知道 STM32 有几种 GPIO 模式,怎么配置。
" Y& \4 ]* T0 |( u2、学会设置 STM32 的 GPIO 输出高低电平控制 LED 灯。6 {7 g+ O1 B6 v8 Q
/ i( |0 ^+ \/ a4 J7 E5 c7 ^9 c# B
硬件设计
) H& c2 G4 w! P" j2 ^( M可以看到开发板上面 LED 的接线图如下,LED1~LED8 接到了单片机的PC0~PC7上面。2 A) ~' B0 G+ T8 g+ c( P
2 r+ }" k/ r3 D% U  c" j
1.jpg 3 Y4 x/ s  {$ L) b9 g/ y/ D

' I7 L$ r, Z3 q5 U- C( N 2.jpg 9 {4 f4 {  P2 j0 h: Q% F

$ ]- `5 B0 L% x; |( R# e从上面的原理图中,我们可以看到 LED 灯是接到STM32的 IO口的 PC0 到 PC7。点 亮一盏LED的原理就是把相应的IO口输出低电平, IO口 输出为高电平就能够熄灭 LED,要实现 LED 闪烁也就是将STM32管脚每间隔一段时间不输出一个高低电平脉冲即可。
8 R5 O6 J  {& J2 c+ T4 p* ]% tSTM32 的  IO  口简介' j  ^. |2 G% \, G& g5 C  N
STM32 的每个 IO 口都有 7 个寄存器来控制。分别是:配置模式寄存器 CRL 和 CRH; 数据存器 IDR 和ODR;置位/复位寄存器 BSRR;复位寄存器 BRR; 锁存寄存器 LCKR。如果想要了个寄存器的详细使用,可以参考 STM32 中文参考手册.配置模式如图3,图4,图5
0 ?0 J9 u) X0 G* }8 d0 M! [3 s
4 M9 ~# w4 v: `2 X1 N/ M 3.jpg
$ Z; S7 ?8 S$ a
- ]# ?; Q  Q, w6 A7 v2 W4 N! | 4.jpg # b+ d; R( J4 z6 p7 E' V

; A& F6 A! }: B 5.jpg
2 X1 F, L5 G- Y: Y4 _6 C  S
% Y7 n" m, T/ `9 I8 ?- w控制 LED 的时候, IO 口可以设置为推挽输出模式。我们为 什么不用开漏输出来控制 LED 灯呢?其实推挽输出和开漏输出学过模拟电路的 应该都知道它的工作原理,一般来说推挽输出:可以输出高,低电平,连接数 字器件;开漏输出:输出端相当于三极管的集电极, 要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收电流的能力相对强(一般 20ma以内)。所以这里 我们选择推挽输出控制 LED 灯。
+ c5 G7 N( z/ A6 u( y) x* g
: E0 u4 [3 q( ]设置  GPIO (主要是基于库函数版本的)/ d5 o1 s+ h" h, n7 E; J, F
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。一共定义了三个参数如下
$ |# b1 }8 ~8 j+ _8 T
2 L8 _; l# X! t9 |" T1.   GPIO_Pin:选择要设置的 Pin 口。
) r6 Z; g7 c, _2.   GPIO_Speed:设置 IO 口的速率( K; u3 p- ~8 B% M# |/ G( a2 R
3.   GPIO_Mode:选择要设置的 IO 模式。
, G3 |( U3 _+ P
+ Y- |" S2 s4 ^8 H' W接下来我们来配置一下 LED GPIO的初始化% S! U" _# r. C7 I) J3 G, Q
! t5 |, G5 {; J
6----.png : \. h' u3 R# L9 A

" a, z+ g1 b7 o3 f接下来写一下 LED 灯闪烁函数。3 s. c" Q# Q& G5 _7 Z- y
void led_display(); i* [6 b- c0 C7 u0 R$ q' j+ y
{0 [: ^: R- e: ?6 f/ Z
GPIO_SetBits(GPIOC,LED);      //GPIO PC0~PC7给高电平2 {# c' r) Q0 y# e; `
delay(6000000);                     //延时约为 1s  这里的延时是软件延时,还没涉及到定时器 大家不要急& ~  i) o: F8 N, l
GPIO_ResetBits(GPIOC,LED);   //GPIO PC0~PC7给低电平. q% {1 X1 s' n: H
delay(6000000);, w8 Z/ J$ p3 y1 a# T% |% D' O
}
# h% U; M+ l5 g! I' W/ O这样就实现了对LED的闪烁实验是不是很简单
- |6 K+ k: H1 g7 K7 r0 U: g5 Z6 I! s& `- G
收藏 评论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 手机版