2018 -0517 Stm32 初学利用寄存器操作步骤

                                            利用寄存器操作实现一个LED的点亮

    首先对于操作一个i/o口有三个要点:

    ①使能I/O口时钟;

    ②初始化I/O口模式;

    ③操作I/O口输出高低电平;

1.首先建立LED的 .C 和 .H文件, .C文件在项目下利用manage project item 添加至项目中;.h文件点击魔术棒(options for target)中C/C++ 中 include paths 添加进去。

2.其中.h头文件为

#ifndef __LEDR_H
#define __LEDR_H

void ledresiger_Init (void);

#endif
3. .C文件为
#include "stm32f10x.h"
#include "ledresiger.h"

void ledresiger_Init (void)
{

	RCC->APB2ENR |= 1<<3;          //时钟使能
	//设置io口模式
	GPIOB->CRH  &= 0xFFF0FFFF;    //先把1个位清零	
	GPIOB->CRH  |= 0x00030000;    //把四个位变成0011 就是3
	
	//先输出高电平
	GPIOB->ODR |= 1<<12;
	//GPIO.12
	
}

 其中注意要include 之前的头文件; 

 ①时钟使能

RCC->APB2ENR     这里是引用RCC中的成员变量  怎么对寄存器操作呢?

首先在中文技术参考手册中找到: 6.3.7  APB2 外设时钟使能寄存器(RCC_APB2ENR)

由板子的电路图可以知道其控制LED 的I/O口是 PB12,即 GPI0B类型  


由手册可知 端口B的I/O口使能是位3;于是就是将RCC->APB2ENR 的第三位变为1其它位不动,

那么就可用位运算, 1<<3 表示将1向左移3位 就是  ....000000100 

再与RCC->APB2ENR中的进行或运算,就使得第三位变为1;

②设置IO口模式

在技术手册中找到 GPIO寄存器描述。其中有两项


低寄存器表示 1-7 的IO口   高寄存器表示 8-15的I/O口   如我们的IO是 PB12 ,就要选择高寄存器配置

其中一个I/O口控制4个位那么下图中表示就是8-15 I/O的配置

  在手册中写明了 通用推挽输出模式为00 ,最大速度50MHZ 为11  那么 第12个口的四位应该是0011 也就是3;

    GPIOB->CRH  &= 0xFFF0FFFF;

以上是将12口的4位清0  ;  我们所需的IO口是12 前面有3个:15 14 13 所以 OxFFF 有三个F  后面0便是我们要清0意思,再后面4个F就是代表 11 10 9 8  4个口;

    GPIOB->CRH  |= 0x00030000;

这时候12口的4位是0 0 0 0 要变成 0 0 1 1  只需要跟 0 0 1 1 或运算就行了;也就是12口位置那是3;

③ 要设置LED先关闭就是给予其高电平

    GPIOB->ODR |= 1<<12;

也就是要I/O口输出一个高电平;在手册中找到端口输出寄存器

 也就是将12口输出高电平就是 1<<12;


④之后就是在主函数中调用这个LED初始化函数即可。

猜你喜欢

转载自blog.csdn.net/qq_36324796/article/details/80351605