Linux对于开发者来说真的是一个非常好的系统,为开发者来说应该不陌生,通常我们在Windows下开发stm32很方便,有非常多的工具,IDE等支持,同样是操作系统,Linux开发STM32也一点不会差。
Linux下开发stm32也有很多方法:
1.使用makefile
2.使用eclipse
3.使用stm32cubemx+sw4stm32。
4....
有大神使用第一种,本人对makefile一知半解,拿不出手。第二种,windows下可以使用eclipse开发,eclipse有linux版本,所以应该也是可以的,不过本人并没有试过。这里要说的就是第三种,当然除了这些,像Mbed之类的在线开发工具,只要有网,无论什么平台都能开发的就不说了。
stm32cubemx相信大家都已经很熟悉了,st推出的基于hal库的图形化配置和代码生成工具,不记得从哪个版本开始,这个工具添加了对linux的支持,st大力发展linux用户的野心昭然可见。除此之外,st还和ac6合作推出了stm32 ode,即sw4stm32,一款免费的可开发stm32的集成开发工具。sw4stm32是基于eclipse开发的,打开后的界面和eclipse基本完全一样,也同时支持windows和linux两种版本,这也说明了第二种方法是可行的。下面真正开始开发环境搭建工作:
1.准备工作
下载stm32cubemx:http://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-configurators-and-code-generators/stm32cubemx.html。
下载sw4stm32:http://www.openstm32.org/Downloading+the+System+Workbench+for+STM32+installer。
这两个软件都需要j**a运行时环境(JRE),所以需要先安装好JRE,这里就不讲了,百度一下都有。
2.安装
其实这两个软件安装方式做得很类似windows下的安装了,解压双击即可安装,不过既然用了linux系统,就允许我装一下逼,用命令行来安装。
安装步骤:
1.完成前面的下载后得到两个文件:
en.stm32cubemx.zip install_sw4stm32_linux_64bits-v1.8.run。
首先解压压缩文件包,
unzipen.stm32cubemx.zip。
得到
Readme.html
SetupSTM32CubeMX-4.15.0.exe。
SetupSTM32CubeMX-4.15.0.app。
SetupSTM32CubeMX-4.15.0.linux。
四个文件,exe后缀是windows下的安装文件,很熟悉了,.linux后缀就是linux系统的安装文件,此处用这个文件安装,(前面已经说过,可以直接双击安装),直接执行该文件:
./SetupSTM32CubeMX-4.15.0.linux。
(如果出错,查看文件是否有执行权限,加上权限后再执行)。
效果如图:
此时就会跳出图形安装界面,
这个界面都很熟悉了吧,和windows下一样,按照提示一步一步安装就可以了,甚至可以一路next到底就行。如果双击安装,会直接来到这一步,后面的步骤省略!
到这里,安装就完成了,再安装文件夹下找到STM32CubeMX文件双击,或者通过命令行启动该文件,就可以打开STM32CubeMX软件,见到我们熟悉的界面,使用方法和windows下一模一样,
安装好相应的库之后就可以建立工程了,不过我们还没有开发环境,所以现在先安装开发环境:SW4STM32软件:
执行命令
chmod+x install_sw4stm32_linux_64bits-v1.8.run。
给install_sw4stm32_linux_64bits-v1.8.run添加执行权限,可能需要超级权限,切换到root用户或者命令前加sudo执行,然后该文件就有了执行权限(前面多了x,颜色变了)。
然后执行文件
./install_sw4stm32_linux_64bits-v1.8.run。
开始安装,然后一路next,可以选择自定义安装路径,期间有可能需要输入root用户密码,安装过程和windows基本一样。
出现这个界面的时候,恭喜,安装完成了!!!
这个界面和eclipse完全一样的,喜欢eclipse的会比较习惯这个,不过更方便的是直接安装eclipse下的插件。
现在STM32CUBEMX和SW4STM32都安装好了,接下来建一个工程测试一下,手边刚好有一块Nucleo-F429ZI的开发板,就用这块板来测试,用Cube新建工程应该都熟悉了,这里就不详细描述了。
一般习惯不勾选Generate Under Root,这样文件结构更合理。
生成工程后有这么些文件,然后用sw4stm32打开:
选择File->Import->General->Exist Project intoWorkspace。
选择刚刚生成的工程的文件夹,Finish。
编译一下工程,没有错误,没有警告,然后添加几行测试代码:
然后编译,运行,就可以看到板子上LD2蓝色LED以1 Hz的频率闪烁,电脑上打开串口助手,就能接收到板子发送过来的测试信息,如下图所示。
至此,说明linux下编写stm32程序的环境已经完全搭建成功,并且成功创建了第一个可以运行的测试程序,接下来,就可以愉快的开发自己的stm32应用程序啦。
附上出处链接:http://www.eefocus.com/zero99/blog/16-06/386318_752b3.html?=blog。
linux开发是指:硬件开发?驱动开发?应用程序开发?
STM32是cortex-M内核,一般能跑linux的都是cortex-A核,架构差异蛮大的。
STM32单片机 = cortex-M内核 + 外设。
arm soc = cortex-A内核 + 外设。
先说结论:单片机开发基础对linux开发有帮助,但是很有限。
STM32基础:我个人认为是一定的code能力+寄存器配置能力 + 小型程序开发能力 + 外设驱动能力。
先大概说一下linux启动流程吧:
1、FSBL:引导程序,厂家固化的,不用管;
2、SSBL:bootloader程序,一般用u-boot,厂家会提供一个可用版本,定制裁剪功能看个人需求;
3、linux内核 + linux驱动。
4、跟文件系统rootfs,可能需要增添删改。
linux毕竟是庞大的操作系统,开发起来当然也非常复杂,需要的技术栈十分庞大,比如:
makefile、链接脚本、交叉编译、shell脚本、设备树、驱动框架等等。
即使是linux驱动开发也是基于框架的开发,与单片机开发差距较大。既然想进入linux世界,先从空杯心态开始吧。
写这么多,不是说linux很难,其实任何东西入门容易,精通难,比如Linux内核进程调度、存储管理等等,都是我不知道的。没关系的,可以从简单的开始入手,一步一步积累嘛。
工业控制用linux比stm32多。
STM32MP1强调适用于所有用户,但是工业控制领域采用Linux操作系统较多,消费领域采用安卓操作系统比较多,对于这一现状,ST表示第一款产品首先支持Linux操作系统,是从STM32MP1的性能考量。
整套STM32MP1软件套件可以简化客户的流程开发,其中重要的一点是STM32MP1的Linux平台,全面兼容主流行的OpenLinux开发包。目前,STM32MP1SoC驱动程序已被Linux社区采用和认可,ST的STM32MP1支持Linux4.19LTS,LTS表示ST会长期支持这一软件发行版。在支持整个Linux开发源时,STM32MP1全面兼容开源软件的标准,包括Linux的Foundation和YoctoProject,因为Linux代码开源,而且非常多,客户不可能全部都用或者清楚哪个好用,ST在Yocto建立一个Project,客户可以稳定简易使用这个开发包,而且支持Linaro社区,里面有一些参考软件和培训。因为Linux是开源的,代表是公开的,所以预集成安全操作系统OP-TEE,客户不需要再付费;客户可以使用免费的加密OS,让系统在可信区域加密,公开用的数据全部用开源的Linux。
ST还为STM32MP1提供了硬件解决方案。STM32MP1提供两种开发板:一是全部功能板,支持157A和157C,157C是安全加密功能升级的部分;探索板有两套,一套是精简版本,包括MP1+基本外设,还有一个相对完整的功能,配了MIPI屏和Wi-Fi/BT射频模块,当用户需要做无线连接时,可以以此为原型来开发。
环境:
ubuntu 13.10
stm32f103zet6
一、STM 32 GCC 安装。
stm32 属于arm cortex-m系列thumb指令集,所以给arm用的arm-none-eabi就可以了,首先是下载。
下载地址:
https://launchpad.net/gcc-arm-embedded/+download。
下载其中的gcc-arm-none-eabi-version-linux.tar.bz2。
解压到目录会产生gcc-arm-none-eabi的文件夹。
把该编译器添加到用户的环境中:。
在最后一行添加:
因为之前有添加过树莓派的编译器了,所以实际上是这样的:
两个编译器环境中间用冒号隔开;。
注销后测试:
可以查看到该编译器的版本,就表示可以了。
二、工程环境的建立
新建个工程文件夹及其目录
下载安装官方库:
1、stm32的寄存器不像51 avr等单片机那么少,自己写写库,背背寄存器就可以了,所以ST公司提供了官方的库。为了避免重复造轮子,就直接采用其库,库版本为STM32_USB-FS-Device_Lib_V4.0.0,这个库多了usb支持,下载的话到st官网搜索stm32f10x就有了。
2、解压把解压好的文件夹复制到刚才新建的libs里面.。
3、在工程根目录下新建Makefile.common文件,这个为通用makefile。
编译库文件:
进入libs文件夹,新建Makefile:
编译该库:
就会在lib目录下生成libstm32.a,这个就是编译好的静态库了。
建立工程编译ld文件
这个ld文件,为在编译时告诉编译器把代码放到什么地址,根据芯片的内存以及flash容量不同有所调整。
在工程根目录下新建linker.ld文件。
根据芯片型号不同,选择相应的RAM FLASH大小。
在工程根目录下新建Makefile文件:
在src里面添加测试源码,主要是startup.c 以及main.c。
然后进入工程主目录下make就好了。
李工的经验,有如下几点不同,希望你供你参考。
1.51是8位单片机,而stm32是32位单片机。时钟方面stm32运行频率更高,性能更好。两种单片机性能差别比较大。
2.片上资源不一样。简单讲stm32单片机外设丰富,比如串口,I2c等。stm32单片机片上flash和RAM更大。以后升级功能,改进功能的空间大。如果考虑以后功能升级,建议考虑stm32.。
3.成本上应该是51单片机要便宜一些。
4.stm32单片机开发资料和参考程序比较多,有库函数,应用起来方便。51单片机更多直接操作寄存器,开发不方便。
我是北漂李工,一个北漂8年的程序员。
在项目开发过程中,我们经常会遇到需要单片机选型,所以我们常常会根据项目功能需求来选择合适的单片机品牌和型号。常见的51内核单片机和STM32单片机也会是我们主要考虑的型号。
STM32与51单片机的参数差异 STM32与51单片机软件开发难度差异 STM32使用寄存器比51单片机要多很多,其配置比51复杂,而且中断逻辑,时钟配置使能控制等很多概念都是51单片机中所没有的,再加上stm32很多功能如USB,FSMC。等等功能,其功能更加强大,虽然官方提供了开发固件库和相关开发辅助工具,但很多时候,遇到bug调试难度也加大了很多。
stm32固件库很多实用结构体和指针变量,很多在51单片机开发过程不太注重结构体与指针的使用,那么在STM32开发过程中,就难以理解其固件库的运用逻辑。
STM32与51单片机的性价比差异 STM32比51处理速度快,外设功能丰富强大,所以价格普遍比51单片机偏贵,在项目选型过程中,需要根据项目功能需求,选择合适的单片机,如果是51单片机能用,那么考虑项目成本,肯定是不能选择STM32,如果51单片机不能用,即使再便宜,也用不了。
总之, 作为单片机开发工程师,需要能够进行一定的器件选型能力,这个也是必备的专业技能。
搞多了开发,你会发现其实用什么真的不重要,只要你会用就行。单片机好比一个精密机床,你要想加工一件作品,你用任何品牌的机床都可以,关键点是这个机床你会不会用,了解通透程度如何。不同品牌机床操作方法肯定大同小异,不会差别很多,你会用一种,另外一种不用看手册,也能猜出个七八分。机床这样,编程也是这样,给你个51,你应该能控制全世界。
首先如果同一个项目可以用51和STM32同时开发,就不建议使用STM32了,51成本更低。
STM32和51单片机不同点有很多:
1.开发方式不同
51单片机一般是直接操作寄存器,STM32主要操作库函数编程。
2.系统资源不同
一般而言STM32资源要比51单片机更多。
3.开发环境可能不同
51和STM32一般来讲都可以在Keil下开发,但STM32有更多中选择,可以在Linux下面开发,windows Esplise下开发,甚至直接用VSCode + 插件方式开发。
4.操作系统区别
一般而言,51单片机不支持操作系统,STM32支持各种主流操作系统,STM32开发起来更容易,可以很方便的利用系统实现各种场景下的应用,51单片机由于没有操作系统,开发起来有一定阻碍,甚至有时候必须要做出部分功能的牺牲才能达到整体功能的和谐运行。
5.后期维护方式可能不同。
STM32资源足够多,可以写一个bootloader程序来完成之后的系统升级工作,不需要拆机就可以完成固件的升级,而51单片机则不可以。
STM32系列单片机分为CORTEX M0,M1,M4内核,个人觉得STM32F0系列的从性价比,功能上可以完全替代51单片机,而且性能更好。当然也可以使用51,价格更便宜一些,,但是要做功能复杂一些的产品,51系列的单片机是不能满足的,比如驱动RGB 屏,至少要用STM32F429,支持LTDC接口,而且需要外扩内存,支持FMC接口,比如要做数字音频,要支持I2S ,比如要做USB传输,要支持USB ,要移植操作系统,文件系统等等,要看CPU 的资源等等,总之,要根据所做的项目看CPU的资源是否满足要求是非常重要的,这要再设计前期靠考虑周到,否则,项目做到一半发现资源不够,需要重来是很郁闷的事情。
做产品要考虑成本,几毛钱就能搞定的,没必要几块甚至几十块。一般来讲,价格越贵的,资源越多,使用起来越简单,随心所欲。简而言之,价格越低,资源越少的单片机,完成项目的难度越大,需要优化代码和算法。
在stm32之前是8051的天下,silabs的c8051f外设相当的强大。硬件不错,可惜代码不够多。atmel的代码比较多,可惜芯片不够强大。
stm32一出,横扫天下,要硬件有硬件,要软件有软件,价格便宜量又足,连低端产品都用他。
电动自行车控制器都用它,无刷电机都用它。
stm32是史上最广泛使用的单片机。
只要资源够用,都可以,20年前我用8051,现在用stm32。stm32方便些,可以在线调试。我现在开发东西复杂一点的,用stm32 1系列和4系列。简单一点的用stm8s一块多钱的样子。
我觉得你的问题对比对象不太对,一般能用51的项目用stm8或者avr即可。一般来说stm32比51强太多了,无论是性能和价格都没有可比性。
所以在我看来开发上没有什么太大不同,无非就是开发环境不一样,如果代码规范的话很容易进行互相移植(最近芯片涨价严重,我们公司正在换国产),而所谓的外设(uart iic spi等等)其实没有太大区别。
但是在生产上差别就出来了,主要在于交货能力,一般而言同为一级代理采购物料,st的交货能力要比stc的强(当然最近行情st也不行了,交期干到了9月份)。所以如果你的产品是主力长期货,建议选择交货能力强的。
我就记得51单片机放不了几个变量就超出了。复杂点的程序都很难写。
原文地址:http://www.qianchusai.com/stm32linux%E5%BC%80%E5%8F%91.html