【STM32学习】-------寄存器方式利用GPIO控制LED

一,原理图分析

查阅原理图:

在这里插入图片描述
在这里插入图片描述由原理图分析易得:
(1)杜邦现连接P0端口到LED接口J12,这样相当于8个LED分别对应PB8-PB15
(2)因为GPIO接到了LED的正极,所以输出1就表示亮,0表示灭

二,STM32的GPIO模块有关寄存器详解

1.GPIO相关寄存器:

寄存器位数名称 x=(A,B,C,D,E)
配置寄存器32位GPIOx_CRL(低16位), GPIOx_CRH(高16位
数据寄存器32位GPIOx_IDR(输入模式), GPIOx_ODR(输出模式
置位/复位寄存器32位(GPIOx_BSRR)
复位寄存器16位(GPIOx_BRR)
锁定寄存器32位(GPIOx_LCKR)

由stm32的存储映像图可知:PortB的起始地址是:0x40010C00

在这里插入图片描述
2.有可能涉及到的GPIO的地址:

寄存器名偏移量寄存器地址
GPIOB_CRL0x000x40010C00
GPIOB_CRH0x040x40010C04
GPIOB_IDR0x080x40010C08
GPIOB_ODR0x0C0x40010C0C
GPIOB_BSRR0x100x40010C10
GPIOB_BRR0x140x40010C14

3.具体用到的寄存器:
GPIOx_CRH:

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

在这里插入图片描述

因为stm32上电复位时默认所有外设的时钟都是关闭的,所以要手动打开GPIO对应的时钟

查存储映像图可得:RCC_APB2RSTR 的地址为0x4002 100c
在这里插入图片描述
在这里插入图片描述

三,写代码控制GPIO点亮熄灭LED

#define GPIOB_BASE		0x40010C00
#define GPIOB_CRH		(GPIOB_BASE + 0x04)
#define GPIOB_ODR		(GPIOB_BASE + 0x0C)
#define RCC_APB2ENR		0x40021018

//-------------------------------------------------

#define rGPIOB_CRH 		(*((unsigned int *)GPIOB_CRH))
#define rGPIOB_ODR 		(*((unsigned int *)GPIOB_ODR))
#define rRCC_APB2ENR 	(*((unsigned int *)RCC_APB2ENR))

int main(void)
{
	rRCC_APB2ENR = 0x00000008;    //打开portB 的外设时钟
	
	// 向CRH寄存器写内容,将GPB8-GPB15配置为输出模式
	*rGPIOB_CRH = 0x33333333;	  // 配置端口推挽输出模式,输出速率50MHz
     rGPIOB_ODR = 0x00000f00;    //输出1点亮LED

	return 0 ;
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值