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 文件

 #ifndef __LED_H
#define __LED_H void GPIO_Init(void); #endif

stm32.h 文件

 #ifndef __STM32_H
#define __STM32_H //引脚寄存器定义 //GPIO对应寄存器起始地址 #define GPIOA 0x40010800
#define GPIOB 0x40010C00
#define GPIOC 0x40011000
#define GPIOD 0x40011400
#define GPIOE 0x40011800
#define GPIOF 0x40011C00
#define GPIOG 0x40012000 //寄存器偏移地址 #define GPIOx_CRL 0x00
#define GPIOx_CRH 0x04
#define GPIOx_IDR 0x08
#define GPIOx_ODR 0x0c
#define GPIOx_BSRR 0x10
#define GPIOx_BRR 0x14
#define GPIOx_LCKR 0x18 #define GPIOB_CRL *((volatile unsigned int *)(GPIOB + GPIOx_CRL))
#define GPIOB_CRH *((volatile unsigned int *)(GPIOB + GPIOx_CRH))
#define GPIOB_IDR *((volatile unsigned int *)(GPIOB + GPIOx_IDR))
#define GPIOB_ODR *((volatile unsigned int *)(GPIOB + GPIOx_ODR))
#define GPIOB_BSRR *((volatile unsigned int *)(GPIOB + GPIOx_BSRR))
#define GPIOB_BRR *((volatile unsigned int *)(GPIOB + GPIOx_BRR))
#define GPIOB_LCKR *((volatile unsigned int *)(GPIOB + GPIOx_LCKR)) #define GPIOF_CRL *((volatile unsigned int *)(GPIOF + GPIOx_CRL))
#define GPIOF_CRH *((volatile unsigned int *)(GPIOF + GPIOx_CRH))
#define GPIOF_IDR *((volatile unsigned int *)(GPIOF + GPIOx_IDR))
#define GPIOF_ODR *((volatile unsigned int *)(GPIOF + GPIOx_ODR))
#define GPIOF_BSRR *((volatile unsigned int *)(GPIOF + GPIOx_BSRR))
#define GPIOF_BRR *((volatile unsigned int *)(GPIOF + GPIOx_BRR))
#define GPIOF_LCKR *((volatile unsigned int *)(GPIOF + GPIOx_LCKR)) #endif

LED.c 文件

 #include "LED.h"
#include "stm32.h" void delay(unsigned int x)
{
  volatile int i, j;
  for(i = ; i < x; i++)
  {
    for(j = ; j < ; j++);
  }
} void GPIO_Init(void)
{
  //使能GPIOB和GPIOF的时钟
  RCC_APB2ENR |= << ;
  RCC_APB2ENR |= << ;   //清除GPIOB和GPIOF的配置寄存器
  GPIOB_CRL &= ~(0xf << );
  GPIOF_CRL &= ~(0xf << );
  GPIOF_CRH &= ~(0xf << );   //配置GPIOB和GPIOF的端口为通用推挽输出,输出速度为50HZ
  GPIOB_CRL |= << ;
  GPIOF_CRL |= << ;
  GPIOF_CRH |= << ;   //设置GPIOB_0和GPIOF_7和GPIOF_8输出为高电平
  GPIOB_ODR |= << ;
  GPIOF_ODR |= << ;
} int main(void)
{
  GPIO_Init();   GPIOB_ODR &= ~( << ); //设置GPIOB_0端口输出为低电平
  GPIOF_ODR &= ~( << ); //设置GPIOF_7和GPIOF_8输出为低电平
  while()
  {
    GPIOB_ODR &= ~( << ); //设置GPIOB_0端口输出为低电平
    GPIOF_ODR |= << ; //设置GPIOF_7和GPIOF_8输出为高电平
    delay();     GPIOB_ODR |= << ; //设置GPIOB_0端口输出为高电平
    GPIOF_ODR &= ~( << ); //设置GPIOF_7输出为低电平
    delay();     GPIOF_ODR &= ~( << ); //设置GPIOF_7输出为高电平
    GPIOF_ODR |= << ; //设置GPIOF_8输出为低电平
    delay();
  } }

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

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

参考资料:

文献:stm32中文参考手册V_10

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

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

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

  1. FPGA学习笔记——点亮LED

    软件平台:win7(64bit) + Quartus II 9.1 (64-Bit) 硬件平台:东理电子Easy-FPGA Cyclone II EP2C5T114C8N 这个开发板买了很长时间了,买 ...

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

    目录: 一.时钟使能,包括GPIO的时钟和串口的时钟使能 二.设置引脚复用映射 三.GPIO的初始化配置,注意要设置为复用模式 四.串口参数初始化配置 五.中断分组和中断优先级配置 六.设置串口中断类 ...

  3. stm32学习笔记——外部中断的使用

    stm32学习笔记——外部中断的使用 基本概念 stm32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组为一个单位的,同组间的外部中断同一时间只能使用一个.比如说,PA0,PB0 ...

  4. STM32学习笔记——OLED屏

    STM32学习笔记--OLED屏 OLED屏的特点: 1.  模块有单色和双色可选,单色为纯蓝色,双色为黄蓝双色(本人选用双色): 2.  显示尺寸为0.96寸 3.  分辨率为128*64 4.   ...

  5. stm32学习笔记----双串口同时打开时的printf()问题

    stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...

  6. STM32学习笔记-NVIC中断知识点

    STM32学习笔记-NVIC中断知识点总结 中断优先级设置步骤 1. 系统运行后先设置中断优先级分组 函数:void NVIC_PriorityGroupConfig(uint32_tNVIC_Pri ...

  7. STM32学习笔记(一)——点亮一个LED

    引言 最近报名了2017全国大学生电子设计竞赛,我们学校是第一次参加这个比赛,由于8/9月份就要比赛了,所以现在准备是比较晚的了,指导老师说只能做控制类的题目了,让我们学习一下STM32单片机,51到 ...

  8. STM32学习笔记(二)——串口控制LED

    开发板芯片:STM32F407ZGT6 PA9-USART1_TX,PA10-USART1_RX; PF9-LED0,PF10-LED1; 一.串口1配置过程(不使用串口中断): 1.使能时钟,包括G ...

  9. STM32学习笔记(二) 基于STM32-GPIO的流水灯实现

    学会了如何新建一个工程模板,下面就要开始动手实践了.像c/c++中经典的入门代码"hello world"一样,流水灯作为最简单的硬件设备在单片机领域也是入门首推.如果你已经有了一 ...

随机推荐

  1. STM32——CAN通讯实现

    CAN通讯的实现步骤: 1.CAN初始化,其中包括:a.配置CAN时钟,配置IO: b.使能CAN中断向量: c.CAN硬件寄存器配置初始化: d.过滤器初始化: e.打开CAN中断. 2.CAN发送 ...

  2. leetcode 日记 162. Find Peak Element java python

    根据题目可知,输入为:一个相邻元素不相等的数列,输出为:其中一个(上)峰值的序号.并且要求时间复杂度为logn 分析:由于题目要求时间复杂度为logn,因此不能进行全部遍历.又因为只需要找到其中的一个 ...

  3. Manjaro mirror in china

    1, mirrot file: /etc/pacman.d/mirrorlist Server = http://mirrors.ustc.edu.cn/manjaro/stable/$repo/$a ...

  4. 例子:Background Audio Streamer Sample

    The Background Audio Streamer sample demonstrates how to create an app that uses a MediaStreamSource ...

  5. local认证

    文件路径 用途 示例 备注 #gedit /usr/local/etc/raddb/sites-available/default #gedit /usr/local/etc/raddb/sites- ...

  6. 利用netperf、iperf、mtr测试网络

    1.netperf安装和使用 netperf安装 # tar -xzvf netperf-.tar.gz # cd netperf- # ./configure # make # make insta ...

  7. boost和std中的thread的引用参数

    boost 1.60.0 先上代码: #include <boost/thread.hpp> #include <iostream> void add(int &i) ...

  8. Python开发入门与实战17-新浪云部署

    17. 新浪云部署 上一章节我们介绍了如何在本地windows服务器部署python django的网站,本章我们简要说明一下如何把python django工程部署到云服务上. 本章章节我们描述如何 ...

  9. 数据存储之CoreData

    #import "ViewController.h" #import <CoreData/CoreData.h> #import "Person.h" ...

  10. MySQL数据库5 - 插入数据,修改数据,删除数据

    一.插入数据 1. 所有列都插入值 INSERT [INTO] TABLE_NAME VALUES(V1,V2....Vn); 特点:列值同数,列值同序 eg: insert into users v ...