stm32.cube(七)——arm-gcc.helloworld
2015-06-19 15:59
337 查看
一、前言
对与MDK-ARM(keil),EWARM(IAR)和TureSTUDIO(Atollic)这三个ARM常用IDE工具,在cube包里都有对应的例子。而对于arm-gcc,cube里只提供了例程的源码。由于需要自己写Makefile,因此比起各种IDE来说,配置的复杂度要更高一点。
二、cube.gcc项目建立过程
2.1 移植代码
根据实际应用,拷贝需要用到的HAL、BSP、CMSIS、middleware、RTOS代码到工程文件夹。比如一个项目用到了触屏,就从middleware目录下拷贝STemWin。
用到的芯片peripheral,就从HAL目录下拷贝相应的hal_xxx_xxx.c和hal_xxx_xxx.h。
建立一个APP文件夹,用来存放我们自己编写的应用层代码。最好先写个简单的测试函数,因为没有main函数就无法编译出Flash固件。
2.2 修改配置文件
HAL层和middleware目录下都有一个xxx_conf_template.h文件。把它修改成xxx_conf.h就是该模块的默认配置文件。然后需要再对它进行编辑,设置每个模块的配置。2.3 startup.s和hal层初始化
cube包里有针对不同的芯片的startup.s和flash.ld。系统上电后执行的就是startup.s编译后的指令,它会初始化中断向量表、系统时钟和栈指针,然后跳转到main函数。flash.ld用来标识flash和ram的地址映射和ram,还有各分段的链接地址。这些都在CMSIS目录下,需要添加到新的工程里。
在main函数里,要调用hal_init()函数来对hal层进行初始化。
2.4 Makefile
arm-gcc没有单独的文档,它包含在GCC的文档里面。编译选项:https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html
对写Makefile的编写,需要注意这么几点:
确保startup.s和flash.ld被正确编译和链接。
将芯片系列用-D选项包含在Makefile里。
用-I选项指定头文件搜索目录,不要漏掉。
将烧写命令写在Makefile里方便烧写。
相关文章推荐
- 策略模式
- 在VBA中调用winsock控件
- oracle 表查询(2)
- LeetCode_44---Wildcard Matching
- Nginx反向代理 实现4台服务器负载均衡
- vs2012 error c4996: This function or variable may be unsafe
- MyBatis联合查询association使用
- this关键字
- 关于Android 和 JS 交互时调用不成功的问题
- C# WinForm捕获未处理的异常实例解析
- ios平台中glsl中shadow2DProjEXT函数的简单说明以及变换矩阵的小注意点
- IOS中WebView的使用
- android退出MainActivity后onDestroy不回调
- dede列表标签递增数字生成
- OC 九宫格布局
- 技术演绎之 [ java ] java标识符
- JS 新窗口打开超链接
- [UOJ 110][APIO 2015]Bali Sculptures(按位DP)
- EditText有内容时显示清空按钮,无内容时不显示
- 百度地图删除标尺,logo,缩放按钮