ST 公司推出了了Cortex+A/cortex-M 异构解构的单芯片多核处理器产品了,虽然目前只有单核或者双核A7加M4 系列的产品,虽然和4核产品相比,MPU 的性能显得弱了一点,但是它融合了可以运行linux OS的coetex-A 处理器和实时性强,外设丰富的cortex-M4 处理器,在嵌入式是应用中具有其独特性。买了一块米尔科技的STM32MP157 开发板,体验一下。货还在路上,顺丰快递员还没有敲门。先看资料,搭开发环境。
STM32MP1系列
目前 该系列有三个产品
- STM32MP157:双Cortex-A7内核@ 800 MHz、Cortex-M4内核@ 209 MHz、3D GPU、DSI显示接口、以及CAN FD
- STM32MP153:双Cortex-A7内核@ 800 MHz、Cortex-M4内核@ 209 MHz、以及CAN FD
- STM32MP151:单Cortex-A7内核@ 800 MHz、Cortex-M4内核@ 209 MHz
这里以STM32 MP157 为例,介绍这个产品的特点:
处理器能力
- 运行于800 MHz的双Cortex®-A7内核
- 32KB的L1指令缓存
- 32KB的L1数据缓存
- 256KB的Level 2缓存
- 运行于209 MHz的Cortex®-M4内核
- 单精度浮点单元(FPU)
- 一套完整的数字信号处理器(DSP)指令
- 内存保护单元用于增强应用安全性
外围电路
- 1个千兆以太网口
- 2 个CAN-FD 接口
- 6个SPI口
- 4 × UART + 4 × USART
显示
- 3D GPU
- LCD-TFT
- MIPI® DSI 2
这样的配置用于小型的物联网,工业控制器已经是足够了。而批量的价格12美金左右。和STM32H7 系列产品价格相差不大了。其实,选择MCU 有时候也不是完全冲着MCU 主频,价格和核的数量去的。也要看是否满足软件的需求。我们需要实现软件的动态装入,实现软件组件化,因此,需要处理器具有MMU功能,所有cortex-M4 就无法满足要求了。如果采用瑞芯微,全志的MCU ,内核数量多,价格低,但是外围电路少。当然NXP 的i.MX 系列应该是不错的。但是imax 6 似乎旧了一点,外围电路也不完全符合我们的要求。
开发环境
STM32MP1 的一个缺点是它太新的,网络上能够找到的文章太少,而且大都是无头无尾地抛出一段来。主要还是要看ST的wiki。参考文章:
Create a simple hello-world application
拿到手的第一件事情就是编译一个hello world 应用程序,让它跑起来。
1 下载SDK
下载完成后解压。
2 建立工作空间 STM32MPU_workspace,在其中又建立几个文件夹
-tmp -用于存放解压的SDK
- Develop-Package
-SDK
3运行Install.sh
进入tmp 运行SDK的安装shell
yao@yao-dc:~/yao2020/STM32MPU_workspace/tmp/stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sdk$ ./st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24 -d /home/yao/yao2020/STM32MPU_workspace/Develop-Package/SDK
然后就一路安装下来,没什么麻烦。
4 启动SDK
yao@yao-dc:~/yao2020/STM32MPU_workspace/Develop-Package$ source SDK/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
不知道为啥,每次都要启动一下?
5 检查版本
yao@yao-dc:~/yao2020/STM32MPU_workspace/Develop-Package$ $CC --version
arm-ostl-linux-gnueabi-gcc (GCC) 9.3.0
6 编写hello 程序
#include <stdio.h>
int main(void){
printf("Hello!\n");
return 0;
}
7 编译
(base) yao@yao-dc:~/yao2020/STM32MPU_workspace$ $CC hello.cpp -o hello
编译成功了! 先写到这里吧!,顺丰的快递员进入小区了。
8 下载到开发版
快递员送来了开发板,包装配件都不错,说明还是彩色的。照他们的方式连线。IP 地址的DHCP 是可以用的,连上路由器后自动分配了192.168.31.194 (通过串口终端方式ifconfig 命令看的。之后就不用串口终端了。
在开发板上建立了一个工作目录 workspace
mkdir workspace
使用 scp 将编译好的hello 传送到开发板
(base) yao@yao-dc:~/yao2020/STM32MPU_workspace$ scp hello [email protected]:/home/root/workspace
hello 100% 11KB 11.4KB/s 00:00
9 使用ssh 实现远程终端
10 测试 C++
#include <stdio.h>
class hello {
public:
void sayHello();
};
void hello::sayHello(){
printf("Hello! from object\n");
}
int main(void){
hello Hi;
Hi.sayHello();
return 0;
}
编译下载,没有问题。