找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1120|回复: 0
收起左侧

STM32点个灯

[复制链接]
ID:317581 发表于 2018-4-27 09:51 | 显示全部楼层 |阅读模式

首先来看看最简单的点亮一个灯的实验你把,实验要求点亮一个灯并隔段时间熄灭,如此一直循环:

其实实现点亮一个灯和学习51单片机时是一样的,都是把某个管脚置高电平或置低电平,只不过过程有些不一样,它把好多函数放在了库里,我们只需调用那些函数,再进行设置就可以。

程序的思路如下:

1、首先需要设置的是时钟:你将灯的管脚连在哪个端口的某个引脚上面,你就开启哪个端口的时钟,比如灯连在A端口的某个引脚,就要开启A端口的时钟。

2、其次,设置管脚: 我们需要对GPIO进行初始化设置,我们只需调用 GPIO_InitTypeDef的结构体,对每个成员进行设置,要设置的有PIN管脚的位置GPIO_Pin,还有管脚的速率GPIO_Speed,还有管脚的工作状态GPIO_Mode,最后在调用一下初始化的函数GPIO_Init,

3、然后就开始写我们的主函数:假如我想让led灯的管脚置为高电平,我只需调用GPIO_SetBits函数,它是将管脚置为高电平,若想置为低电平则调用GPIO_ResetBits函数就可以。

4、最后我们要让它一闪一灭循环当然需要延时,所以我们还需写一个延时函数,这个和51单片机一样就不用多说了,如果仅仅让一个灯亮,就不需要延时了。

上面所提到的函数里面的参数设置请参考STM32固件库手册。
STM32固件库手册

下面举个例子:

要求led灯管脚在PA.1管脚上,实现一闪一灭。

#include "stm32f10x_lib.h"//头文件void LED_Init(void){    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开 GPIOA 时钟    GPIO_InitTypeDef GPIO_InitStructure;    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;//设置led灯连在第二个管脚    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO的工作状态为推挽输出    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO的速率最高输出速率 50Hz    GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化 GPIOA}void Delay(vu32 nCount) //延时函数,不解释{     for(; nCount != 0; nCount--);}main(){    LED_Init();    while(1)    {           GPIO_SetBits(GPIOA, GPIO_Pin_1);//将 GPIO的A端口第二个管脚置为高电平,即PA.1=1;        Delay(0x8ffff);        GPIO_ResetBits(GPIOA, GPIO_Pin_1);//将 GPIO的 A端口第二个管脚置为低电平,即PA.1=0;        Delay(0x8ffff);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

好了,已经OK了,下面就可以将程序下载到开发板上面去试了,就到这里吧。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表