STM32寄存器点亮第一个灯

主控STM32F103C8T6   用的标准库

寄存器点灯

步骤:

首先在对应的原理图上找到LED灯,如图所示:

 

可以看到PC13给低电平时D1就会亮。

实际地址=起始地址+偏移地址

让D1亮  就是在PC13对应的寄存器里面写入0或1,操控寄存器来控制D1,操控寄存器就是操控地址。

打开GPIOC的时钟使能

在到中文参考手册中找到2.1系统架构

可以看到GPIOC在APB2上面

再到2.3存储器映像找到APB2 GPIOC的时钟寄存器的起始地址

 

复位和时钟控制RCC 的起始地址为0x40021000

然后在到7.3RCC寄存器中7.3.7找到APB2外设时钟使能寄存器(RCC_APB2ENR)

 

找到位4

 

故控制CPIOC的时钟使能地址是:

0x40021000+0x18=0x400210018 的第4位

设置GPIOC13 IO口的模式

在中文参考手册的8..2.2中找到端口配置高寄存器(GPIO_CRH),偏移地址为0x04

 

可以看到第20-23位是操控PC13的模式的

本例子设置模式为通用推挽输出模式、速度50MHZ

所以对应20-23位  为0011

在2.3存储器映像中找到GPIOC端口的起始地址

 

故PC13的端口配置高寄存器的地址是:

0x40011000+0x04=0x40011004

配置PC13端口输出寄存器

 

在8.2.4中可以看到偏移地址为0Ch

故寄存器地址为:0x40011000+0x0C=0x4001100C

找到了以上三个地址,便可以在STM32F103C8T6上点起第一个灯。

代码

工程目录:

 

只需要加上一个启动文件即可

然后创建main.c文件  写入主函数  编译会报错

原因缺少SystemInit函数

那我们便在main.c中定义一个就不会报错了

我这个工程是自己又定义了一个.h文件  在.h文件中放入宏

x的第5位置1

X |= (1<<5);

x的第0位置0

X &= ~(1<<0)

x的第1、2位置0

X &= ~((1<<1) |(1<<2))

整个代码如下:

Main.c

#include "stm32f10x.h"

void SystemInit(void)

{

}

int main(void)

{

//0x40021000+0x18=0x40021018

RCC_APB2 |= (1<<4);

//0x40011000+0x04=0x40011004

GPIO_MODE |= ((1<<20) |(1<<21));

//0x40011000+0ch=0x4001100C

GPIO_SPEED &= ~(1<<13);

}

Stm32f10x.h

#define RCC_APB2 *(unsigned int *)0x40021018

#define GPIO_MODE *(unsigned int *)0x40011004

#define GPIO_SPEED *(unsigned int *)0x4001100C

操作寄存器就是操作地址 所以先要让数值变为地址  然后去取对应地址的数据进行操作。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值