1 读懂头文件 1 选择器件 它把stm8l15x系列,按照FLASH大小,分成了三个基本系列 2 编译器检查 它支持 IAR COSMIC 和 STVD 我用的是IAR 不过这个宏是怎么打开的,我没有见到 很明显的定义宏,应该是在IAR下正确建立项目文件以后,就会自动识别的。 以上这些宏如果不打开,编译时就会遇到错误。这种 错误提示 是通过 #error宏定义实现的,由此我们学到了一个在预编译阶段提示错误的办法。 中间有不少内容是 关于 本系列芯片的一些不同设置的选择:要理解它们需要对这个系列的芯片有一定的认识,我对此不了解,看不出什么门道。 不过对于入门,我们是可以忽略他的了。 接下来从gpio开始,篇幅最大的一部分是 各种 外设控制寄存器 的 结构体。 其组织方式的特点是,把相应的寄存器全部定义成一个个的结构体,由此,就可以直接在RAM上定义这些结构体变量,从而直接通过结构体控制寄存器,在一定程度上实现了硬件的抽象。 此外还有各种设置寄存器的 宏掩码,位掩码宏 等等。 包括一些 C编译器 的扩展关键字 ,它也是通过宏 实现调用。 比如 FAR NEAR等 ——当然,现在我也不知道这到底是怎么用的。 2 在IAR下建立一个项目文件 在IAR下建一个STM8L的项目文件——我相信,对于STM32以及STM8S等其他系列也是一样的。 这件事情其实很简单,不过,鉴于个人的原因,我曾经在这件事情相当蛋疼,造成这种原因主要有两个: 1 都说STM的资料很翔实,实际上,据我看来,那些资料大都是涉及到具体应用方面,或者是硬件的资料,而对于入门,特别是对于基本没这方面基础的人来说是比较少的。(故而我一度如此蛋疼,故而我写这个文档,对于懂的人来说,它是一堆废话,它说的内容也很白菜,我只希望,如果你曾经像我一样为此蛋疼不已,我希望它能对你有切实的作用。) 2 STM实现硬件底层的方式比较特别,最主要表现在它的固件库——实际上,一度我以为这是它意法一家独创,然而,后来在我接触到另外几款微处理器时,我无意发现,其实它们的处理手法是类似的。 只是,相比于51而言,要较好理解这个固件库,你需要稍微好一点的C语法基础,比如能看懂一些宏定义(宏能实现的功能远远超出你的想象,这是一本C语言书上说的,现在我相信了。) 能看理解那些结构体的意义,是因为它能把成员定义在连续RAM空间上,或至少你要能理解结构体的成员操作符等等——不怕你笑话,曾经的我,还以为 成员操作符 是 STM32 库里的特殊方法实现的,殊不知,其实它是标准C的语法项目。 上面说的是客观原因,还有一个很重要的主观原因是我不够耐心去搜索网上的教程,总是因为没有找到我想知道的问题就草草放过,导致后来想起来,其实很多东西就在自己的文件夹里,只是自己不知道,所谓骑驴找驴。 回到正题。 在这里,我首先提供一份我在网上下载的stm8l的建立工程项目文件的pdf——这一次终于学会了怎么建立项目文件,都得归功于他。 这里,我简单提一下整个过程,会说到一些需要注意的地方,并加以解释。更多的细节你应该可以在这份pdf中找到。 1 首先,你要创建这个项目文件: 点 Project -- Create New Project 你会见到一个窗口,它提示你,使用的 工具链 是 STM8 系列 tool-chain STM8 Series 下面有几个选项: 1 Empty Project 空的项目文件 2 ASM 汇编文件 3 C C源文件 4 C++ C++源文件 这里,要记住,创建 项目文件 时,一定要选择 第一个 空项目文件 笔者第一次就因为没有参考入门资料,自己瞎猜,选择了 第三个,导致我根本无法编译。 此外,我注意到了,它居然提供了C++编译器!! 2 现在我们已经有了壳,你可以在 Workspace窗口 ,也就是左手边的这个,我们常叫它 项目管理窗口 见到一个蓝色方块实体,它的名字是 g-Debug,其中g是我的项目名,Debug表示它是一个调试模式的文件。 然后我们通过 File -- New --File 来建立一个C源文件。 一开始,你可以什么都不写,只是一个空的主函数 int main(void) { return 0; } 3 编译 我们的 主函数。 右键 g-Debug,下拉菜单里,会看到 Rebuild All这个选项,并不是说只有这个选项,不过,我们一般都用这个选项,因为它会重新编译我们所有的源文件。 这时,会弹出一个窗口,要求你存储一个 格式为 .eew 的文件--- 这个东西正是这个项目的工作环境文件。 然后你会看到 编译,链接,提示错误和警告数目,如果有,它还会提示具体错误信息。 这个如此简单的程序,自然是 零错误,零警告 的。 这也是我们以后写程序的一个要求,至少要是两个0,不然还怎么谈得上写出好程序? 4 现在,我们要把STM8L的固件库 加进来 按道理,这应该是有两种方式实现的,其一,IAR的安装文件本身已经包含了库,我们只需要调用,其二,我们直接把库的源码放进来,然后重新编译,链接——别担心,这只是说一个过程而已,实际上我们除了包含头文件和源文件进我们建立的项目文件,其他事情都交给编译器去完成。 如何获取固件库的源码? 最简单的方式,到st的官网下载一个例程,里面包含了完整的固件库,研读这个例程,我们还能学会如何操作这些API,去实现相应的外设操作。 我们将以gpio为入门任务,通过阅读其头文件,掌握相应的硬件信息和操作API ——这将成为一种新的开发模式,它的好处非常明显,让我们尽可能少去关心硬件底层的实现方式,快速应用起来。 快1点了,写到这里,有点困了,要睡觉了。这段时间赶项目相当累,还是早点睡为好。其实昨天就想写这个笔记,但昨晚有别的事情做,今晚也就只写了这么多。 下一篇只能过后再写了,下一篇我将写到加入gpio的库,然后用开关点亮一个LED。 差点忘了说,笔者的开发板是 stm8l-discover,是我在淘宝上买的一个88快的开发板,小巧,而且还自带了ST-LINK的下载器,我买它是为了一个小项目准备的。
|