4.小白初学日记 STM32F429 用寄存器点亮LED灯

大家好,不知道大家看过我上个写的文章没有,如果没有的话请大家去看看哦,都是整理的精化。好了让我们继续,今天的主题是什么呢。没错!就是这个万恶的小LED灯,我们已经接受完了理论知识,现在准备把它点亮!点亮!点亮!好了,不多说了,劲头十足,上干货!
在这里插入图片描述
首先我们看到的是LED的原理图。我们只需要让PH10为0就可以使其灯泡亮了。
图中有跳帽,按视频讲我们先把跳帽摘了。(但是后来我加上之后才能亮,至于为什么我也不知道,小白就是小白,一穷二白,跪求大佬评论告诉我)加粗样式
首先我们要操控的是这个ODR这个寄存器 有个0x14偏移地址,这个偏移地址对这个寄存器基地址而言的。这个基地址在中文参考手册的这个位置在这里插入图片描述看 我们找到了,然后把这个数大声的读出来0x4002 1C00。好,就是他,这个就是基地址!
然后我们在stm32f4xx.h中定义了它的基地址,因为偏移地址是0x14

#define  	GPIOH_BASE   		 0x40021C00
#define  	GPIOH_ODR			*(unsigned int*)(GPIOH_BASE+0X14)

然后在主函数里面 这样写

int main(void)
{
	GPIOH_ODR &=~(1<<10);
}

这个&=~是什么意思呢。首先来说 1左移10位 然后取反 然后再跟原来的ODR寄存器相与
大家可能不懂 我来列个式子。
在这里插入图片描述
这样我们很顺利的 让结果PH10等于0,其余全部为1.
在这里插入图片描述
我们还需要配置这个MODER这个寄存器。它是每两个位控制一个寄存器。总共可以控制16个IO口
要实现MODER这个映射还是要根据上述的步骤。
它偏移地址为0x00;实际上就是基地址。

#define  	GPIOH_BASE    0x40021C00
#define  	GPIOH_ODR	  *(unsigned int*)(GPIOH_BASE+0X14)
#define  	GPIOH_MODER   *(unsigned int*)(GPIOH_BASE+0x00)

为了方便阅读 我们就这样定义了。
这里我们要定义成01:通用输出模式;

int main(void)
{
	/*配置PH10为输出*/
	GPIOH_MODER |= (1<<(2*10));
	/*PH10输出低电平*/
	GPIOH_ODR &=~ (1<<10);
}

随后我们的代码变成了这样 2*10是因为MODER寄存器两个位控制一个IO口,我们是PH10,就是第10位。01就是01.所以1<<20位到达20位的位置,至于为什么|= 我也不知道,咱们记住就行了。小白小白,记住就是王哈哈。
在这里插入图片描述 后来我们还没开启时钟,一定要开启时钟。
在这里插入图片描述
我们在这里找到了GPIOH的时钟,在这里插入图片描述找到位7的解释。是1是使能时钟。所以根据上述两个方法,我们自己来试试!
在这里插入图片描述

#define		 RCC_BASE 		0x40023800
#define		 RCC_AHB1ENR	*(unsigned int*)(RCC_BASE+0x30)

主函数

int main(void)
{
	RCC_AHB1ENR |=  (1<<7);
	GPIOH_MODER |= (1<<(2*10));
	GPIOH_ODR &=~ (1<<10);
}

在设置中点击
在这里插入图片描述
烧入开发板发现只摁复位才亮,随机进入调试界面。
在这里插入图片描述
在这里插入图片描述
如图点击 进入调试界面。
点击右侧就可查看值
在这里插入图片描述
这个是进入某个函数
在这里插入图片描述这个是跳出,比如Step进入了就可以跳出来。
好了 刚刚我们找到问题原因了

需要点击这个才让程序默认运行。
好了我们继续回到调试界面
我们点击这个

我们再点击RCC观察APB1的值
在这里插入图片描述我们可以清楚的看到GPIOHEN已经为1了。有的同学,当然啦,包括我自己。这是我自己发现的 怎么CCMDATARA也是1呢。后来我去看了一下手册,发现这个复位值就是这样的。严谨就要严谨起来。
在这里插入图片描述我们继续向下看。
在这里插入图片描述
我们可以清楚的看到图中MODER10已经是0x01了 代表着已经成功了。
继续走
在这里插入图片描述
我们发现这里都是0,因为只要配置输出了就都是0.所以我们没必要写最后一步。所以我们又做了一个小实验。

int main(void)
{
	RCC_AHB1ENR |= (1<<7);
	GPIOH_MODER |= (1<<(2*10));
	/*清0*/
	//GPIOH_ODR &=~ (1<<10);
	/*置1*/
	GPIOH_ODR |= (1<<10);
}

编译 下入程序后 继续进入调试界面
在这里插入图片描述
我们可以看到ODR10已经有个对号了,这个对号的意思就是置1.所以小灯没有亮。
今天还是收获满满的一天呀!开心!屏幕前的您如果觉得我这个小白整理的不错,并且有收获的话,点个赞评论一下哟。我会虚心接受的哈

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值