STM32F103-入门基础实验-GPIO输出控制LED核心代码(固件库版)

上次我们讲了如何配置寄存器使用GPIO-输出-控制LED灯,与我们之前学的51单片机的方法是一样的,就是直接操作寄存器,但是对于STM32呐,它的功能比51强多了,功能越多,也就意味着复杂,有很多的寄存器。
为了更好的开发、使用、学习STM32,那些C语言大牛们~编写了STM32F10x的固件库,固件库的降临,对STM32的学习那就是事半功倍,我们还可以从固件库中学习那些C语言大牛们的编程精华,但我们要知道,其固件库的本质还是去操作最底层的寄存器,只不过是通过层层封装,让我们使用起来更加得心应手!

话不多说,直接上代码~

为了程序能够更好的移植,我们把一些跟硬件相关的,
都用宏定义做处理,之后移植的时候需要改个别宏就ok!
把相关外设驱动要做到模块化,也为了更好的移植性!
// led.h

#ifndef __LED_H
#define	__LED_H

#include "stm32f10x.h"

/* 定义LED连接的GPIO端口, 用户只需要修改下面的代码即可改变控制的LED引脚 */

/* GPIO端口 */
#define LED_GPIO_PORT    	GPIOB			              
/* GPIO端口时钟 */
#define LED_GPIO_CLK 	    RCC_APB2Periph_GPIOB		
/* 连接到SCL时钟线的GPIO */
#define LED_GPIO_PIN	  	GPIO_Pin_5		

#define ON  0 //亮
#define OFF 1 //灭	

/* 使用标准的固件库控制IO*/
#define LED(a)	if (a)	\
					GPIO_SetBits(LED_GPIO_PORT,LED_GPIO_PIN);\
					else		\
					GPIO_ResetBits(LED_GPIO_PORT,LED_GPIO_PIN)        
/* 
 * 知识点(一) '\'C语言的续行符  ,
 *在一句代码很长的时候,但又不能分行时使用 
 *知识点(二) 带参数的宏定义,
 * if(为真),执行...
 * if(为假),执行else...               
 */
void LED_GPIO_Config(void);

#endif /* __LED_H */
// led.c
#include "led.h"   

void LED_GPIO_Config(void)
{		
	/*定义一个GPIO_InitTypeDef类型的结构体*/
	GPIO_InitTypeDef GPIO_InitStructure;

	/*开启LED相关的GPIO外设时钟*/
	RCC_APB2PeriphClockCmd( LED_GPIO_CLK , ENABLE);
		
	/*选择要控制的GPIO引脚*/
	GPIO_InitStructure.GPIO_Pin = LED_GPIO_PIN;	

	/*设置引脚模式为通用推挽输出*/
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   

	/*设置引脚速率为50MHz */   
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 

	/*调用库函数,将配置写入相关寄存器*/
	GPIO_Init(LED_GPIO_PORT, &GPIO_InitStructure);	
	
	/* 关闭led灯	*/
	GPIO_SetBits(LED_GPIO_PORT, LED_GPIO_PIN);
}
// main.c
#include "stm32f10x.h"   
#include "led.h"

void Delay(uint32_t count);//声明简单的延时函数

int main(void)
{
	//初始化LED的GPIO
	LED_GPIO_Config();
	while(1)
	{
		LED(ON);		  //led灯亮
		Delay(5000000);
		LED(OFF);		  //led灯灭
		Delay(5000000);
	}
}
void Delay(uint32_t count)//简单的延时函数
{
	for(; count != 0; count--);
}
这样不管我们LED接到哪一组GPIO端口,哪一个引脚上,我们只需要改led.h中的相关宏定就好。
如果大家觉得实验中一些寄存器的配置不是很明白,大家就拿出咱们吃饭的家伙数据手册来把实验中出现的寄存器在手册中查找,去理解。
欢迎大家的留言和评论我会在看到的第一时间内答复。
看完后感觉得到帮助的小伙伴,要点点赞哦~
给笔者一些动力嘛!谢谢啦~
原创文章 13 获赞 10 访问量 541

猜你喜欢

转载自blog.csdn.net/weixin_45636395/article/details/106028579