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)
————————————————————————————————————————————————————————————————————
点亮其他灯和点亮红灯的方法一样的
点亮一绿灯的代码如下:
流水灯