STM32 点灯丨V1.0.1
+ x9 ^2 k) [. f& }1 N5 a 今天先在这里给大家说声对不起,昨天的程序写错了。按照咱们的假设,我们应该是让IO输出低电平,咱们昨晚的程序是让IO口输出拉高,刚好反了。 也好,咱们今天把昨天的BUG给修一下。咱们的程序应该这么写: - GPIO_ResetBits(GPIOA,GPIO_Pin_1); //输出低电平,亮
复制代码 , h+ C" b1 I/ |$ ^1 M
好了,BUG修好了。咱们进入今天的正题,今天的需求是,如何让LED灯闪烁? 首先,咱们分析一下这个小需求。闪烁,那就是亮一定的时间,灭一定的时间。 说到时间,那就需要用到延时,STM32的延时,咱们一般用定时器来处理。今天先不细说了,主要写程序的实现。 到这里,咱们的程序也基本成型了,白话版程序如下所示: 点亮LED; 延时一定时间; 熄灭LED; 延时一定时间;(这个延时是必要的,不然看不到闪烁的效果) 好了,今天就先用别人的硬件来实现一下咱们的程序。我这里手上正好有一块正点原子的V3战舰开发板,今天就用它来试试。 先来看一下硬件,在开发板上有这么一个LED灯,它挂载在PB5上。硬件如下所示: 图1 LED接线方式 图2 LED挂载的IO口 程序的话,IO初始化的部分如下所示: - void LED_Init(void): V1 L* N5 ?# Z' O% y2 k. a
- {/ X$ j8 x& i+ F" V/ k
- GPIO_InitTypeDef GPIO_InitStructure;
% ~; h3 _' Q/ q: i. f; }" I$ g& y -
$ F3 f! P$ \* E - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB,PE端口时钟) B& \2 L& n5 [/ p8 z* c
-
- ]0 i* I' h3 @1 N - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PB.5 端口配置. ~) \3 F+ j. N( t% p
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
5 P$ a% H+ R/ O# ]" o$ ^ - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz+ w) B2 z. k2 G U. @
- GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB.53 k1 q; Z& g n2 w4 C
- GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高1 n" [6 T7 E" m* e6 |& G& |3 j. E/ w
- }
复制代码 " f5 h4 O9 }; U+ ?' I9 P. N
延时函数的话,咱们也先用正点原子写好的。俗话说,站在巨人的肩膀上,能够看的更远 那么,程序主体,就出来了,如下所示: - delay_init(); //初始化延时函数
4 P6 s* H* N& i - LED_Init(); //初始化LED端口
+ c: D9 n+ ^( T- \$ B - while(1)
+ f6 b2 q) w! X) r - {
: I$ E% J( M: d3 z - GPIO_ResetBits(GPIOB,GPIO_Pin_5); //LED0对应引脚GPIOB.5输出低电平,亮 % H+ D: a+ c& p& h
- delay_ms(300); //延时300ms
" q4 a% |& t$ I; v% { - GPIO_SetBits(GPIOB,GPIO_Pin_5); //LED0对应引脚GPIOB.5输出高电平,灭% u ^' n6 N" D1 z5 d
- delay_ms(300); //延时300ms* ]; q; ?, n3 [! e
- }
复制代码 ' j& x' c j$ d3 U
这个就是,咱们今天的程序了。 接下来的,就是明天的需求了。在实际的项目中,咱们一般是用LED来提示故障,一般用闪多少下来提示故障编号。这个又该怎么实现呢?咱们明天揭晓。 文章出处:Yue無缺 . t1 L6 p( y @8 f& o4 }/ y
|