使用 QEMU 模拟嵌入式 Linux 系统

使用 QEMU 模拟嵌入式 Linux 系统

 

1. 简介

嵌入式软件开发依赖于嵌入式硬件设备,如开发板、外部模块设备等,但如果调试工作与外设无关,则无需购买硬件即可使用QEMU模拟内核调试。

它可用于 Linux 和 Windows 主机以及模拟的 PowerPC、ARM、MIPS 和 SPARC 目标。 QEMU 采用在主机和目标处理器之间提供最小转换层的方法。 主机处理器是运行仿真器的处理器,目标处理器是被仿真的处理器。

下面详细介绍搭建QEMU开发环境的过程。

 

2。 环境

2.1 使用环境

* Ubuntu-18.04.1

或者:

* 电脑:Windows10

* 虚拟机:VirtualBox-5.18

* 虚拟操作系统:Ubuntu-18.04.1

* 模拟开发板:vexpres

2.2 搭建环境时用到的工具

* qemu-4.2.0

* linux-4.14.172 (Linux 内核)

* u-boot-2017.05

*busybox-1.31.1

*arm-linux-gnueabi-gcc

将所有相关文件放在 /home/joe/qemu

3.安装交叉编译工具

# sudo apt 安装 gcc-arm-linux-gnueabi

 

检查是否安装成功

$arm-linux-gnueabi-gcc -v

使用内置规格。

COLLECT_GCC=arm-linux-gnueabi-gcc

COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabi/7/lto-wrapper

目标:arm-linux-gnueabi

配置:../src/configure -v –with-pkgversion='Ubuntu/Linaro 7.5.0-3ubuntu1~18.04′--with-bugurl=file:///usr

线程模型:posix

gcc 版本 7.5.0(Ubuntu/Linaro 7.5.0-3ubuntu1~18.04)

 

4.配置和编译Linux内核

4.1 下载Linux内核

从 www.kernel.org 下载所需的内核版本。

这里我下载了相对最新的长期支持的内核版本linux-4.4.157

wget的 https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.4.157.tar.xz  到 /qemu 目录

4.2 解压Linux内核

# tar xvJf linux-4.4.157.tar.xz

4.3 编译Linux内核

// 进入内核源文件目录

# cd linux-4.4.157

使 CROSS_COMPILE=arm-linux-gnueabi-ARCH=arm vexpress_defconfig

make CROSS_COMPILE=arm-linux-gnueabi-ARCH=arm menuconfig

如果运行 menuconfig 显示缺少 ncurses 包,只需运行以下命令安装即可)

$ sudo apt-get 安装 libncurses5-dev

进入菜单配置,进行如下设置

使用交叉工具链编译

编译成功后,在目录下生成内核镜像文件

arch/arm/boot, zImage 和 dtb 可以复制到单独的文件夹中,方便使用

 

5. 安装 QEMU 工具

5.1 安装 QEMU

* wget https://download.qemu.org/qemu-4.2.0.tar.xz

* tar xvJf qemu-4.2.0.tar.xz

* cd qemu-4.2.0

5.2 配置QEMU前安装依赖包

# apt 安装 zlib1g-dev
# apt 安装 libglib2.0-0 libglib2.0-dev
# apt 安装 libsdl1.2-dev
# apt 安装 libpixman-1-dev libfdt-dev

为了防止编译后文件杂乱,创建builder目录作为编译的中间目标路径。

配置、编译和安装 QEMU。

5.3 配置QEMU支持arm架构下的所有板卡

# ../configure --target-list=arm-softmmu --audio-drv-list=

如果出现以下提示时缺少pixman,

使用 sudo apt-get install libpixman-1-dev 安装它。

5.4 查看QEMU版本

5.5 查看QEMU支持的开发板

5.6 运行 QEMU

# qemu-system-arm -M vexpress-a9 -m 512M -kernel ./zImage -dtb ./vexpress-v2p-ca9.dtb -ngraphic -append “console=ttyAMA0”

要么:

$密码

/家/乔/qemu

# qemu-system-arm -M vexpress-a9 -m 512M -kernel linux-.4.157/arch/arm/boot/zImage -dtb linux-4.4.157/arch/arm/boot/dts/vexpress-v2p-ca9. dtb -nographic -append “console=ttyAMA0”

为了更好的测试和启动qemu,可以创建启动脚本start.sh,并赋予脚本运行权限chmod +x start.sh

 

#!/斌/庆典

 

qemu 系统臂 \

-M vexpress-a9 \

-m 512M \

-内核/home/joe/jemu/linux-4.4.157/arch/arm/boot/zImage \

-dtb /home/joe/jemu/linux-4.4.157/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \

-地理\

-附加“控制台= ttyAMA0”

 

6.制作根文件系统

使用busybox制作一个简单的根文件系统。

6.1 下载busybox工具

从 https://busybox.net/downloads/ 下载busybox

# wget https://busybox.net/downloads/busybox-1.31.1.tar.bz2

# tar xjvf busybox-1.31.1.tar.bz2

# cd busybox-1.31.1

# 进行定义

# 使 CROSS_COMPILE=arm-linux-gnueabi-

# 安装 CROSS_COMPILE=arm-linux-gnueabi-

提示如下信息,说明安装成功。

安装完成后,生成的目标文件默认在./_install目录下。

 

6.2 生成根文件系统

6.2.1 编译安装busybox

# mkdir 根文件系统

# sudo cp -r _install/* rootfs/

6.2.2 添加glibc库,在根文件系统中添加loader和动态库

# sudo cp -r _install/* rootfs/

# sudo cp -p /usr/arm-linux-gnueabi/lib/* rootfs/lib/

6.2.3 创建4个tty终端设备(c代表字符设备,4是主设备号,1~4分别是次设备号)

 

6.3 制作SD卡文件系统镜像

6.3.1 生成空的SD卡镜像

# dd if=/dev/zero of=rootfs.ext3 bs=1M count=32

6.3.2 将 SD 卡格式化为 exts 文件系统

# mkfs.ext3 根文件系统.ext3

6.3.3 烧录rootfs到SD卡

# sudo mount -t ext3 rootfs.ext3 /mnt -o 循环

# sudo cp -rf rootfs/* /mnt/

# sudo 卸载 /mnt

 

7. 验证

7.1 启动 Qemu

运行以下命令进行测试,检查编译后的内核是否可以成功运行

# sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel ~/qemu/zImage –dtb ~/qemu/vexpress-v2p-ca9.dtb -ngraphic -append “console=ttyAMA0”

或者使用脚本:

 

在上面的测试中,内核会报panic,提示我们缺少根文件系统。

以上问题是由于x86环境下busybox工具生成的。

我们在安装busybox时使用了make install,所以你应该使用

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-安装

 

编译工具生成arm平台使用的busybox工具

# 文件 rootfs/bin/busybox

rootfs/bin/busybox:ELF 32 位 LSB 可执行文件,ARM,EABI5 版本 1 (SYSV),动态链接,解释器 /lib/ld-,适用于 GNU/Linux 3.2.0,BuildID[sha1]=cbcd33b8d6c946cb19408a5e8e714f554

 

7.2 再次验证

现在Qemu已经启动Linux内核并成功挂载文件系统,可以通过串口终端与系统进行简单的功能交互。 打印过程中无法运行/etc/init.d/rcS的问题,只需要添加/etc/init.d/rcS文件即可。 文件的内容可以是提示语句。

 

7.3 退出 QEMU

退出qemu的两种方式

* 在另一个终端输入中:kill all qemu-system-arm

* 在Qemu中输入:Ctrl+A; X

QEMU:终止

 

8.通过u-boot启动Linux内核

嵌入式系统通常包括:u-boot、kernel、rootfs、appfs。 这些部件在ARM开发板上的位置关系如下图所示

 

引导加载程序 引导参数 核心 根文件 应用程序

 

Rootfs 可以在板载或 PC 上运行

 

8.1 准备U-boot

8.1.1 下载u-boot

http://ftp.denx.de/pub/u-boot/,我们使用:u-boot-2021.01.tar.bz2

# tar -jxvf u-boot-2018.09.tar.bz2

8.1.2 编译u-boot

# vim 生成文件

CROSS_COMPILE = arm-linux-gnueabi-

# vim 配置.mk

ARCH = 手臂

# 制作 vexpress_ca9x4_defconfig,错误

需要:sudo apt install bison

sudo apt 安装 flex

然后:#make -j4 错误

需要:导出 CROSS_COMPILE=arm-linux-gnueabi-

出口 ARCH=臂

再次:# make vexpress_ca9x4_defconfig

#make -j4

 

 8.1.3 测试,启动u-boot

$ sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel u-boot-2021.01/u-boot –ngraphic

 

8.2 内核配置编译

使用 u-boot 启动内核镜像:

需要将内核编译成uImage格式,

需要指定uImage在内存中的加载地址

编译内核时指定:make LOADADDR=? uImage -j4

 

# cd /home/joe/qemu/linux-4.4.157

# 使 LOADADDR=0x60003000 uImage -j4

 

u-boot编译完成后,在tool文件夹下会生成一个mkimage文件,把这个文件拷贝到交叉编译目录下的bin文件夹下。

$ cd qemu/linux-4.4.157

错误:

$ sudo apt 安装 u-boot-tools

获取 uImage

9.QEMU网络功能设置

当Qemu虚拟机在u-boot上启动时,需要将uImage加载到内存中,通过TFTP服务器可以将uImage下载到内存中的指定地址。

9.1 检查主机内核是否支持tun/tap模块

// 安装桥接网络依赖的两个工具

# sudo apt 安装 uml-utilities bridge-utils

创建tun设备文件:/dev/net/tun(一般是自动创建的)

修改/etc/network/interfaces(配置网络,重启生效)

# sudo vim /etc/网络/接口

auto loiface lo inet loopbackauto enp0s3 // 虚拟网卡名称auto br0iface br0 inet dhcpbridge_ports enp0s3

 

永不重启

# 重启

然后查看Qemu的网络环境

虚拟网口br0是Qemu虚拟机与Linux主机通信的网口。

 

10.安装TFTP服务器

Qemu仿真开发板启动uImage时创建TFTP服务器将uImage下载到内存

 

10.1 安装tftp工具

 

$ apt-get 安装 tftp-hpa tftpd-hpa xinetd

 

10.2 修改配置文件,设置TFTP服务器目录

# sudo vim /etc/default/tftpd-hpa

......

TFTP_DIRECTORY="/home/joe/tftpboot"

......

10.3 在Linux主机上创建tftp目录

# mkdir /home/joe/tftpboot

# chmod 777 /home/joe/tftpboot

 

10.4 重启tftp服务

# sudo /etc/init.d/tftpd-hpa 重启

 

10.5 在u-boot中设置内核启动参数

将 uImage 和 cexpress-v2p-ca9.dtb 复制到 tftpboot

启动Qemu进行验证

 

$ sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel u-boot-2021.01/u-boot –nographic -net nic,vlan=0 -net tap,vlan=0,ifname=tap0 -sd rootfs.分机3

 

现在rootfs目录就是一个简单的根文件系统,可以做成镜像文件,可以把镜像文件烧录到开发板上,也可以用Qemu中的u-boot启动Linux内核挂载到开发板上镜像文件。 它也可以设置为通过 NFS 网络文件系统启动。

 

11.挂载NFS文件系统

11.1 安装配置NFS服务

11.1.1安装

$ sudo apt 安装 nfs-kernel-server

 

11.1.2 配置

$ sudo mkdir /home/joe/qemu/rootfs

$ sudo chown nobody:nogroup /home/joe/qemu/rootfs

$ sudo chmod 777 /home/joe/qemu/rootfs

$ sudo nano /etc/exports

添加:/home/joe/qemu/rootfs *(rw,sync,no_root_squash)

 

重启 nfs 服务器:

$ sudo /etc/init.d/nfs-kernel-server restart

或者: $systemctl restart nfs-kernel-server

 

检查是否创建了NFS共享目录

$ sudo showmount –e

Linux主机在使用NFS网络文件系统时需要关闭系统防火墙,否则系统运行时会出现异常。

 

结论

希望在这篇博客的帮助下,您对 QEMU 有了更多的了解。 上面展示的所有技术都用于我们程序的各种提交。 没有一种单一的、固定的方式来模拟 QEMU。 探索不同的技术,看看什么适合你。 熟悉这些知识,您会惊讶于它如何以意想不到的方式帮助您。

荔枝皮介绍

荔枝皮介绍

LicheePi是一款精致的单板电脑,运行在近年来流行的低成本全志V3S平台上。 可用于初学者学习 Linux 或产品开发。 它提供了丰富的外设(LCD、ETH、UART、SPI、I2C、PWM、SDIO……)和强大的性能。

 

       

        荔枝零荔枝纳米

 

 

 

       

                                 荔枝派零荔枝派纳米 

 

 

特征

LICHEE PI 零

荔枝皮纳米

系统芯片 全志V3S 全志F1C100S
中央处理器 ARM的Cortex-A7 ARM9
工作频率 1.2GHz 408MHz
内存 64MB DDR2 32MB DDR2
存储 SPI 闪存/微型 SD SPI 闪存/微型 SD

屏 显:

 

* 通用 40P RGB LCD FPC:

* 支持的分辨率:272×480、480×800,1024、600×XNUMX

* 板载RTP芯片,支持触摸屏

* 通用 40P RGB LCD FPC:

* 支持的分辨率:272×480、480×800,1024、600×XNUMX

* 板载RTP芯片,支持触摸屏

接口

 

* 标清输入接口 x2
* 接口 x1
* I2C x2
* UARTx3
* 100M Ether x1(包括EPHY)
* OTG USB x1
* MIPI CSI x1
* 脉宽调制 x2
* LRADC x1
* 扬声器 x2 + 麦克风 x1
* 标清输入接口 x1
* 接口 x2
* 捻线 x3
* 串口 x3
* OTG USB x1
* 电视输出* PWM x2
* LRADC x1
* 扬声器 x2 + 麦克风 x1

电气信息

 

Micro USB 5V, 2.54mm pin 3.3V~5V供电; 1.27mm邮票孔电源。

1GHz linux IDLE 运行 90~100mA; cpu-burn 运行 ~180mA

储存温度 -40~125

工作温度 -20~70

Micro USB 5V, 2.54mm pin 3.3V~5V供电; 1.27mm邮票孔电源。

408MHz linux IDLE 运行 90~54mA; 屏幕工作电流 ~250mA

储存温度 -40~125

工作温度 -20~70

 

运行Linux压力测试时的温度仅略高于体温。

 

Lichee Pi 支持多种操作系统,例如:Linux、RT-Tread、Xboot 或无操作系统。

与大多数 MCU 一样,荔枝派可以连接多个低速接口,例如 GPIO、UART、PWM、ADC、I2C、SPI 等。 此外,它还可以运行其他高速外设,例如 RGB LCD、EPHY、MIPI CSI、OTG USB 等。 Lichee Pi 有一个集成的编解码器,可以直接连接到耳机或麦克风。

 

显示连接器:

万能40P液晶屏自带led背光四线,电阻触控,非常适合显示和交互。 A13还支持四线电阻触控功能,可以进行两点触控检测。

 

该接口与以下接口兼容 东方显示 产品。

 

RGB转VGA:

 

RGB转HDMI:

 

RGB 转 GPIO:

 

RGB 到 DVP CSI:

 

荔枝皮链接:

http://dl.sipeed.com/
维基:maixpy.sipeed.com
博客:blog.sipeed.com
电报群:https://t.me/sipeed

东方显示嵌入式项目介绍

东方显示嵌入式项目介绍

Orient Display是世界领先的显示器之一 液晶显示器制造商 由拥有超过1996年研发和生产经验的高管于25年创立。 除了显示,东方显示还专注于包括ARM架构在内的嵌入式技术,积累了丰富的嵌入式产品经验。

现在东方显示技术服务包括硬件、软件和咨询。

 

我们的全球洞察力  硬件团队 根据您的设计思路和要求,在最短的时间内制作原型。 我们专注于设计高性价比或复杂的高性能板卡,在较短的开发周期内满足您对高可靠性的要求。

- 原理图设计

– PCB 布局

– 行业产品定制

 

我们的全球洞察力  软件团队 专注于基于 Linux 的 ARM® 设计PowerPC 和 x86 处理器,仅举几例. 作为嵌入式系统中Linux、Android和WinCE的完整解决方案提供商,我们可以解决您产品端到端的系统相关问题。

– 系统迁移、优化和裁剪

– 推动发展

– 内核裁剪

– 将 LINUX 内核移植到 ARM、PPC 或 x86 板

– APP开发(应用、Linux QT、Linux C/++)

 

我们的全球洞察力 FAE 团队 还为您的产品或半成品提供全方位的技术。

– 我们提供产品软硬件资源的咨询;

– 我们解决在使用我们产品的软硬件手册过程中遇到的问题;

– OEM和ODM售后技术支持;

– 数据维护和更新;

– Orient Display 产品由我们提供支持 最低价格保证.

 

开发顺序

 

1. 系统需求分析

* 设计任务、目标、规格

– 这是由我们的客户提供的

* 功能性和非功能性需求

– 包括系统性能、成本、功耗、体积、重量等因素

 

2. 架构设计

一个好的架构是设计成功的关键。 在这一步中,往往需要做以下几件事:

  • 选择主芯片:

— ARM Cortex A、R 或 M,或 PowerPc 或 ColdFire

  • 确定实时操作系统:

— Linux、uClinux、Vxworks、freeRTOS、WinCE

  • 选择显示:

- TFT面板, 阳光下可读的TFT, 液晶玻璃面板, 图形液晶,  OLED显示屏, 触控面板, 嵌入式液晶显示器 or 定制展示 by 东方显示

  • 编程语言:

— c/c++、python、Java

  • 开发工具:

u-boot、busybox、QT、Ubuntu、stm32CubeIde、visual studio、android studio、keil uVision、RT-Tread studio

 

3. 软硬件协同设计

为了缩短产品开发周期:

硬件:  我们通常从评估板开始项目,例如 orient display AIY-A002M, AIY-A003MAIY-A005M. 稍后将定制板以适合项目,丢弃不需要的部分。

软件开发顺序:

  • 我们通常选择 u-boot 作为 Bootloader,它 1) 将 cpu 初始化为已知状态 2) 初始化内存 3) 初始化中断 4) 初始化时钟 5) 加载内核到运行地址
  • 配置内核:

1) 配置内核系统:*内存管理、*文件系统、*设备驱动程序、*网络堆栈、*I/O系统

2)编写I/O设备驱动*char设备驱动,*块设备驱动,*net设备驱动

  • 选择应用:

*选择用户库 *构建用户应用程序 *配置初始化过程 *构建根FS

 

4。 小号系统集成

将系统的软件、硬件和执行设备集成在一起,调试、发现和改进单元设计过程中的错误。

 

5. 系统测试

测试设计的系统,看它是否满足规范中给出的功能要求。 嵌入式系统开发模式的最大特点是软硬件综合开发。

 

在结论

Orient Display 拥有一支由才华横溢的专家组成的了不起的团队,他们拥有从概念到生产创建嵌入式显示模块的经验和能力。

如果您有任何问题,请联系我们的工程师: tech@orientdisplay.com。

如何选择ARM处理器

如何选择ARM处理器

介绍

范围最广 微处理器 几乎所有应用市场的核心。 探索 ARM. 对于几乎所有应用市场的性能、功率和成本要求,处理器都至关重要。 系统性能在很大程度上取决于其硬件; 本文将引导您完成对 ARM 处理器的研究,并对您的决策有很大帮助。

 

ARM 简介

图 1. ARM 处理器路线图

 

2003年之前,经典的ARM处理器有ARM7(ARMv4 Architecture)、ARM9(ARMv5 Architecture)、ARM11(ARMv6 Architecture)。 ARM7没有MMU(内存管理单元),不能运行Linux、WinCE等多用户多进程系统。 只能运行不需要MMU的系统如ucOS和ucLinux。 ARM9和ARM11是带有MMU的嵌入式CPU,可以运行Linux。

2003年以后,说到ARMv7架构,以Cortex命名,分为三个系列: Cortex-A、Cortex-R 和 Cortex-M。

  • 皮质A — 用于性能密集型系统的应用处理器内核
  • 皮质 – 用于实时应用的高性能内核
  • 皮质M – 适用于各种嵌入式应用的微控制器内核

简单地说, 皮质A 系列适​​用于对计算要求高、运行丰富的操作系统、提供交互式媒体和图形体验的应用程序。 皮质 适用于需要可靠性、高可用性、容错性、可维护性和实时响应的应用。 皮质M 系列针对成本和功耗敏感的 MCU 和终端应用。

 

Cortex-A VS Cortex-R VS Cortex-M

皮质A

Cortex-A 类处理器专用于 Linux 和 Android 设备。 Cortex-A 处理器可以支持任何设备——从智能手表和平板电脑到网络设备。

  • Cortex-A 处理器(A5、A7、A8、A9、A12、A15 和 A17)基于 ARMv7-A 架构
  • A 处理器的一组通用功能包括媒体处理引擎 (NEON)、用于安全目的的工具 (Trustzone) 以及各种支持的指令集(ARM、Thumb、DSP 等)。
  • Cortex-A 处理器的主要特点是顶级性能和出色的电源效率紧密捆绑在一起,为用户提供尽可能最好的服务

Cortex-A处理器的主要特点:

Cortex-A5的:Cortex A5 是 Cortex A 系列中体积最小、功耗最低的成员,但仍能展现多核性能,兼容 A9 和 A15 处理器。

Cortex-A7的:A7的功耗和A5差不多,但A7提供的性能比A20高5%,并且与Cortex-A15和Cortex-A17的架构完全兼容。 Cortex-A7 是成本敏感型智能手机和平板电脑实施的理想选择。

Contrex-A15: Cortex-A15 是该系列中性能最高的成员,性能是 A9 的两倍。 A15 可应用于高端设备、低功耗服务器和无线基础设施。 这是第一个支持数据管理和虚拟环境解决方案的处理器。

Contrex-A17: Cortex-A17 的性能比 A60 高 9%。 主要目标是满足高端设备的需求。

Contrex-A50:Contrex-A50 是最新系列,基于 ARMv8 架构构建,并支持 Arch64 位节能系统。 转向 64 位的一个明显原因是支持超过 4GB 的物理内存,这在 Cortex-A15 和 Cortex-A7 上已经实现。

 

皮质

Cortex-R 处理器面向高性能实时应用,如硬盘控制器、网络设备媒体播放器和其他类似设备,此外,它还对汽车行业如安全气囊、制动系统和发动机管理等提供了极大的支持。

皮质-R4:  Cortex-R4 非常适合汽车应用。 它的时钟频率最高可达 600 MHz,具有带双发出、预取和低延迟中断系统的 8 级流水线,使其成为安全关键系统的理想选择。

皮质-R5: Cortex-R5 扩展了 R4 提供的功能,增加了效率、可靠性和错误管理。 双核实现可以构建非常强大、灵活的实时响应系统。

皮质-R7: Cortex-R7 显着扩展了性能。 它们具有 11 级流水线,支持无序执行和高级分支预测。 可以为锁步、对称和非对称多处理实现工具。 通用中断控制器是另一个值得一提的重要特性。

 

皮质M

Cortex-M 专门针对 MCU 市场而设计。 Cortex-M 系列建立在 ARMv7-M 架构上(用于 Cortex-M3 和 Cortex-M4),较小的 Cortex-M0+ 建立在 ARMv6-M 架构上。 可以肯定地说,Cortex-M 已成为 32 位世界的 8051 之于 8 位——许多供应商提供的行业标准内核。 例如,Cortex-M 系列可以作为 FPGA 中的软核实现,但更常见的是将它们实现为具有集成存储器、时钟和外设的 MCU。 有些针对能源效率进行了优化,有些针对高性能,有些针对特定细分市场(例如智能计量)量身定制

对于对成本特别敏感或从 8 位迁移到 32 位的应用程序,Cortex-M 系列中最小的成员可能是最佳选择。

皮质-M0: Cortex-M0+ 使用 Thumb-2 指令集并具有 2 级流水线。 重要的特性是单周期 GPIO 总线和微跟踪缓冲器。

皮质-M3&M4:  Cortex-M3 和 Cortex-M4 是非常相似的内核。 每个都提供一个 3 级流水线、多个 32 位总线、高达 200 MHz 的时钟速度和非常有效的调试选项。 显着的区别在于 Cortex-M4 内核的 D​​SP 功能。 Cortex-M3 和 Cortex-M4 共享相同的架构和指令集 (Thumb-2)。 如果您的应用程序需要浮点数学运算,那么在 Cortex-M4 上完成此操作的速度将比在 Cortex-M3 上快得多。 也就是说,对于不使用 Cortex-M4 的 DSP 或 FPU 功能的应用程序,您将在 Cortex-M3 上看到相同级别的性能和功耗。 换句话说,如果您需要 DSP 功能,请使用 Cortex-M4。 否则,Cortex-M3 将完成这项工作。

 

结论

图 2. 皮质概览

 

ARM 处理器为不同的目的提供了多种功能。 通过一点思考和调查,您将能够找到适合您的应用程序需求的正确处理器。 无论是用于高端平板电脑还是超低成本无线传感器节点。

正确选择 Cortex 内核并将想法变为现实是一项挑战。 但是经验丰富的专业团队可以处理所有问题并实施任何复杂的概念。

东方显示多年来专注于ARM处理器相关技术,积累了丰富的ARM架构产品开发和实现经验。 在不断推出满足市场普遍需求的开发平台和核心板的同时,也针对客户的个性化项目需求。 提供定制化服务。

我们的硬件团队可以根据您的设计思路和需求,在最短的时间内制作出原型。 我们的软件团队可以帮助您自定义切割驱动层的所有功能。

联系我们 我们将帮助您制定从最初的想法到最终产品的计划。

如何在树莓派上使用图形 LCD 显示器?

如何将图形 LCD 连接到 Raspberry PI?

文章显示 如何连接 128×64 图形液晶显示Raspberry Pi的.

使用的 LCD 是 128×64,带有 ST7565 的 LCD 控制器。 它可以直接从 Raspberry Pi 3.3V 轨供电. 它需要 5 个 GPIO 引脚用于数据。

原理图是,CS(芯片选择)、RST(复位)和 A0(寄存器选择)可以连接到任意 3 个 GPIO 引脚。 在本例中,8,24 和 25 是默认值。 实例化 ST7565 Python 类时,可以指定不同的值作为参数。 GLCD 上的 SCLK(串行时钟)进入 GPIO 11,这是 Pi 的串行时钟。 GLCD 上的 SID(串行输入数据)转到 Pi 上的 GPIO 10,即 MOSI。 GPIO 10 和 11 必须用于 SID 和 SCLK。 Vdd 连接到 PI 上的 3.3V 引脚,并且接地。

LCD具有RGB背光. LED 引脚可以转到 GPIO 的 16,20 和 21。要控制来自 Pi 的颜色,请在实例化 ST7565 类时指定 RGB 引脚。 电阻器必须串联放置以限制电流以防止 LED 击穿。 LED 亮度可以通过使用不同值的电阻来改变。 最好将电流调整在20mA左右,当然,不同的值会导致不同的颜色混合。 混合纯白色是非常困难的。 请仔细计算电阻值,在40mA时,LED亮度会随时间急剧下降,接近60mA时,LED可能会被击穿并永久损坏。

如何对图形 LCD 进行编程?

显示器为水平 128 像素,垂直 64 像素。 LCD可以分成8个水平页面. 它们的编号从 3 到 0,从 7 到 4,从上到下。 每页包括 128 列和 8 行像素。 要对像素进行寻​​址,请指定页码和列号,然后发送一个字节以一次填充 8 个垂直像素。

显示器有SPI (串行外设接口) 连接到 Pi. SPI 需要 3 线 MOSI、MISO 和时钟。 Pi 是主机,GLCD 是从机。 在这个例子中,只写入 GLCD 而没有准备好,所以需要连接到 MOSI 和时钟线。 MOSI 是从 Pi 到 GLCD 的输出,时钟同步时序。

  1. 在树莓派上启用 SPI 第一
  2. 从 raspi-config 菜单中,选择高级选项,然后选择 SPI。 然后为“Would like the SPI interface to be enabled”选择Yes。 点击确定,重启。 为“默认加载的SPI内核模块”选择是。 启用 SPI 后重新启动 Pi。 然后使用 Ismod 测试 SPI它应该根据 Pi 版本返回 SPI_bcm2708 或 spi_bcm2835。 python SPI 库需要 python2.7 dev,可以通过 apt-get install 安装:
  3. Python SPI 库 叫做 pyspidev。 可以使用 git:GLCD 安装 Pi 的 Python 库可以从 GitHub 站点下载.
  4. 主要的 ST7565 库 (st7565.py) 处理绘图、文本和位图,以及加载 X-GLCD 字体的字体模块 (xglcd_font.py)。 以下是创建点、线、矩形、圆、椭圆和正多边形的基本绘图命令:有关详细信息,请参阅下面的参考或 联系我们的工程师.

使用 STM32CubeIDE 开始基于 STM071G32RB Board 的项目

使用 STM32CubeIDE 开始基于 STM071G32RB Board 的项目

看看我们的 控制板!

开始使用基于 32 位 ARM 的微控制器总是有点令人生畏。 可用的微控制器、平台、开发板、工具和软件太多了。 本笔记逐步介绍如何开始 LED 项目。

入门:关于开发板STM32G071RB

特色:

  • 核心:Arm® 32 位 Cortex®-M0+ CPU,频率高达 64 MHz
  • 高达 128 KB 的闪存,36 KB 的 SRAM
  • 具有灵活映射的 7 通道 DMA 控制器
  • 12 位、0.4 µs ADC(最多 16 个外部通道)
  • 两个 12 位 DAC,低功耗采样保持
  • 两个 I2C,四个 USART,一个低功耗 UART,两个 SPI

 

入门:安装STM32CubeIDE

您可以下载 STM32CubeIDE 来自他们的 st.com。 免费。 安装STM32CubeIDE如下 STM32CubeIDE 安装指南。

 

您的第一个项目:LED 闪烁

在开始编写代码之前,我们需要创建一个项目。 这与大多数其他 IDE 类似 - 项目用于将您的所有设置、代码和定义捆绑到一个集合中,所有这些都由同一应用程序管理。

 

 

STEP 1: 开始一个新项目,从左上角的图标(或者在菜单 File > New > STM32 Project 下)开始。

 

第二步:项目名称:G2_LED,然后点击Finish按钮。

从原理图可以看出LED4由STM32G071控制,端口为PA5。

步骤 3:从 System Core > SYS,选择 Serial Wire,将 PA5 设置为 GPIO_OUTPUT。

将 PA5 的使用标签设置为 LED_GREEN,如下所示:

 

第 4 步:然后生成代码。

 

开发此功能的 CubeIDE 在 Src 目录下生成要使用的 C 文件,并将 HAL(硬件抽象层)放入 Includes 目录中。 CubeIDE 的工作方式似乎完全相同。 展开项目视图下右侧的文件夹,看看它为您生成了什么。

 

 

第 5 步:现在让我们添加一点我们自己的 C 代码吧! 在无限循环区域之后,我们将添加代码来切换第 3 部分下的 LED,如下所示:

 

 

编译项目并下载到开发板

实际上,STM32CubeIDE 可以很容易地编译我们的工作并将其放到 STM32 芯片上。 第一步是生成编译后的 .elf(我们代码的二进制版本)。 要生成 .elf,我们需要进行构建。 这就像按下工具栏上的构建按钮一样简单。

现在,构建信息显示在屏幕底部的控制台中。

现在我们要做的是将这个编译好的二进制文件发送到 STM32 微控制器上。

让我们插入开发工具包:

红色电源 LED(蓝色开关左侧)亮起,较大的通信 LED(通过 USB 电缆)也亮起。 在 STM32CubeIDE 中,选择运行按钮。

这将打开运行对话框(因为这是我们第一次运行它)。 我们现在选择的设置将保存为运行配置,我们可以在以后重新使用或编辑。

只需按应用然后确定,下载就会继续。 控制台现在将填充一些有趣的文本:

LED 每 500 毫秒打开和关闭一次。 你已经准备好了一切。

STM32 与 Arduino

STM32 与 Arduino

看看我们的 控制板!

 

Arduino的

Arduino比较有创意,它弱化了特定硬件的操作,它的功能和语法都很简单,而且很“笨”。

Arduino 的主要控制大部分是 AVR 微控制器。 Arduino的优点是代码封装性高,语句少,降低了软件开发的难度。

Arduino上手比较容易,只要懂一点硬件和C++,就可以开发。

Arduino的大部分功能都有完善的库,所以使用起来非常简单,但稍微复杂的功能的可控性较差。 

 

STM32

STM32更注重工程实践。 其实工厂里有很多简单的仪器,比如温控器、普通电机控制器、低端PLC,还有一些民用玩具、游戏控制器、有线键盘鼠标等外设等等都很实用。

STM32主要用作专业开发者的产品,需要一定的专业知识,但同时编写代码实现功能也相对复杂。 比如串口输出一个简单的字符串。 对于Arduino来说,可以从一个新项目开始,10行代码就可以实现。 但是,如果使用 Keil 等 STM32 开发工具,则可能需要数百行或更多代码。

开源方面:STM32做的东西,想开源就可以开源,不想开源就不能发表。

 

结论

 

以下是一些选择建议:

如果你是一个大学以下的普通学生,对编程语言的理解不是很深,建议先上手Arduino。 如果C技能薄弱,想出STM32,你很快就会有放弃的念头。

如果只是为了就业而学习,果断STM32单片机。

如果您只是为了好玩而学习并且您不是电子专业的专业并且没有信心,那么建议您使用Arduino。

如果你有很好的编程能力,建议使用STM32。 做完之后可以看看Arduino开源社区做的东西,用STM32就可以轻松搞定。

当然,如果你有能力,你可以联系两者。 一般不到一周就可以掌握Arduino的基本功能。 如果以后需要,可以将Arduino代码自由移植到STM32等MCU平台。

事实上,两者实际上针对的方向略有不同。 Arduino 是一般电子爱好者和 DIY 的选择,而 STM32 经常用于实际产品的开发和制造。