好吧,现在开始学习STM32了,顺便把这个过程记录下来,Keil安装之类就不说了,先用Keil搭建一个工程。
我是参照这篇文章开始的:《零死角玩转stm32-初级篇(终结篇)》
开始的时候我完全按照文章介绍的方式一步一步搭建的,下面我再自己搭建一下:
1、先获取STM32的库函数开发包。
貌似现在最新版本的firmware还是3.5版本的。
在这里可以下载到:ST官网(我是在ST官网翻了很久才翻到的啊)也可猛击这里直接下载
为了方便,这个博客里也上传了一份,不过把chm文件去掉了:点这里下载
2、组建工程。
开始看到zip包的时候感觉文件挺多的,不知如何处理,现在回过来整理一下其实也不多,必需的大概就是这几个:
我把目录安排成这样。然后添加include路径:
直接编译会出现这样的错误:
core\stm32f10x.h(96): error: #35: #error directive: "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"
搜索一下,需要定义这样一个宏:STM32F10X_MD
再次编译的时候出现这样一个错误:
driver\misc.c(99): warning: #223-D: function "assert_param" declared implicitly
然后再添加这样一个宏:USE_STDPERIPH_DRIVER
中间用空格隔开,其实我试验了一下用半角逗号隔开也是正常的
这回编译就通过了。
但是,这其中有几个问题:
1、开始的时候我是想不包含stm32f10x_conf.h这个文件的,因为我发现里面基本上就是用来配置哪些驱动是需要的,哪些驱动是不需要的,我感觉直接在keil的工程文件管理里添加需要的c文件然后包含驱动的h文件就行了,比这样配置一个conf文件还方便。然后我发现在stm32f10x.h文件中有句这样的:
#ifdef USE_STDPERIPH_DRIVER #include "stm32f10x_conf.h" #endif
然后我发现USE_STDPERIPH_DRIVER宏基本上就是在这里用的,所以我果断不想定义USE_STDPERIPH_DRIVER宏了,这个stm32f10x_conf.h也不想用,结果发现还是不行,因为stm32f10x_conf.h里还有个管理debug模式的:
#ifdef USE_FULL_ASSERT /** * @brief The assert_param macro is used for function's parameters check. * @param expr: If expr is false, it calls assert_failed function which reports * the name of the source file and the source line number of the call * that failed. If expr is true, it returns no value. * @retval None */ #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) /* Exported functions ------------------------------------------------------- */ void assert_failed(uint8_t* file, uint32_t line); #else #define assert_param(expr) ((void)0) #endif /* USE_FULL_ASSERT */
懒得折腾了,还是默认这样吧。
2、暂时不写了,有点累了,得回去洗澡了。嘿嘿