单片机
返回首页

STM32用寄存器点亮LED灯

2019-09-10 来源:eefocus

寄存器:实际上就是cpu里面的东西 每个单元都有不一样的功能,根据功能给这些存储单位取别名,这个别名就是我们所说的寄存器。

寄存器的映射:给寄存器分配地址的过程就叫作寄存器的映射。


新建工程:

新建工程需要手动创建main.c

.h(头文件)头文件:寄存器的映射

如何写寄存器的映射:

首先找到需要控制外设的IO口,根据这个IO口去寄存器组织架构寻找需要控制外设的IO口在哪里基地址是什么,然后再看需要控制外设的IO口的偏移地址。该IO口的地址就是基地址+偏移地址

**端口的地址在编译器看来只是个地址所以必须强制转换成指针(*unsigned int)+地址

通过控制io口的高低电平去实现我们想要的功能(通用io口(GPIO))


修改寄存器位的操作方法:

//直接操作会把寄存器的32位都操作了,用下面的方法就可以操作你想操作的位

对某位清零,对某几位清零[a &=~(1<<3)]/[a &=~(3<<2*2)]

对某位进行赋值[a |=(1<<3)]

对某位进行取反[a ^=(1<<3)]


GPIO的输出初始化顺序


GPIO是输入、通用输出、复用功能还是模拟输入(模式寄存器 MODER)

如果是输出还要确定是推挽输出还是漏极输出(输出类型寄存器 OTYPER)

配置输出的速度(输出速度寄存器 OSPEEDR)

输出时要不要开启上下拉电阻(上拉/下拉寄存器 PUPDR)

具体输出内容(置位复位寄存器BSRR和数据输出寄存器ODR)

//复位就是清零,置位就是置1

用寄存器点亮LED灯:

(查手册,看地址:

GPIOH 基地址为0x4002 1C00

GPIOH的外设时钟RCC基地址为0x40023800)

1.查看原理图在这里插入图片描述

2.STM32中的每个外设时钟都是关闭的,由RCC统一控制

RCC_AHB1ENR地址为(0x40023800 +0X30)

控制GPIOH的外设时钟在第七位

为1时使能在这里插入图片描述在这里插入图片描述在这里插入图片描述

3. STM32和STC89C51单片机不一样。STM32还需控制IO口,定义XX为输出端口

有一个MODER寄存器(模式寄存器)控制io的输入或者是输出

GPIOH_MODER地址(0x40021C00+0x00)

选择00通用输出模式在这里插入图片描述在这里插入图片描述在这里插入图片描述

4. 确定输出类型(OTYPER)

//推挽输出

输出1

GPIOH_OTYPER 地址(0x4002 1C00+0x4)

在这里插入图片描述在这里插入图片描述在这里插入图片描述

5.配置输出速度(OSPEEDR)

//配置输出速度为2M

输出00

GPIOH_OSPEEDR地址(0x4002 1C00+0x08)

在这里插入图片描述在这里插入图片描述在这里插入图片描述

6.输出要不要上拉电阻

//不要上拉电阻

输出00

地址(0x4002 1C00+0x0C)在这里插入图片描述在这里插入图片描述在这里插入图片描述

7. 让PH10输出低电平,点亮led灯(也可以通过控制GPIO端口置位/复位寄存器下次再写)

地址(0x4002 1C00+0x14)在这里插入图片描述在这里插入图片描述

————————————————————————————————————————————————————————————————————

点亮其他灯和点亮红灯的方法一样的

点亮一绿灯的代码如下:

在这里插入图片描述

流水灯

在这里插入图片描述


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • PIC单片机控制的遥控防盗报警器电路

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 如何构建一个触摸传感器电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章