STM32的库函数的一些知识
内容简介
本手册将由浅入深,带领大家进入 STM32 的世界。本手册总共分为三篇:1,硬件篇,主要介绍我们的实验平台;2,软件篇,主要介绍 STM32 开发软件的使用以及一些下载调试的技巧,并详细介绍了几个常用的系统文件(程序) ;3,实战篇,主要通过38个实例(绝大部分是直接操作V3.5 版本库函数完成的)带领大家一步步深入 STM32 的学习。 本手册为ALIENTEK MiniSTM32 V3.0开发板的配套教程,在开发板配套的光盘里面,有详细原理图以及所有实例的完整代码,这些代码都有详细的注释,所有源码都经过我们严格测试,不会有任何警告和错误,另外,源码有我们生成好的 hex 文件,大家只需要通过串口下载到开发板即可看到实验现象,亲自体验实验过程。 本手册不仅非常适合广大学生和电子爱好者学习 STM32,其大量的实验以及详细的解说,也是公司产品开发的不二参考。
Cortex-M3 ARM V7-M ARMV4T劲的性能,更高的代码密度,更高的性价比。Cortex-M3 处理器结合多种突破性技术, 在低功耗、低成本、高性能三方面具有突破性的创新,使其在这几年迅速在中低端单片机市场异军突起。
国内Cortex-M3市场,ST(意法半导体)公司的 STM32无疑是最大赢家,作为 Cortex-M3内核最先尝蟹的两个公司(另一个是 Luminary(流明))之一,ST 无论是在市场占有率,还是在技术支持方面,都是远超其他对手。在Cortex-M3芯片的选择上,STM32 无疑是大家的首选。所以自从ST推出STM32之后,一股强劲的STM32学习开发风潮扑面而来。本书也因STM32的流行应运而生。
本手册结合《STM32参考手册》,《Cortex-M3 权威指南》以及《固件库中文参考手册》三者的优点,通过对关键寄存器以及相关固件库函数的讲解,深入浅出,向读者展示 STM32 的各种功能。总共配有38 个实例,基本上每个实例在均配有软硬件设计,在介绍完软硬件之后,马上附上实例代码,并带有详细注释及说明,让读者快速理解 STM32 各个外设固件库函数含义以及实例代码运行过程。
这些实例涵盖了 STM32 的绝大部分内部资源,并且提供很多实用级别的程序,如:内存管理、文件系统、图片解码、IAP 等。所有实例在MDK5.10 编译器下编译通过,大家只需下载程序到ALIENTEK miniSTM32开发板V3.0,即可验证实验。 不管你是一个 STM32 初学者,还是一个老手,这本手册都非常适合。尤其对于初学者,我们将手把手的教你如何使用 MDK,包括新建工程、编译、仿真、下载调试等一系列步骤,让你轻松上手。
本手册参考的实验平台是ALIENTEK miniSTM32 开发板V3.0,有这款开发板的朋友则直接可以拿配套光盘上的例程在开发板上运行、验证。而没有这款开发板而又想要的朋友,可以上淘宝购买。当然你如果有了一款自己的开发板,而又不想再买,也是可以的,只要你的板子上有 ALIENTEK miniSTM32 开发板上的相同资源(需要实验用到的),代码一般都是可以通用的,你需要做的就只是把外设的驱动函数(一般是 IO 操作)稍做修改,使之适合你的开发板即可。
本手册分为库函数版本和寄存器版本,本手册为其库函数版本,需要仔细学习 STM32 底层寄存器开发的朋友可以直接参考我们的寄存器版本手册。
在这里我们要提到 STM32寄存器开发和固件库开发的区别。寄存器开发跟传统的 51, AVR单片机开发类似,直接操作底层寄存器。开发人员需要掌握相关寄存器的作用,这对于直接从51,AVR单片机转型而来的开发人员来说,他们更加熟悉底层原理,所以偏向寄存器开发,因为这样他们的代码更加高速有效,内存利用率更高。但是 STM32 寄存器纷繁复杂,不便于快速开发项目,所以 ST 推出了一整套固件库,将底层寄存器开发全部封装成库函数,这样使得开发人员摆脱直接操作寄存器的烦恼,直接操作库函数开发自己的程序,项目开发更加快速,但是内存利用率稍低。
简而言之,库函数开发用牺牲程序效率换取开发速度,而寄存器开发牺牲开发速度换取程序运行效率。所以针对两类不同的用户人群不同的需求,我们书籍提供两个版本。 两版本的内容大致接近,只是讲解的侧重点不一样,库函数版本的侧重点是 STM32 的固件库原理以及使用固件库实现所有实例,寄存器则更加侧重寄器的讲解以及使用寄存器实现所有例程。两版本的实战篇的实验列表基本一致,有兴趣的朋友可以对比阅读,加深理解。
1) 移植UCOSII
要想UCOSII在 STM32正常运行,当然首先是需要移植UCOSII,这部分我们已经为大家做好了(参考光盘源码,想自己移植的,请参考光盘UCOSII资料)。 这里我们要特别注意一个地方,ALIENTEK提供的SYSTEM 文件夹里面的系统函数直接支持 UCOSII,只需要在 sys.h 文件里面将:SYSTEM_SUPPORT_UCOS 宏定义改为 1,即可通过delay_init函数初始化UCOSII的系统时钟节拍,为UCOSII提供时钟节拍。
2) 编写任务函数并设置其堆栈大小和优先级等参数。
编写任务函数,以便 UCOSII调用。
设置函数堆栈大小,这个需要根据函数的需求来设置,如果任务函数的局部变量多,嵌套层数多,那么相应的堆栈就得大一些,如果堆栈设置小了,很可能出现的结果就是CPU进入HardFault,遇到这种情况,你就必须把堆栈设置大一点了。另外,有些地方还需要注意堆栈字节对齐的问题,如果任务运行出现莫名其妙的错误(比如用到sprintf出错),请考虑是不是字节对齐的问题。
设置任务优先级,这个需要大家根据任务的重要性和实时性设置,记住高优先级的任务有优先使用CPU的权利。
3) 初始化UCOSII,并在UCOSII中创建任务
调用OSInit,初始化UCOSII,通过调用OSTaskCreate 函数创建我们的任务。
4) 启动UCOSII
调用OSStart,启动 UCOSII。
通过以上 4 个步骤,UCOSII 就开始在 STM32 上面运行了,这里还需要注意我们必须对
os_cfg.h进行部分配置,以满足我们自己的需要。
完整的pdf格式文档51黑下载地址(共589页):
STM32不完全手册(mini)-库函数版本.pdf
(19.31 MB, 下载次数: 434)
|