新建工程,点亮LED,建立函数雏形

我在后面又做了一份代码详解,和我一样初学的朋友可以看看。
新建工程目的:点亮LED,以下建立函数雏形的步骤
1.
在这里插入图片描述

这里LED对应的外设引脚为PH10;在使用相应的接口时,需要对应参考手册中名称XX10(0x开头是十六进制的标识符,代表这个数是十六进制的),输出高电平时置为1,低电平置为0.
例如:GPIOH_ODR &=~ (1<<10),在做与运算后,PH10为0输出低电平。

2.参考手册中找到总线对应的边界地址寄存器边界地址
a)./*片上外设基地址 */
#define PERIPH_BASE ((unsigned int)0x40000000)

b)./*总线基地址 */
#define AHB1PERIPH_BASE       (PERIPH_BASE + 0x00020000)    

c)./*GPIO外设基地址*/
#define GPIOH_BASE            (AHB1PERIPH_BASE + 0x1C00)

d)./*GPIOH寄存器地址*/
#define GPIOH_ODR                    *(unsigned int*)(GPIOH_BASE+0x14)
#define GPIOH_MODER                *(unsigned int*)(GPIOH_BASE + 0x00)

e)./*RCC外设(边界)基地址*/
#define RCC_BASE              (AHB1PERIPH_BASE + 0x3800)
#define    RCC_AHB1ENR                *(unsigned int *)(RCC_BASE + 0x30)


总结:步骤,片上外设基地址-->总线基地址-->外设边界(基)地址(用的时候可以反推回去,此处代表的是各个地址间的包含关系)

3.stm32为了降低功耗,每次外设的时钟都是关闭的,所以在每次使用外设时,需要先开启GPIOH时钟

4.//开启时钟
RCC_AHB1ENR |= (1<<7);

//将PH10清零,3–>0011,做与操作后PH清零
GPIOH_MODER &=~(3<<2*10);

//PH10设置为输出,由参考文档知,01为通用输出模式
GPIOH_MODER |= (1<<2*10);

//PH10输出低电平
GPIOH_ODR &=~(1<<10);

/*LED灯对应的外设引脚是PH10,需要对对应的外设寄存器的XX10进行操作*/
#include "stm32f4xx.h"

#define PERIPH_BASE			((unsigned int)0x40000000)//片上外设基地址
#define	AHB1PERIPH			(PERIPH_BASE + 0x00020000)//总线基地址
#define GPIOH_BASE		 	(AHB1PERIPH + 0x00001C00)//GPIO外设基地址

#define GPIOH_MODER			*(unsigned int*)(GPIOH_BASE + 0x00)//GPIOH寄存器地址,0x00为其偏移地址
#define GPIOH_ODR			*(unsigned int*)(GPIOH_BASE	+ 0x14)//同理
#define	RCC_BASE			 (AHB1PERIPH_BASE + 0x00003800)
#define RCC_AHB1ENR			*(unsigned int*)(RCC_BASE + 0x30)


int main(void)
{
	RCC_AHB1ENR |= (1<<7); //开启时钟
	/*1.需要对GPIOH_MODER10设置为通用输出模式,但是此时不清楚其处于哪种情况,需要先
	对其进行归零操作*/
	GPIOH_MODER &=~ (3<<2*10); //11--00>>10--00>>00,归零
	GPIOH_MODER |= (1<<2*10);//GPIOH_MODER10设置为通用输出模式;
	GPIOH_ODR &=~ (1<<10);//输出低电平

	whlie(1);
}


void SystemInit(void) //骗过编译器不报错
{	
	
}//后面敲几个回车,KEIL5编译时虽然不报错,可能会有Warning



版权声明:本文为weixin_43723143原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。