STM32跑马灯实验【库模板】

本文主要基于库模板搭建跑马灯项目,最终实现led1与led2循环点亮、熄灭。
库模板搭建可以参考这篇:【STM32工程模板】库函数模板搭建

Step1:工程目录核对。 基于库模板的话,直接就是这样的目录。
在这里插入图片描述
Step2:在HAREWARD目录下创建led.c/led.h文件,打开keil,建立项目分组。(记得将新建的两个led文件导入工程)
在这里插入图片描述
Step3:编写led.c/led.h文件。

  • 在h文件中define我们的头文件以及声明函数。这里我们用#ifndef… #define…#endif这样的范式。功能:如果已经定义就不再定义了,没有定义我们就进行定义。代码如下:
#ifndef __LED_H
#define __LED_H

void LedInit(void);

#endif
  • c文件中编写led初始化的程序。两个led是用STM32的GPIOB5和GPIOE8进行控制的,我们首先要对这两个GPIO口进行初始化,包括GPIO的时钟初始化,引脚、模式、输出速度的设置。这里我们需要先介绍几个重要的函数:
    GPIO初始化函数:
    void GPIO_Init (GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
    2个读取输入电平函数:
    uint8_t GPIO_ReadInputDataBit (GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
    uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
    2个读取输出电平函数:
    uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
    uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
    4个设置输出电平函数:
    void GPIO_SetBits (GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
    void GPIO_ResetBits (GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
    void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
    void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

我们在这里主要用到的是上面加粗的函数。关于GPIO相关函数的使用方法,在进行开发时我们往往是选中该函数然后进行"go to definition",查看使用方法,如图。
在这里插入图片描述
void GPIO_SetBits使用举例: 对于GPIO方法的使用,在GPIO的h文件最下方列出了几乎所有的GPIO相关函数。如图:
在这里插入图片描述
我们选中GPIO_SetBits函数进入"go to definition",会跳转到下图所示位置。
在这里插入图片描述
其中asserm_param声明了参数的可用性,如选中IS_GPIO_ALL_PERIPH(GPIOx)并进行"go to definition",会告诉我们可以用哪些值,如下图。
在这里插入图片描述
我们复制GPIOB到函数第一个参数的位置,对于第二个参数也是同样的方法。如GPIO_SetBits(GPIOB,GPIO_Pin_5);其他函数的使用也是这样的方法。

led初始化c程序源码
下面是led初始化(GPIO初始化)的完整程序,在程序中先将GPIOB和GPIOE的时钟开启,用了RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE,ENABLE);函数。后面就是GPIO相关的函数使用了。

#include "led.h"
#include "stm32f10x.h"


void LedInit(void){
	
	GPIO_InitTypeDef GPIO_InitTypeStr;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE,ENABLE);
	
	GPIO_InitTypeStr.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitTypeStr.GPIO_Pin=GPIO_Pin_5;
	GPIO_InitTypeStr.GPIO_Speed=GPIO_Speed_10MHz;
	GPIO_Init(GPIOB,&GPIO_InitTypeStr);
	GPIO_SetBits(GPIOB,GPIO_Pin_5); //推挽输出默认高电平为灭 
	
	GPIO_InitTypeStr.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitTypeStr.GPIO_Pin=GPIO_Pin_8;
	GPIO_InitTypeStr.GPIO_Speed=GPIO_Speed_10MHz;
	GPIO_Init(GPIOE,&GPIO_InitTypeStr);
	GPIO_SetBits(GPIOE,GPIO_Pin_8); //推挽输出默认高电平为灭 

}

Step4:主程序的编写。 这里比较简单,我们就直接贴代码了。

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "sys.h"
	
int main(void){
	delay_init();
	LedInit();
	while(1){
		GPIO_SetBits(GPIOB,GPIO_Pin_5);
		GPIO_SetBits(GPIOE,GPIO_Pin_8);
		delay_ms(1000);
		GPIO_ResetBits(GPIOB,GPIO_Pin_5);
		GPIO_ResetBits(GPIOE,GPIO_Pin_8);
		delay_ms(1000);
	}
}

那本篇就先介绍到这里。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐大队队长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值