KEIL调用GCC编译STM32

本篇记录KEIL调用GCC编译STM32

 

需要准备的工具有

GCC编译器;我的版本5.4 下载地址https://launchpad.net/gcc-arm-embedded/

 

KEIL;我的版本是5.23

 

STM32对应的固件库;我的版本是F10x3.5

 

一个已经配置好的STM32工程,led闪烁什么的都行,具体可参照正点原子的教程。

 

另外:版本问题不大,只需修改几个地方即可

 

1、解压GCC工具,编译ARM工具的名字应该是gcc-arm-none-eabi,解压到keil安装文件夹,可以随意放置,为了管理方便把他放在F:\Keil_v5\ARM\GCC,GCC文件夹是我新建的。如下图所示

2、在已经建立好的STM32工程中修改配置

按照下图勾选Use GCC Compiler,并填入工具arm-none-eabi-和工具路径F:\Keil_v5\ARM\GCC\,然后点击确定

接下来就是一些细节设置:

首先是CC下的设置,Define中和原工程一样即可,中间全部勾选,然后是库文件的路径什么的和原工程一样,接着就是-ffunction-sections -fdata-sections,这个要加上去

Linker中较为关键,首先是ld文件的路径.\Core\stm32_flash.ld,然后是

-Wl,–gc-sections,将未调用的函数不编译进输出文件。接下来就说ld文件。

调用.ld文件、替换.S文件、修改core_cm3.c文件BUG

1)调用.ld文件

.ld链接文件,里面规定了FLASH、RAM大小等信息,文件在固件库中STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\TrueSTUDIO可找到,我选择的是10C里面的.ld文件。然后复制到工程下面,不能添加进工程,只在linker中做链接使用。打开文件第36行起修改相关信息

 

首先是RAM大小,然后是堆栈大小,FLASH等起始地址和长度,根据自己的实际情况修改。

/* Highest address of the user mode stack */

 

_estack = 0x20010000; /* end of 64K RAM */

 

 
 

 

/* Generate a link error if heap and stack don’t fit into RAM */

 

_Min_Heap_Size = 0; /* required amount of heap */

 

_Min_Stack_Size = 0x200; /* required amount of stack */

 

 
 

 

/* Specify the memory areas */

 

MEMORY

 

{

 

FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 256K

 

RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K

 

MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K

 

}

2)替换.S文件

ARMCC和GCC所用的.S文件是不一样的,书写格式不一样,固件库STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\gcc_ride7中选择自己的.S文件并加入工程,替换掉原来的.S文件。

3)修改core_cm3.c文件BUG

第736和753行分别修改为

 

__ASM volatile (“strexb %0, %2, [%1]” : “=&r” (result) : “r” (addr), “r” (value) );

 

__ASM volatile (“strexh %0, %2, [%1]” : “=&r” (result) : “r” (addr), “r” (value) );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值