查看原文
其他

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

mculover666 Mculover666 2021-01-31

先来回顾一下前两篇

前两篇我们介绍了如何创建一个空的裸机工程(只有启动文件和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源文件,启动文件的编译和链接都和之前一样。
头文件不用编译,但是要注意

  1. 在编译含有该头文件的源文件时,如果头文件和源文件不在一个文件夹里,需要用-I(大写i)参数声明头文件路径;

  2. 头文件经常通过判断用户是否有宏定义来进行一些选择编译,可以使用-D参数进行宏定义;

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

  • 使用命令make编译生成elf文件;

  • 使用命令make bin将elf文件转化生成bin文件;

  • 使用命令make hex将elf文件转化生成hex文件;

  • 使用命令make clean即可清除掉所有编译产生的文件。


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存