前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux下开发stm32 ③ | 寄存器工程开发

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

作者头像
Mculover666
发布2020-07-16 10:49:42
1.2K0
发布2020-07-16 10:49:42
举报
文章被收录于专栏:TencentOS-tiny

先来回顾一下前两篇

  • 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即可清除掉所有编译产生的文件。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Mculover666 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.创建寄存器工程
  • 2.编译&下载寄存器工程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档