STM32利用寄存器的直接地址点亮LED灯

STM32利用寄存器的直接地址点亮LED灯

  1. 新建工程项目
    新建工程
    选择合适的路径,用来存放工程文件
    文件命名
    选择自己手中STM32的型号,如果没有需要安装对应的包。
    选择板子的型号
    点击取消按钮,不适用软件自带的包
    取消
  2. 导入main.c文件
    在工程目录下面新建main.c文件
    新建main.c文件
    在工程中导入新建的main.c文件,双击Soure Group 1
    导入文件
    在弹出的对话框中选择main.c文件的路径,选择main.c文件。
    导入文件
    在main.c文件中编写,main()函数
    编写main函数
    运行编译程序会出现.\Objects\Address_Yinshe_LED.sct(7): error: L6236E: No section matches selector - no section to be FIRST/LAST.的错误
    缺乏启动文件的错误
    这是因为缺乏启动文件造成的。所以需要添加一个启动文件,步骤和添加main.c文件一样,但是启动文件是STM32公司编写完成的,所以我们只需要复制过来就可以啦,不需要新建,在官方的固件库文件中就包含启动文件。
    添加启动文件
    接着编译,会继续报错,如下图所示:
    缺少系统时钟函数的报错
    这是因为缺少系统时钟的函数,我们自己写一个SystemInit()的函数用来骗过编译器。
    添加SystemInit函数
    引入头文件stm32f10x.h,这个和之前新建main.c文件的操作步骤一致,新建一个stm32fa0x.h的文件,编译之后软件会自动加到main.c的文件下面,如图所示:
    引入stm32f10x.h的头文件
    这时编译便没有错了,到这一步已经把文件模型编写完成。
    编译成功
  3. 编写程序
    从下面的图上可以看到LED是连接到PB0、PB1、PB5上并且是低电平驱动LED灯,所以我们以PB0为例来点亮LED1。
    LED灯的连接图
    从图中我们可以看到,GPIOB是挂载到APB2总线上,而APB2是挂载到AHB总线上,所以要想知道GPIOB_CRL寄存器的地址就必须知道上面总线的地址。
    总线
    通过查找STM32的帮助手册,我们能看到下图所示的GPIOB的地址
    GPIOB的地址
    通过查找手册,我们可以发现GPIOB_CRL寄存器的偏移地址是0x00
    GPIOB_CRL寄存器的偏移地址
    通过这样一步一步的查找相关的地址,我们可以写下下面的代码:
int main(void)
{
  //1、开启GPIO端口的时钟--对应的寄存器为RCC_APB2EN
  *(unsigned int *)0x40021018 |= (1<<3);
  //2、配置PB0端口的输出模式--对应的寄存器为GPIOB_CRL
  *(unsigned int *)0x40010C00 |= (1<<0);
  //3、配置PB0端口输出低电平,点亮LED灯--对应的寄存器是GPIOB_ODR
  *(unsigned int *)0x40010C0C &= ~(1<<0);
}
  1. 配置相应的下载选项。
    选择相应的下载器,我这里用的是高速DAP下载器进行下载。
    配置相应的下载设置
    勾选
    在这里插入图片描述
    做如下的配置
    配置
    下载完成,灯亮。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值