前面写过一篇关于STM32单片机的GPIO的文章,本来是打着从实用角度来做的实验,但是发现不积跬步无以至千里啊,咱们从头开始,先做一个最简单的,入门级的,单片机系统中的hello world,流水灯实验!
我手中有一个神舟3的开发板,我就用这个板子来做实验,板子中的实验一共用到4个LED灯来做流水灯的实验,这里我们也用这4个灯,他们分别是GPIOF中的6、7、8、9这4个。
1、首先我们复制我们之前做过的模板工程到一个新建文件夹中,(如,你可以取个名字叫流水灯实验的文件夹)神舟开发板的例程中在项目中添加了两个文件,分别是led.c和led.h,这是一种习惯,每做一个项目的时候都在其中添加一个.c和对应的.h文件,这样可以是工程看起来更加规整!本来我是不想添加这个的,这里为了良好的编程习惯,我们也添加一个!并且我更改了模板文件中的一些名字,在下图中我将标志出来
2、接下来我们来看一下程序,程序一共分为两部分,一个main.c,一个led.c,因为程序比较简单,所以在led.h中我们就不做任何定义了,这也省去了一些麻烦!按照习惯,我们先从main程序看起!
#include "stm32f10x.h"
#include "led.h"
void LED_config(void);//使用函数前先进行函数声明
/*******************************************************
* 函数名称: delay
* 输入: 无
* 输出: 无
* 功能描述: 延时函数
*******************************************************/
void delay(vu32 nCount)
{
for(; nCount != 0; nCount--);
}
/*******************************************************
* 函数名称: main
* 输入: 无
* 输出: 无
* 功能描述: 主函数
*******************************************************/
int main(void)
{
LED_config(); //调用4个LED灯初始化函数
while(1)
{
GPIO_ResetBits(GPIOF,GPIO_Pin_6);//第一灯亮
delay(800000); //延时
GPIO_SetBits(GPIOF,GPIO_Pin_6); //第一灯灭
delay(800000); //延时
GPIO_ResetBits(GPIOF,GPIO_Pin_7); //第二灯亮
delay(800000); //延时
GPIO_SetBits(GPIOF,GPIO_Pin_7); //第二灯灭
delay(800000); //延时
GPIO_ResetBits(GPIOF,GPIO_Pin_8); //第三灯亮
delay(800000); //延时
GPIO_SetBits(GPIOF,GPIO_Pin_8); //第三灯灭
delay(800000); //延时
GPIO_ResetBits(GPIOF,GPIO_Pin_9); //第四灯亮
delay(800000); //延时
GPIO_SetBits(GPIOF,GPIO_Pin_9); //第四灯灭
delay(800000); //延时
}
}
分析一下程序,LED_config();这个函数是调用了led.c中的函数,一会会贴出led.c文件,GPIO_ResetBits、
GPIO_SetBits这两个函数是库文件为我们提供的GPIO操作函数,我们贴出来看一下
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_PIN(GPIO_Pin));
GPIOx->BRR = GPIO_Pin;
}
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_PIN(GPIO_Pin));
GPIOx->BSRR = GPIO_Pin;
}
这两个函数的作用就是将端口置1或者清0
我们再来看一下led.c文件
void LED_config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* 配置神舟III号LED灯使用的GPIO管脚模式*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE); /*使能LED灯使用的GPIO时钟*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOF, &GPIO_InitStructure); /*神州III号使用的LED灯相关的GPIO口初始化*/
}
这里主要就是GPIO的配置,前面我们也说过,一共3个步奏,
1)、使能GPIOD的时钟
2)、填充GPIO的属性结构体
3)、传递参数至初始化函数
这里要注意,我们将管脚模式配置为推挽输出模式,这个需要注意一下,因为之后的实验中我们还会给关键配置成其他的模式
程序编写完毕,编译下载到实验板中完成实验!
上一篇:初学STM32及GPIO入门之流水灯
下一篇:【STM32】入门 · 流水灯
推荐阅读最新更新时间:2024-11-16 22:13
设计资源 培训 开发板 精华推荐
- 用于电池充电器的 1.8V、2.5V DC 至 DC 单路输出电源
- 使用 ON Semiconductor 的 CS-8111 的参考设计
- AR0234CSSC28SUKAH3-GEVB:带有 2MP 彩色 28deg 全局快门 CMOS 图像传感器的 2.3MP 评估板
- SC431A 可编程精密基准电压源的典型应用,用于串联调节器
- CN0267
- 基于i.MX 6系列的车载信息娱乐系统SABRE
- ZXLD1370EV2,基于 ZXLD1370 降压-升压 LED 驱动器的评估板
- EVAL-AD7682EDZ,用于 20 引脚 PulSAR AD7982 16 位 PulSAR 模数转换器系列的评估板
- TC2185 的典型应用是具有关断和参考旁路的 50 mA、100 mA、150 mA CMOS LDO
- S8VS-48024A 24V/480W AC/DC电源典型应用
- 泰克 MSO6B 探索营:技术指标大挑战,闯关赢好礼
- Keysight教你如何提高测试精度,答对问题还有礼品相送,速速参与!
- 有奖直播|Nexperia针对车联网应用的高效ESD解决方案
- ST有奖直播 | 75V降压控制器和隔离降压方案
- 月度原创精选评选2018年6月(总第5期)
- 是德科技直播 | 小探头,大学问,别让探头拖累你的测试结果!
- 关注、评论赢好礼!《美光2022台北国际电脑展主题演讲精选:智能边缘与智能制造专辑》
- 英飞凌出手游啦 | 汽车水泵挑战赛等你来!
- TE 《新趋势报告: 如何有效应对当下测试测量领域的挑战》下载最新趋势报告
- 阅读Microchip多种连接接口SAM单片机精彩专题,参与活动赢好礼