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

stm32新手入门之 01点亮LED

[复制链接]
feixiang20 发布时间:2018-1-15 20:33
1   LED闪烁实验
/ O. I0 V3 h$ X9 p6 t2 Z9 m* A  Q9 E6 k, U7 ]8 m
STM32 最简单的外设莫过于 IO 口的高低电平控制了,本次实验将通过一个经典的 LED 闪烁程序,带大家进入 STM32 的学习, 通过本次的实验, 将了解到STM32 的 IO 口作为输出使用的方法。在本次实验中我们将通过代码控制STM32 开发板上的 8 个 LED,实现闪烁灯果。 本次实验要学会如下:/ {; Z8 y4 K5 L3 b' M
1、 知道 STM32 有几种 GPIO 模式,怎么配置。
2 w. F( m: s; |. Q2、学会设置 STM32 的 GPIO 输出高低电平控制 LED 灯。$ l* ]; `( W  c0 m

; E; K* K( j/ r6 ?1 P硬件设计# T/ Q( A( @! v/ J3 r7 q# X2 d2 H  B
可以看到开发板上面 LED 的接线图如下,LED1~LED8 接到了单片机的PC0~PC7上面。  j9 `9 G" A7 t, ]$ s" p; o

* W8 w. X" A9 }$ F 1.jpg 1 c5 ]- b, s  M; ~, c
2 M" E& J- G% ]: N8 p5 L* s- V$ W" o
2.jpg 9 W! w. v" ], Z- ?2 @

% ~. J8 A- `/ h7 l# H$ v从上面的原理图中,我们可以看到 LED 灯是接到STM32的 IO口的 PC0 到 PC7。点 亮一盏LED的原理就是把相应的IO口输出低电平, IO口 输出为高电平就能够熄灭 LED,要实现 LED 闪烁也就是将STM32管脚每间隔一段时间不输出一个高低电平脉冲即可。
0 _6 ^6 _1 A: `# b/ z3 O2 zSTM32 的  IO  口简介
+ L: h+ J4 p7 t/ w* F1 n: rSTM32 的每个 IO 口都有 7 个寄存器来控制。分别是:配置模式寄存器 CRL 和 CRH; 数据存器 IDR 和ODR;置位/复位寄存器 BSRR;复位寄存器 BRR; 锁存寄存器 LCKR。如果想要了个寄存器的详细使用,可以参考 STM32 中文参考手册.配置模式如图3,图4,图5
. ]. f% P8 j/ O
0 g1 M' A1 Z0 A( O: r 3.jpg
% Y& t# M0 G/ w+ k
" H0 G8 R! g) f# C8 k7 E: d 4.jpg
2 Z) g! G$ h. e4 [6 q6 R: N" `- g2 c# ], d* m
5.jpg
$ s6 B: N# u8 z0 ]% l4 A2 G
% r% \- h  R7 Q3 t9 u0 @控制 LED 的时候, IO 口可以设置为推挽输出模式。我们为 什么不用开漏输出来控制 LED 灯呢?其实推挽输出和开漏输出学过模拟电路的 应该都知道它的工作原理,一般来说推挽输出:可以输出高,低电平,连接数 字器件;开漏输出:输出端相当于三极管的集电极, 要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收电流的能力相对强(一般 20ma以内)。所以这里 我们选择推挽输出控制 LED 灯。0 N; a( Z' Z" @( \

2 n7 f& w4 W! E设置  GPIO (主要是基于库函数版本的)0 J6 X' b5 C& r4 q  r- J, ^. V7 o
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。一共定义了三个参数如下% R0 w0 R/ }# `2 O! G

2 H9 g/ Z& K/ h9 Y" H1.   GPIO_Pin:选择要设置的 Pin 口。( _. p- T% R2 f5 j
2.   GPIO_Speed:设置 IO 口的速率- b  r; \& Z; @- R
3.   GPIO_Mode:选择要设置的 IO 模式。) P. s9 k+ M7 I- u2 Q/ P
7 p5 C, F0 x2 F" i5 j
接下来我们来配置一下 LED GPIO的初始化
4 F  J$ _+ @* G- Q- R/ }+ a* i2 a9 L
6----.png ' O! x5 T: F6 U( f
; w/ x# p" p' B3 G; S$ |# T8 ~
接下来写一下 LED 灯闪烁函数。9 M- x$ b1 D- y; \  I+ C
void led_display()
6 [( e: k' r7 q( `{
* g; @* E& j6 w. F, s# l! QGPIO_SetBits(GPIOC,LED);      //GPIO PC0~PC7给高电平! a+ g' ]$ p' j8 C  x7 k# w7 ]  l
delay(6000000);                     //延时约为 1s  这里的延时是软件延时,还没涉及到定时器 大家不要急! N  {# {" U! G/ F+ x9 g
GPIO_ResetBits(GPIOC,LED);   //GPIO PC0~PC7给低电平
- h4 ?# M% J2 Q3 e5 Pdelay(6000000);8 ]5 \1 b/ d" V8 m& y: V/ H0 P
}
5 `9 F# j! S* p8 J( |这样就实现了对LED的闪烁实验是不是很简单
/ O9 H7 o& |# |8 y' T# b, i- h" A1 W: @9 y2 v6 O
赞 收藏 评论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 手机版