STM32f103VCT6点灯(寄存器编程)

为了亮灯,首先要去查看原理图。原理图如下:
在这里插入图片描述
在这里插入图片描述
由原理图知:led1、led2、led3、led4分别对应GPIOC的PC0、PC1、PC2、PC3引脚。(且低电平灯亮)
下面我们来点亮led1(对应PC0),GPIOC的端口输出数据寄存器(ODR)对应的最低位即为PC0,此时应将最低位置0。
在这里插入图片描述
在这里插入图片描述
GPIOC_ODR的地址为:0x40011000+0x0C(基地址+偏移)=0x4001100C,则将PC0置0的代码:*(unsigned int * ) 0x4001100C &=~(1<<0);

但就这一句代码灯是不会亮的,因为IO口有两种模式(输入和输出),默认是输入模式,所以我们应该配置IO口为输出模式。
在这里插入图片描述
在这里插入图片描述
要将低四位(四位一组)配置成0001,GPIOC_CRL的地址为0x40011000+0x00(基地址+偏移)=0x40011000,则代码为(unsigned int * ) 0x40011000 |=(1 << (4*0));*

!!!置0:&=~,置1:|=

但是灯还是不会亮哈哈哈,还得打开 GPIOC 端口的时钟。
在这里插入图片描述
在这里插入图片描述
IOPCEN默认为0,关闭状态,我们需要置1打开。地址为:0x40021000+0x18=0x40021018,代码为(unsigned int * ) 0x40021018 |=(1 << 4);*
到这里就OK咯!!灯就可以照亮你的心了!

#include "stm32f10x.h"

int main(void)
{
	//打开 GPIOC 端口的时钟
	*(unsigned int * ) 0x40021018 |=(1 << 4);
	
	//配置 IO 口为输出
	*(unsigned int * ) 0x40011000 |=(1 << (4*0));
	
	//控制 ODR 寄存器
	*(unsigned int * ) 0x4001100C &=~(1<<0);
}
void SystemInit(void)
{
	//函数为空,目的是为骗过编译器不报错
}
 

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值