文章转自armfly开发板V4软件开发手册,分享学习~
今天有幸看到armfly的开发板软件开发手册,开头的基础知识,真的很有用,还好有看到,一切都不迟,感悟很多,摘抄部分,学习分享~
关于开发环境的搭建
(个人认为,好用的工具,顺手的开发环境,对于编程是一种好的习惯,也是一种好的享受,所以,在环境搭建方面,我还是比较在意软件的互相联合使用,工程建立的规范化等等,这样可以尽量少的在后期更换不同的环境,变软会很浪费时间,一次到位,一路顺风顺水~)
个人偏好的环境搭建:
集成开发环境(IDE):Keil公司的RealView MDK
源文件编辑器:UltraEdit/SourceInsight/IDE自带的编辑器
串口工具:SecureCRT(一个专业的超级终端工具,支持很多接口(包括串口)和协议,推荐使用。)
RealView MDK 工程配置:
(这里很有必要去熟悉下)
1.“ Device”选项。选择正确的CPU型号。 选择STM32F103ZE。
2.“ Target”选项。勾选” Use MicroLIB” 。 如果不选,printf函数将无法输出信息到串口。
3.“ Output”选项。可修改可执行文件名。勾选“ Create HEX File” ,表示生成可单独烧写的Hex文件。
取消 “ Browse Information”选项可以大大加快每个文件的编译速度,但将丧失鼠标右键定位函数和宏的功能。 这个选项不影响最终的Hex。
在编译过程中,会生成大量的obj临时文件,你可以通过“ Select Folder for Objects”按钮指定Obj
文件的存放目录。这样将是工程文件目录变得非常简洁。
4.“ Listing”选项。在编译过程中,会生成大量的lst临时文件,你可以通过“ Select Folder for Listings”按钮指定lst文件的存放目录。这样将是工程文件目录变得非常简洁。
5.“ User”选项。可以指定编译之前和编译之后执行的用户程序。
为了将编译生成的Hex文件复制到指定目录并更名保存,我们可以在编译后执行一个bat批处理文件。
CopyHex_Flash.bat 文件是一个文本文件,内容如下:
copy Flash\Obj\output.hex ..\output(mdk).hex
6.“ C/C++”选项。此处“ USE_STDPERIPH_DRIVER”表示使用ST的固件库;如果有其他的预编译宏,可以用逗号分割。
Include Path 指定头文件的路搜索路径
添加 --diag_suppress=870 控制,可以避免中文字符串告警
7.“ Asm”选项。无需更改。
8.“ Linker”选项。无需更改。
9.“ Linker”选项。无需更改。
点击” Settings”按钮设置硬件仿真器,请选择对应的仿真器型号。我们的例程缺省都配置的是J-Link
仿真器。
勾选“ Run to main()”可以在启动Debug时,执行到main()函数暂停。
10.“ Utilities”选项。
击” Settings” 按钮设置硬件仿真器,请选择对应的仿真器型号。我们的例程缺省都配置的是J-Link
仿真器。点击” Add” 按钮,添加Flash编程算法。选择STM32F10x High-density Flash。
/*****以上的设置是编程的前提,一定要注意,否则到时候出现不知名的错误就摸不着头脑了。*****/
关于STM32学习的一些观点
(仁者见仁,智者见智)
坚定信念选择ST固件库
不要再思考固件库开发还是寄存器开发这种问题了。 99%的有实际产品开发经验的工程师都会告诉
你,使用ST的固件库开发STM32应用是最佳的选择。这套固件库写的非常规范,很严谨,没有一定的C语
言功底和程序架构设计功底是写不出来这种代码的。你如果觉得固件库过于复杂,太乱了,只能说明一个
问题:你没有参与过大型软件开发、你的C语言还没学习到位、你还没有程序架构设计的概念。
我们要做的是学会如何看懂固件库、学习如何使用固件库。 深入的话可以借鉴固件库的写法构建我们
自己的外设驱动。
可能有些人会反驳,不学习寄存器,感觉学习地不深入。我的观点是:寄存器是最没有学习价值的,
硬件功能复杂了必须通过一些寄存器的某些bit来配置和选择硬件功能。我们需要大量的时间来记忆、梳理
寄存器每个bit之间的关系。我认为是不值得的。你不如将这个时间花在学习ST固件库是如何梳理、归纳
这些硬件功能,也就是学习C程序设计方法。
我们也不是完全让你不去了解寄存器功能,在极个别时候,我们也会使用寄存器直接操作。不过我们
也就是将ST固件库的函数展开以提高代码执行效率。
选择性学习
(这个可能适合很多上进心很强的童鞋,总想把STM32搞精搞透,甚至不只是单片机,FPGA等等等等的技术,人生苦短,抓住精华,尽力而为!)
STM32的功能实在太多,和STM32相关的软件组件也多如牛毛。而人的精力是有限,你就算学习一辈子,也不可能学会所有的东西。人的一生,时间是最为宝贵的,我们一定要将时间用在刀刃上。别人做好的开源的第三方的代码,如果你测试应用过,没有问题,那他就属于你的了,你只要学会怎么移植和使用它就足够了。如果别人已经移植好了,那就更方便了,直接拿来使用即可。没有必要再花精力深入代码去研究别人的程序结构了。比如FatFS、 uIP、 ST固件库、 uCOS、 emWin。除非你是做基础研究或者查找BUG。
我们一定要将时间腾出来去学习和掌握更多的软件模块。这样,当项目来临时,你就可以从容应对。
构建自己的代码库
(根据自己的代码风格,以及常用的模块,建立自己的小代码库,这样以后用到的时候,直接拿来改一改,自己的东西自己心里清楚,用着明了,心里也踏实,也利于项目的快速启动和建立)
自己验证过的代码,要学会收集整理。变为自己代码库的一部分。日积月累。等到做产品和项目时,80%以上的代码来自于代码库。做产品很多时候就是搭积木。你的代码库越丰富,做起产品来也就越快越好。一些好的工程框架也要学会收集整理。我们在很多时候做项目,都是直接复制某个相近的工程。不可能每次都去重新新建一个工程。好比盖房子,你可以直接拿砖砌,而不用在花时间去造转。
/*****以上观点仅供参考,开发板的团队根据自己的开发经验和体会得出的建议,也是我比较同意的观点*****/
授之于鱼,不如授之于渔
查询下载资料请直接访问ST的官方网站:
http://www.st.com
另外一个非常好的中文网站是:
http://www.stmcu.org
? 参考手册(Reference Manual) 【内容很全面,软件工程师必须阅读】
? 数据手册(Data Sheet) 【硬件工程师必须阅读】
? 勘误手册(Errata Sheet)
描述了芯片某些功能的局限性,并给出解决办法。这个手册也比较重要,有时候我们
我们觉得有些地方调试老是出问题的时候,就需要查找一下了,看看是否给出了解决方案。
? 闪存编程手册(Flash Programming Manual)
对芯片片上闪存的操作指南、读写保护设置,选项字节信息
? 内核编程手册(Cortex-M Programming Manual)
对内核的系统控制块寄存器的描述。这个手册有的时候也要用到,比如我们需要了解 NVIC 和
SysTick 相关的寄存器,就需要使用这个手册,这个手册可以在 ARM 官方网站下载,也可以到
ST 官网下载,区别就是 ARM 方法的是通用的,ST 发的是针对自己的芯片做的,有时候在参考
手册上面找不到相关寄存器的信息时,就需要这个手册。