找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 26320|回复: 2
收起左侧

STM32之点亮一个灯程序详解

[复制链接]
ID:89763 发表于 2015-9-10 01:21 | 显示全部楼层 |阅读模式
在假期也是很无聊,反正闲着就来写写上学期学的STM32,就当是复习复习吧,其实我也是新手,刚开始自学,可能写的内容里面会出现一些错误,还请看到的朋友及时指出来。
首先来看看最简单的点亮一个灯的实验你把,实验要求点亮一个灯并隔段时间熄灭,如此一直循环:
  其实实现点亮一个灯和学习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固件库手册。

下面举个例子:
要求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);
}
}

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

回复

使用道具 举报

ID:582563 发表于 2019-7-11 20:17 | 显示全部楼层
头文件没有什么情况
回复

使用道具 举报

ID:421308 发表于 2019-7-12 08:58 | 显示全部楼层
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO的工作状态为推挽输出

想问下这个到底是什么意思,有什么作用啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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