请选择 进入手机版 | 继续访问电脑版

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

stm32新手入门之 01点亮LED

[复制链接]
feixiang20 发布时间:2018-1-15 20:33
1   LED闪烁实验
7 E  @3 h2 u7 v; ?# z
. b0 Q: }& v+ cSTM32 最简单的外设莫过于 IO 口的高低电平控制了,本次实验将通过一个经典的 LED 闪烁程序,带大家进入 STM32 的学习, 通过本次的实验, 将了解到STM32 的 IO 口作为输出使用的方法。在本次实验中我们将通过代码控制STM32 开发板上的 8 个 LED,实现闪烁灯果。 本次实验要学会如下:( O% L- y0 _/ N1 g" j
1、 知道 STM32 有几种 GPIO 模式,怎么配置。4 ~' N+ e- f! y! [. @  o+ [. P
2、学会设置 STM32 的 GPIO 输出高低电平控制 LED 灯。
6 I' _: N: r+ `! r6 U6 }
! E+ q, d* x8 N% V硬件设计
  l. }( P5 k) E/ X) B( q可以看到开发板上面 LED 的接线图如下,LED1~LED8 接到了单片机的PC0~PC7上面。
6 R5 p9 P, a: h7 v% L+ d+ r! B! t0 I
1.jpg
4 A1 f% |3 `; d) h0 M4 W2 v  q
' _! c% d8 f) L4 R$ }: X# R 2.jpg : J' x! P/ X7 c) U+ s" L

' ^8 ?1 Y. h! |  r从上面的原理图中,我们可以看到 LED 灯是接到STM32的 IO口的 PC0 到 PC7。点 亮一盏LED的原理就是把相应的IO口输出低电平, IO口 输出为高电平就能够熄灭 LED,要实现 LED 闪烁也就是将STM32管脚每间隔一段时间不输出一个高低电平脉冲即可。6 R& D0 Q: P( v7 [/ m& i
STM32 的  IO  口简介
9 |1 p; \3 |# `% \STM32 的每个 IO 口都有 7 个寄存器来控制。分别是:配置模式寄存器 CRL 和 CRH; 数据存器 IDR 和ODR;置位/复位寄存器 BSRR;复位寄存器 BRR; 锁存寄存器 LCKR。如果想要了个寄存器的详细使用,可以参考 STM32 中文参考手册.配置模式如图3,图4,图5
% f0 t; B! f4 Y, {
8 U. w/ Q, D8 P6 S- ]0 Y& B* Q 3.jpg 9 r! d% I) ]1 e5 N2 |

4 L( M( B9 A/ [+ }  I" {. E) | 4.jpg " ^( M4 y; Z% U9 Q! M3 c* W7 [

" `3 \7 [3 n, h2 i( C5 C& h8 C 5.jpg
% ~9 m+ f* }! M- H) a: R9 F0 x9 w7 O0 G4 i/ s
控制 LED 的时候, IO 口可以设置为推挽输出模式。我们为 什么不用开漏输出来控制 LED 灯呢?其实推挽输出和开漏输出学过模拟电路的 应该都知道它的工作原理,一般来说推挽输出:可以输出高,低电平,连接数 字器件;开漏输出:输出端相当于三极管的集电极, 要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收电流的能力相对强(一般 20ma以内)。所以这里 我们选择推挽输出控制 LED 灯。
' a4 Q1 F" h4 A: v, v. |
1 w& g4 I5 C' X+ C, @. w) D设置  GPIO (主要是基于库函数版本的)
- `' z0 L9 b9 s% TGPIO_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。一共定义了三个参数如下
! h: R0 [/ T* S2 m5 `
/ h& D0 L! W/ x& w" Q6 v6 T1.   GPIO_Pin:选择要设置的 Pin 口。
+ `! R( _- i5 V: }" u2 K' m2.   GPIO_Speed:设置 IO 口的速率. d$ {  C1 x% V, G6 j
3.   GPIO_Mode:选择要设置的 IO 模式。
, t0 b* G" f$ Z  P# X
! L. s. l" K5 l0 h- l! _# \3 Q接下来我们来配置一下 LED GPIO的初始化0 `4 o# l6 j) o
( w$ w  _4 y. P3 A
6----.png
0 u" |" e% a& G; m, V0 T1 u% H* Z5 x& d' W' k8 E
接下来写一下 LED 灯闪烁函数。
  {6 q' _: K* h; J4 r* cvoid led_display()/ \& t: z. W) \. h; ?, _
{
1 w. I3 |" @! o% [7 lGPIO_SetBits(GPIOC,LED);      //GPIO PC0~PC7给高电平5 C! v4 f) T( [. G
delay(6000000);                     //延时约为 1s  这里的延时是软件延时,还没涉及到定时器 大家不要急4 D( C' ^& u  M( @$ _- q9 A
GPIO_ResetBits(GPIOC,LED);   //GPIO PC0~PC7给低电平3 g) a; ^0 [/ m/ l1 w3 G. d
delay(6000000);
0 Z: U' n; [) I2 c& o$ {}/ q/ x: S( U" b9 _
这样就实现了对LED的闪烁实验是不是很简单# E/ j, U$ D& R6 S
% a% O# z$ q- S& J! k/ z- K: Z
收藏 评论1 发布时间:2018-1-15 20:33

举报

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

所属标签

相似分享

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