STM32学习笔记——点亮LED

本人学习STM32是直接通过操作stm32的寄存器,使用的开发板是野火ISO-V2版本;

先简单的介绍一下stm32的GPIO;

stm32的GPIO有多种模式:

  1.输入浮空

  2.输入上拉

  3.输入下拉

  4.模拟输入

  5.开漏输出

  6.推挽式输出

  7.推挽式复用功能

  8.开漏复用功能

stm32GPIO模式设置相关寄存器设置的介绍

stm32中文参考手册中对GPIO模式设置对应寄存器的详细介绍:

下图为开发板LED的接线图;

根据上面的电路图可知,将GPIOB_0,GPIOF_7和GPIOF_8设置为低电平时,LED将被点亮;

程序代码:

LED.h 文件

1 #ifndef __LED_H
2 #define __LED_H
3
4 void GPIO_Init(void);
5
6
7
8
9 #endif

stm32.h 文件

 1 #ifndef __STM32_H
 2 #define __STM32_H
 3
 4 //引脚寄存器定义
 5
 6 //GPIO对应寄存器起始地址
 7
 8 #define GPIOA 0x40010800
 9 #define GPIOB 0x40010C00
10 #define GPIOC 0x40011000
11 #define GPIOD 0x40011400
12 #define GPIOE 0x40011800
13 #define GPIOF 0x40011C00
14 #define GPIOG 0x40012000
15
16 //寄存器偏移地址
17
18 #define GPIOx_CRL 0x00
19 #define GPIOx_CRH 0x04
20 #define GPIOx_IDR 0x08
21 #define GPIOx_ODR 0x0c
22 #define GPIOx_BSRR 0x10
23 #define GPIOx_BRR 0x14
24 #define GPIOx_LCKR 0x18
25
26
27
28 #define GPIOB_CRL *((volatile unsigned int *)(GPIOB + GPIOx_CRL))
29 #define GPIOB_CRH *((volatile unsigned int *)(GPIOB + GPIOx_CRH))
30 #define GPIOB_IDR *((volatile unsigned int *)(GPIOB + GPIOx_IDR))
31 #define GPIOB_ODR *((volatile unsigned int *)(GPIOB + GPIOx_ODR))
32 #define GPIOB_BSRR *((volatile unsigned int *)(GPIOB + GPIOx_BSRR))
33 #define GPIOB_BRR *((volatile unsigned int *)(GPIOB + GPIOx_BRR))
34 #define GPIOB_LCKR *((volatile unsigned int *)(GPIOB + GPIOx_LCKR))
35
36
37
38 #define GPIOF_CRL *((volatile unsigned int *)(GPIOF + GPIOx_CRL))
39 #define GPIOF_CRH *((volatile unsigned int *)(GPIOF + GPIOx_CRH))
40 #define GPIOF_IDR *((volatile unsigned int *)(GPIOF + GPIOx_IDR))
41 #define GPIOF_ODR *((volatile unsigned int *)(GPIOF + GPIOx_ODR))
42 #define GPIOF_BSRR *((volatile unsigned int *)(GPIOF + GPIOx_BSRR))
43 #define GPIOF_BRR *((volatile unsigned int *)(GPIOF + GPIOx_BRR))
44 #define GPIOF_LCKR *((volatile unsigned int *)(GPIOF + GPIOx_LCKR))
45
46
47 #endif

LED.c 文件

 1 #include "LED.h"
 2 #include "stm32.h"
 3
 4 void delay(unsigned int x)
 5 {
 6   volatile int i, j;
 7   for(i = 0; i < x; i++)
 8   {
 9     for(j = 0; j < 1000; j++);
10   }
11 }
12
13 void GPIO_Init(void)
14 {
15   //使能GPIOB和GPIOF的时钟
16   RCC_APB2ENR |= 1 << 3;
17   RCC_APB2ENR |= 1 << 7;
18
19   //清除GPIOB和GPIOF的配置寄存器
20   GPIOB_CRL &= ~(0xf << 0);
21   GPIOF_CRL &= ~(0xf << 0);
22   GPIOF_CRH &= ~(0xf << 0);
23
24   //配置GPIOB和GPIOF的端口为通用推挽输出,输出速度为50HZ
25   GPIOB_CRL |= 3 << 0;
26   GPIOF_CRL |= 3 << 28;
27   GPIOF_CRH |= 3 << 0;
28
29   //设置GPIOB_0和GPIOF_7和GPIOF_8输出为高电平
30   GPIOB_ODR |= 1 << 0;
31   GPIOF_ODR |= 3 << 7;
32 }
33
34 int main(void)
35 {
36   GPIO_Init();
37
38   GPIOB_ODR &= ~(1 << 0); //设置GPIOB_0端口输出为低电平
39   GPIOF_ODR &= ~(3 << 7); //设置GPIOF_7和GPIOF_8输出为低电平
40   while(1)
41   {
42     GPIOB_ODR &= ~(1 << 0); //设置GPIOB_0端口输出为低电平
43     GPIOF_ODR |= 3 << 7; //设置GPIOF_7和GPIOF_8输出为高电平
44     delay(100);
45
46     GPIOB_ODR |= 1 << 0; //设置GPIOB_0端口输出为高电平
47     GPIOF_ODR &= ~(1 << 7); //设置GPIOF_7输出为低电平
48     delay(100);
49
50     GPIOF_ODR &= ~(1 << 8); //设置GPIOF_7输出为高电平
51     GPIOF_ODR |= 1 << 7; //设置GPIOF_8输出为低电平
52     delay(100);
53   }
54
55 }

程序将实现流水灯的效果;

在使用GPIO时一定要将相应GPIO的时钟开启;

参考资料:

文献:stm32中文参考手册V_10

视频:正点原子战舰stm32f103 V3教学视频

如有错误,请批评指正,小弟将不甚感激

转载于:https://www.cnblogs.com/wp2312139418/p/5869181.html

STM32学习笔记——点亮LED相关推荐

  1. 【STM32学习笔记-点亮LED灯】

    STM32学习笔记-点亮LED灯 文章目录 STM32学习笔记-点亮LED灯 一.原理图分析 二.代码分析 1.mian函数 2.led.c函数 3.led.h函数 4.函数文件整理 5.LED_In ...

  2. STM8学习笔记---点亮LED灯

    对单片机操作时一般有三个步骤,1.系统时钟选择.2.单片机外设初始化.3主程序编写. 同样要点亮LED灯时,也要按照这个步骤来. 首先选择系统时钟,打开STM8S中文参考手册,找到时钟寄存器 可以看到 ...

  3. 【STM32学习笔记-LED呼吸灯】

    STM32学习笔记-点亮LED灯 文章目录 STM32学习笔记-点亮LED灯 一.呼吸灯原理 二.呼吸灯代码 1.main.c 2.led.c 3.led.h 三.代码分析 一.呼吸灯原理 占空比:占 ...

  4. 《STM32学习笔记》4——核心功能电路与编程(下)

    接上文,文中的图片,大多数来自视频的截图(来自洋桃电子). 欢迎大家批评指正! STM32学习笔记-专栏 文章目录 一.蜂鸣器驱动 1.蜂鸣器介绍 2.蜂鸣器电路 3.蜂鸣器程序 二. MIDI 音乐 ...

  5. STM32学习笔记:按键实验

    STM32学习笔记:按键实验 一.所使用的函数 1.时钟使能函数 RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState New ...

  6. 《STM32学习笔记》3——核心功能电路与编程(上)

    接上文,文中的图片,大多数来自视频的截图(来自洋桃电子). 欢迎大家批评指正! STM32学习笔记-专栏 文章目录 一.核心板电路分析 二.点灯 LED 1.LED电路 2.LED功能相关初始化配置 ...

  7. 【STM32学习笔记】#002 GPIO设置练习

    系列文章目录 -[STM32学习笔记]#001 前期准备 文章目录 系列文章目录 前言 一.目标功能 二.CubeMX设置 1 端口设置1(Port Setting) 2 端口设置2(Port Set ...

  8. 009 - STM32学习笔记 - 中断

    009 - STM32学习笔记 - 中断 这节的内容,野火的官方视频我反复看了好几次,但是感觉火哥在这块讲解的特别绕,理解起来很吃力,后来在看了一下其他老师的视频,结合一些书本资料和官方手册,才搞清楚 ...

  9. STM32学习:按键控制LED

    STM32学习:按键控制LED 文章目录 前言 一.所用知识点复习 1.stm32工作模式(*注意上下拉输入的区别*) 2.按键抖动与常见按键接法 按键抖动: 按键消抖: 常见按键接法: 3.GPIO ...

最新文章

  1. 禁用Grid上的自动排序功能
  2. IOS UITableView性能优化
  3. Android .mk文件语法解析
  4. android 如何去掉自定义标签页,Android中为TextView增加自定义的HTML标签
  5. 云原生生态周报 Vol. 21 | Traefik 2.0 正式发布
  6. VS中MFC访问MySQL的方法
  7. jquery ajax 文本丢失加号和连接号的问题
  8. jcr多久更新一次_拼多多商品价格竞争力星级有什么用?多久更新一次?
  9. attribute property --- jquery attr() prop()
  10. UITableViewDataSource Protocol Reference
  11. C/C++[codeup 2069]中位数
  12. 红外接收hs0038NEC协议
  13. java--删除TMP文件
  14. 从春招到秋招,一个本科生的求职之路
  15. 使用递归函数计算1到n之和
  16. 16、简繁转换API接口,免费好用
  17. 统计英文字符串里重复次数最多的单词JAVA
  18. 小程序富文本解析利器mp-html
  19. 赛灵思Xilinx可用资源的获取途径
  20. 10 接口测试平台 项目管理模块开发(三)

热门文章

  1. Sublime中Sql美化插件的安装
  2. 记录一次成都阿里一面的经历
  3. 杂谈记录——论程序员式的幽默
  4. IBS2.0绘制蛋白质,核酸结构
  5. 8086汇编单字符输出实现四位压缩bcd码相减
  6. domestic gpu
  7. win10计算机如何禁用签名,怎么设置永久禁用Win10驱动程序强制签名? 一个命令帮你搞定...
  8. 自暴旅游内幕,黄金周前,给大家的提示
  9. C++实例(十)Word文档操作
  10. 【Helm三部曲】 Helm 包管理器 chartmuseum 简介及安装