STM32学习笔记——点亮LED

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教学视频

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

时间: 2024-08-02 06:58:08

STM32学习笔记——点亮LED的相关文章

嵌入式学习笔记002-点亮led

正如编写第一个程序所打印"hello world"那样,对TQ2440开发板的初次使用也是从最简单的部分入手,点亮led灯无疑是最简单的,起码只要设置几个寄存器就好,比起打印容易得多了,后续会讲到串口部分再来实现我们这句金典的对白~~~~ 板子共有4个led灯,如果能够成功点亮其中一个,那么其他几个将不是问题,故而我们的目标是先点亮第一个先,在此我们必须理清几个问题: a. led的引脚连接的相关寄存器 b. 编写的语言 c. 用什么来编译链接成可执行文件 d. 怎么download到

FPGA学习笔记&mdash;&mdash;点亮LED

软件平台:win7(64bit) + Quartus II 9.1 (64-Bit) 硬件平台:东理电子Easy-FPGA Cyclone II EP2C5T114C8N   这个开发板买了很长时间了,买来后一直放那,下面来一个点灯的例子. 1. 实验任务 点亮发光二极管. 通过这个实验, 熟悉并掌握 CPLD/FPGA 开发软件 Quartus II 的使用方法和开发流程以及 Verilog HDL 的编程方法. 2. 实验环境 软件实验环境为 Quartus II 9.1 开发软件. 3.

STM32学习笔记(四)——串口控制LED(中断方式)

目录: 一.时钟使能,包括GPIO的时钟和串口的时钟使能 二.设置引脚复用映射 三.GPIO的初始化配置,注意要设置为复用模式 四.串口参数初始化配置 五.中断分组和中断优先级配置 六.设置串口中断类型并使能串口中断 七.编写中断服务函数函数名格式为函数名格式为 USARTxIRQHandler(x 对应串口号). 八.主函数的实现. 一.时钟使能,包括GPIO的时钟和串口的时钟使能 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //

STM32学习笔记6(TIM通用模块生成PWM)

1.     TIMER输出PWM基本概念   脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术.简单一点,就是对脉冲宽度的控制.一般用来控制步进电机的速度等等. STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4路的PWM输出. 1.1   PWM输出模式 S

STM32学习笔记——OLED屏

STM32学习笔记--OLED屏 OLED屏的特点: 1.  模块有单色和双色可选,单色为纯蓝色,双色为黄蓝双色(本人选用双色): 2.  显示尺寸为0.96寸 3.  分辨率为128*64 4.  多种接口方式,该模块提供了总共 5 种接口包括: 6800. 8080 两种并行接口方式. 3线或4线的SPI接口,IIC接口方式 5.  不需要高压,直接接3.3V就可以工作:(可以与stm32的引脚直接相接) OLED图片: OLED引脚介绍: CS:OLED片选信号 RST:OLED复位端口

STM32学习笔记1(ADC多通道采样)

STM32 ADC多通道转换描述:用ADC连续采集11路模拟信号,并由DMA传输到内存.ADC配置为扫描并且连续转换模式,ADC的时钟配置为12MHZ.在每次转换结束后,由DMA循环将转换的数据传输到内存中.ADC可以连续采集N次求平均值.最后通过串口传输出最后转换的结果.程序如下:#i nclude "stm32f10x.h" //这个头文件包括STM32F10x所有外围寄存器.位.内存映射的定义#i nclude "eval.h" //头文件(包括串口.按键.L

STM32学习笔记——USART串口(向原子哥和火哥学习)

一.USART简介 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换.USART利用分数波特率发生器提供宽范围的波特率选择. STM32 的串口资源相当丰富的,功能也相当强劲.STM32F103ZET6 最多可提供 5 路串口,有分数波特率发生器,支持同步单向通信和半双工单线通信,支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作.它还允许多处理器通信.

STM32学习笔记4(TIM32位定时器的实现)

关于STM32的CPU为32位,定时器却为16位的探讨 STM32的通用定时器可以实现很多功能,例如:定时计数.测量外部信号脉冲宽度.产生PWM波形.测量输入的PWM波形等.在所有这些操作中,定时器的位数主要影响两个参数,一个是定时或测量的精度,另一个是定时的时间长度.下面我们以一个列表看一下定时的精度和定时的长度有多少: 关于各个预分频器的作用请参考下图的右半部分: 从表中可以看出,在最高精度下(14ns)定时长度只有0.91ms,在精度为250ns(即4MHz)时定时长度可达16.38ms.

STM32学习笔记之一(初窥STM32)

怎么做好学习笔记? 答:自我感知-->学习知识-->归纳总结-->自我升华(真正属于自己的知识是,抛开书本,运用时,你还能记得的思想) 自我感知--看到知识概念,先自我感觉那应该是个什么东西(如:寄存器---寄存东西(数据)的地方嘛) 学习知识--有了自我感知后,就需要验证自己的感知是否正确,请记住,带着自己思想的学习是最高效的学习(如:寄存器---存什么东西呢?) 归纳总结--学习了大量知识后,就该汇总汇总了(如:寄存器---存数据(通用寄存器),存命令(PC),存地址(LR)) 自我