我是靠谱客的博主 虚心书包,这篇文章主要介绍STM32F103-入门基础实验-GPIO输出控制LED核心代码(固件库版),现在分享给大家,希望可以做个参考。

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

话不多说,直接上代码~

复制代码
1
2
3
4
为了程序能够更好的移植,我们把一些跟硬件相关的, 都用宏定义做处理,之后移植的时候需要改个别宏就ok! 把相关外设驱动要做到模块化,也为了更好的移植性!
复制代码
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
27
28
29
30
31
32
33
34
35
// 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 */
复制代码
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
27
// 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); }
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 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中的相关宏定就好。
如果大家觉得实验中一些寄存器的配置不是很明白,大家就拿出咱们吃饭的家伙数据手册来把实验中出现的寄存器在手册中查找,去理解。
欢迎大家的留言和评论我会在看到的第一时间内答复。
看完后感觉得到帮助的小伙伴,要点点赞哦~
给笔者一些动力嘛!谢谢啦~

最后

以上就是虚心书包最近收集整理的关于STM32F103-入门基础实验-GPIO输出控制LED核心代码(固件库版)的全部内容,更多相关STM32F103-入门基础实验-GPIO输出控制LED核心代码(固件库版)内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部