Author:onceday Date:2022年8月26日
也信美人终做土,不堪幽梦太匆匆!
前言: 本文章基于PikaScript脚本语言在阿波罗Stm32F429开发板的实践记录。PikaScript是跨平台的超轻量级嵌入式 Python 引擎,零依赖,零配置,中文资料非常丰富。可获取关于它们的详细资料:
嵌入式是一个非常广泛的概念,但在这里,它指嵌入式MCU,以下是百度百科的解释:
微控制单元(Microcontroller Unit;MCU) ,又称单片微型计算机(Single Chip Microcomputer )或者单片机,是把中央处理器(Central Process Unit;CPU)的频率与规格做适当缩减,并将内存(memory)、计数器(Timer)、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD驱动电路都整合在单一芯片上,形成芯片级的计算机,为不同的应用场合做不同组合控制。诸如手机、PC外围、遥控器,至汽车电子、工业上的步进马达、机器手臂的控制等,都可见到MCU的身影。
PikaScript并不局限于MCU这块,它可以在嵌入式Linux上也大放光彩,但这并不是本文的侧重点。这里只谈嵌入式MCU,只做裸机开发,只用寄存器编程,这是一种浪漫,源自于热爱。
本文的内容会很基础,这是一个小白的成长之路,记录都是随处可见,唾手可得的基础知识,并希望留下一点回忆。本文并不会是绝对正确的,但它一定是自由的,何为自由?那就是你可以拒绝本文的观点,这是你的自由,这也是我的自由。
本文所用的阿波罗Stm32F429是一个外设非常丰富开发板,且拥有正点原子提供的众多资料。单片机的种类很多,学习一定要挑一个简单的,基础的,资料众多的开发板。并且把所有的常见功能都亲自试一遍,这是一种明智的策略,可避免几个月下来,只会控制几个GPIO和通信外设。至于熟悉这些外设,将是一辈子的事情。
其他平台,如Linux,mac等请自行寻找资料。
单片机的架构和常见的ARM和X86有很大的不同,因此我们需要在Win 10下编译C源文件,然后在MCU上运行,这种在一个平台上生成另外一个平台的可执行目标文件,或者二进制文件,就是交叉编译。
详细解释可查看文档:交叉编译_百度百科 (baidu.com)。
我们能用的编译软件很多,有收费的,也有开源的。免费的编译软件大多基于eclipse的深度定制,你可以发现他们就像亲兄弟一样相似。
这里使用收费的ARM Keil v5,不过是破解白嫖,因为本文是仅供学习交流之用,不要使用破解版去开发产品卖钱!
其他软件自行了解,国内关于keil的开发资料很多,站在巨人的肩膀上才能看得更远,如果N年以后,你觉得Keil垃圾,甚至说用集成IDE开发是菜鸟行为。这很正常,得恭喜你,这N年你没有虚度,变得很强。在《第一性原理》里面,混沌大学创始人李善友说过,如果一个人一直在成长,一直打破自己的认知界限,那么他就会觉得之前的自己很幼稚。单片机的学习过程是一样的,所以说希望我们一直是菜鸟,一直在学基础知识。
下载Keil非常简单,除了下载速度有点慢之外。
如图所示,MDK-ARM就是Stm32F429所需要的编译IDE,适用于常见的Cortex-M系列MCU。
Cortex-M是非常典型的单片机内核架构,但不在鄙视链的高端,学这个可能会让你“低人一等”,要有心理准备。
旁边还有一个51单片机,STC宏晶科技这个产品做得挺不错的,可以看看:
Keil官网:Keil Product Downloads
点击进去,然后填写信息,随便填就行,然后就会出现下载界面了。
作为一个计算机业余爱好者,是无法忍受官网下载的速度,这个时候可以使用一款“软件”—迅雷来提提速。
类似的其他同类软件都可以试一试,只要能提速就好。
下载好了之后,双击运行安装。
这里core就是软件安装位置,Pack是交叉编译所需的库文件,后面会用到。 请选择一个合适的位置安装。
其他界面直接选择,个人和公司信息随便填写,然后等待安装完成。
然后会弹出一个Pack安装界面,这是单片机开发编译所需的库文件集合,可以看到装置(单片机)类型很多,这需要根据所开发的单片机类型来下载。
本文开发Stm32F429,所以选择STM32F429IGT6,下载它的包文件。
这里的包也可能下不动,视不同网络情况,如果下不动,就需要手动使用迅雷下载。
keil安装包默认是放在微软云平台Azure上面,国内访问速度有限,可以使用迅雷离线链接下载这些安装包。
官网离线包地址:https://www.keil.com/dd2/pack/#!#eula-container
网页上面找到所需包的下载链接(根据Pack Installer里面的包名找,如STM32F4xx_DFP),复制到迅雷中下载即可!
file->import
,即可手动导入离线下载的包文件。Packs->Check For Updates On launch
,取消选择,然后重新打开Pack installer,再手动安装。这个时候,已经解决了大部分问题了,但是软件未破解,代码数量受限制。
破解软件可自行在网上寻找合适的,这里提供一把钥匙:
需要以管理员身份启动ARM keil,然后在导航栏的file->License Management
打开许可证页面,把
Computer ID(CID)复制到合适的软件 ,Target选ARM,然后将你的序列号,复制到许可证页面的New license ID code
,然后add LIC
。
成功的话,将看到Support Period
变成Dec 2032
。
到这里,已经完成ARM keil的安装了。
第一个是VScode,免费的打字软件,很好用。
第二个是STM32CubeMX,可以快速可视化查看Stm32单片机外设,以及配置情况,一键生成keil工程。
Keil+VScode+STM32CubeMX是本文主要使用的开发工具。
PikaScript官方文档教程提供了多种快速上手路径,Stm32F429所属应为BSP工程开始,但是很可惜的是,Stm32F429开发板不在官方的支持板上。
这里面有keil和linux下的仿真工程,无需实际MCU来运行。还有大量的BSP工程,目前Stm32F1系列支持比较完善,可以尝试从这些模块开始。最为特殊的就是官方定制的Pika派,专门为了PikaScript设计和制造,拥有完善的代码支持库。
所以目前学习PikaScript的一个比较好的方式是购买官方开发板,非常优惠!
可选配置:
这个开发板由 PikaScript 项目官方支持,持续滚动更新,PikaScript 的最新内核,最新功能,都可以在这个开发板上抢先体验到。
这个开发板也由项目官方适配了丰富外设模块、包括 GPIO、TIME、ADC、IIC、LCD、KEY、PWM 等模块的驱动都已经开发好,可以直接用 python 进行编程。
非常可惜,要是买一个Pika派就好了。
现在暂时无需下载PikaScript,直接进入下一步骤吧。
哪里有BSP代码呢?当然是互联网上,之前在Keil下载的Pack已经包含了标准头文件、可重定位目标文件、说明文档等。但是这是最基础的BSP代码,离我们想显示hello world,那还远远不够。
所以需要更“高级”的BSP代码,非常幸运的是,国内有两个比较好的免费资料提供网站:
阿波罗Stm32F429本来就是正点原子的产品,因此直接下载他们全套资料,非常多,包含上百个项目例程。
选择一个合适的,就实验62 综合测试实验吧。
在keil里面打开该工程,最好复制到一个新的文件夹里面,并且更改一个合适的文件名。
在keil导航栏,Project->Open Peoject,然后浏览到该项目文件夹内即可,一般在项目文件夹内的USER内,有绿色的keil图标显示。
导入之后,会发现,好多文件,好多代码。这些工程是已配置好的keil工程,有头文件包含路径、C源文件、静态库文件、全局宏定义、编译选项、下载选项、调试选项等,都预先配好。
直接编译一下,就是导航栏file、Edit、View下的几个向下箭头图标。
需要使用rebuild这个,它两个箭头在匣子里面,与众不同。
然后下载到Stm32F429开发板上,下载可以直接点图4.3中的Load
图标,但这个需要连接调试器才行,如Stlink,Jlink,CMSIS-DAP。
如果没有调试器,要使用串口下载,这个要考虑具体的情况,购买成品开发板商家肯定会讲解如何下载可执行目标文件。
事实上,绝大多数单片机都会内置bootloader程序,通过该程序可以使用串口,usb,can等通信接口来烧录flash。
问题是,这个烧录过程,有的可能做到一键下载,有得怕是要一系列的步骤操作后才能下载。所以这是极度依赖单片机生产厂家和售卖厂家的操作。
关键就一点,狂问卖给你的人如何烧录就行了。
激动人心的时候来了,Stm32F429在烧录新的代码启动后,进入一个可以操作的界面。
双击记事本,输入"Hello World!"。
非常简单就显示了hello world,似乎很容易。
但是可以看看这个项目有多少C代码文件,难道随便实现点功能就要重新编译一次代码,然后下载?
这不太好,如果它能支持PikaScript,无需重新编译,别说显示"hello world",写个游戏运行都可以。
不过中间有个拦路虎,就是BSP代码,哪些是BSP代码?为什么要写BSP代码?
这是一个过程抽象,过程抽象可以有很多层次,显然,高层次应该是Pikascript,低层次是汇编和C。但中间分水岭得看具体情况。BSP代码就是底层的过程抽象,为上面PikaScript提供统一的接口,从而屏蔽底层硬件的差异。
所以接下来的,将干掉这个拦路虎(BSP库),用上PikaScript,享受高效率编程。
问题是,这个BSP库,可能随着项目功能的增加,会越来越多,干掉一批,又来一批。
但好消息是,有很多人写过这个BSP代码,因此去网上找就行了。
那么,接下来的任务就是先让单片机启动并且通过串口输出一个hello world,这是真正意义上的第一步,而且将使用Pikascript来调用BSP输出。
(--------------------------------------------未完待续--------------------------------------------)