『7x24小时有问必答』
先来回顾一下前两篇
前两篇我们介绍了如何创建一个空的裸机工程(只有启动文件和main文件),并编译工程生成elf文件,然后将其转为bin格式或hex格式,使用openocd下载,最后编写了一个makefile雏形,并成功点亮了一个LED~

但是这个LED我们是通过指针直接操作寄存器地址来完成的,接下来,我们在此基础上,引入stm32头文件,其中包含了寄存器的宏定义,也就是使用寄存器进行开发~

1.创建寄存器工程

首先将上一节中创建的裸机工程00-template-reg复制一份出来,改名为01-led-reg

将其中空的stm32f10x.h文件删掉,从固件库中复制一份,然后因为头文件中使用了core_cm3.hsystem_stm32f10x.h中的一些定义,包含了这两个头文件,所以将这两个文件也复制过来:

接下来编写main.c文件:
#include  "stm32f10x.h"

int  main()

{

        /*  开启GPIOB时钟  */

        //*(unsigned  int*)(0x40021000+0x18)  |=  1<<3;

        RCC->APB2ENR  |=  1<<3;

        /*  配置PB0为推挽输出  */

        //*(unsigned  int*)(0x40010c00+0x00)  |=  1<<(4*0);

        GPIOB->CRL  |=  1<<(4*0);

        /*  PB0输出低电平,点亮绿色LED  */

        //*(unsigned  int*)(0x40010c00+0x0c)  &=  ~(1<<0);

        GPIOB->ODR  &=  ~(1<<0);

        while(1);

}

void  SystemInit(void)

{

}

至此,寄存器工程创建完毕,接下来开始编译~

2.编译&下载寄存器工程

编译寄存器工程的重点就在于C头文件和C源文件,启动文件的编译和链接都和之前一样。

头文件不用编译,但是要注意
在编译含有该头文件的源文件时,如果头文件和源文件不在一个文件夹里,需要用-I(大写i)参数声明头文件路径;
头文件经常通过判断用户是否有宏定义来进行一些选择编译,可以使用-D参数进行宏定义;
接下来修改makefile,编译我们创建的工程:

使用命令make编译生成elf文件;
使用命令make bin将elf文件转化生成bin文件;
使用命令make hex将elf文件转化生成hex文件;
使用命令make clean即可清除掉所有编译产生的文件。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码