Linux下开发stm32 ③ | 寄存器工程开发

2020-07-16 10:49:42 浏览数 (1)

先来回顾一下前两篇

  • Linux下开发stm32(一) | 使用gcc-arm-none-eabi工具链编译
  • Linux下开发stm32(二) | 使用openocd下载与调试

前两篇我们介绍了如何创建一个空的裸机工程(只有启动文件和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文件:

代码语言:javascript复制
#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源文件,启动文件的编译和链接都和之前一样。 头文件不用编译,但是要注意

  1. 在编译含有该头文件的源文件时,如果头文件和源文件不在一个文件夹里,需要用-I(大写i)参数声明头文件路径;
  2. 头文件经常通过判断用户是否有宏定义来进行一些选择编译,可以使用-D参数进行宏定义;

接下来修改makefile,编译我们创建的工程:

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

0 人点赞