STM32与Linux轻松搭配,设备载入无压力 (stm32设备载入linux)

作为一个追求高效的工程师,我们在设计嵌入式系统时常常需要采用一些先进的芯片和开发工具。而在这些芯片和工具中,STM32是一个备受推崇的选择。它是STMicroelectronics公司推出的,具有高性能、低功耗、多功能的单片机。然而,在设备的开发过程中,如何将STM32和Linux操作系统兼容工作是一个重点考虑的问题。本文将向大家介绍一些关于STM32和Linux的搭配使用技巧,实现设备载入时零压力。

一、USB驱动的安装

在嵌入式开发中,很多设备都采取了USB接口,作为设备的主要输入输出。然而,当我们连接STM32设备时,驱动的安装往往是一个让人困扰的问题。在Linux系统下,我们可以通过如下几个步骤来完成STM32的驱动安装:

1.将STM32的设备连接到电脑上。使用命令lsu来查看设备的厂商ID和设备ID,例如:

$ lsu

Bus 002 Device 002: ID 2232:1024 Silicon Labs CP210x UART Bridge

这里的ID 2232:1024是指设备的厂商ID和设备ID,即VID和PID。

2.在此基础上,下载相应的驱动程序。以Silicon Labs CP210x USB to UART Bridge为例,可以通过如下命令下载驱动:

$ sudo apt-get install linux-modules-extra-$(uname -r)

然后,重新插拔设备,即可完成驱动的安装。

二、通过OpenOCD实现STM32的编程

在完成USB驱动程序的安装之后,我们还需要一些工具将程序下载到STM32芯片中。OpenOCD是一个开源的On-Chip Debugging、烧录程序、调试工具。它基于GDB和JTAG接口,可以支持多种芯片的编程和调试。在使用OpenOCD时,我们需要借助某个硬件设备,例如JTAG调试器,通过调试接口与芯片进行连接。一般而言,硬件设备的连接和配置都是由硬件工程师完成,因此我们在此不再赘述。接下来,我们重点讲解如何在Linux系统中通过OpenOCD实现STM32芯片的编程。

1.我们需要安装OpenOCD工具。在Ubuntu系统中,可以通过如下命令来进行安装:

$ sudo apt-get install openocd

2.在安装完成之后,我们需要通过配置文件来设置OpenOCD的工作模式。例如,我们可以编写一个名为cfg的配置文件,其中包含如下内容:

interface u

#jtag_speed 1MHz

jtag_nsrst_delay 400

jtag_ntrst_delay 400

transport select swd

set WORKAREASIZE 0x8000

#stm32L432

set CHIPNAME stm32f407VG

swd_device_desc “STM32F40x Flash/EEPROM programmer”

source [find interface/ftdi/olimex-arm-u-tiny.cfg]

source [find target/stm32f4x.cfg]

在此,我们使用USB作为接口,同时设置jtag_nsrst_delay和jtag_ntrst_delay为400微秒,以保证软复位的稳定性。transport select swd用于设置JTAG工作模式。set WORKAREASIZE用于设置堆栈空间的大小。set CHIPNAME用于设置芯片型号。我们调用interface/ftdi/olimex-arm-u-tiny.cfg和target/stm32f4x.cfg两个配置文件,来启动OpenOCD。

3.确认OpenOCD工具正确运行之后,我们就可以通过OpenOCD实现STM32芯片的编程了。例如,我们可以通过如下命令将程序下载到芯片中:

$ openocd -f cfg -c init -c “reset init” -c “flash write_image erase output.bin 0x08000000” -c “reset run” -c shutdown

在这个命令中,-f cfg指定配置文件为cfg,-c init表示执行初始化,-c “reset init”表示将芯片进行软复位。-c “flash write_image erase output.bin 0x08000000″表示将编写好的程序输出到芯片的地址0x08000000处,并进行擦除。-c “reset run”表示将芯片运行。我们以shutdown为结尾,表示OpenOCD的任务已完成,并关闭OpenOCD。

在本文中,我们主要探讨了如何将STM32和Linux操作系统兼容工作,在设备载入时零压力。我们学习了如何通过USB驱动的安装,使STM32设备与Linux系统兼容工作。同时,我们也介绍了OpenOCD作为一种烧录程序和调试工具的使用方法。通过这些技术手段,我们可以在嵌入式开发中,实现STM32的轻松搭配、设备载入无压力的目标。

相关问题拓展阅读:

STM32MP1运行linux和其他SoC芯片相比优势在哪里?

有下面几个优势。

1.MP1中的M4可以挂载很多实时应用需要的外设,比如CAN, ADC,PWM。用A7来做的实时性无法保证。

2.MP1是面向中低端工业领域的MPU,工业领域的很多应用对主频的要求并散锋竖没有冲大很高,但是看重芯片的小封装、性能稳定、低功耗散热、长供货周期。这些都是MP1的优势。

3.MP1的软件包中附带的OP-TEE (信息安全运行环境)是免费的哦,别的平台都是需要第三方付费支持。

4.MP1的生态延续了基斗MCU的容易上手,Cubemx工具对MP1的支持,让开发者上手很方便。

linux 搭建stm32的makefile 怎么写

一 STM 32 GCC 安装

stm32 属于arm cortex-m系列thumb指令集,所以给arm用的arm-none-eabi就可以了,首先是下载

下载地址:

下载其中的gcc-arm-none-eabi-version-linux.tar.bz2

解压到你知道的档晌目录会产生

gcc-arm-none-eabi的文件夹

把该编译器添加到你的衡坦环境中:

sudo gedit ~/.bashrc

在最后一行添加:

export PATH=$PATH:/your_stm_gcc_dir/gcc-arm-none-eabi-4_8-2023q4/bin

因为我之前有添加过树莓派的编译器了,所以实际上是这样的:

export PATH=$PATH:/your_pi_gcc_dir/tools-master/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/:/your_stm_gcc_dir/gcc-arm-none-eabi-4_8-2023q4/bin

两个编译器环境中间用冒号隔开;

注销后测试:

arm-none-eabi-gcc -v

可以查看到该编译器的版本,就表示可以了.

二 工程环境的建立

新建个工程文件夹,及其目录

mkdir stm_project

cd stm_project

mkdir libs

mkdir src

mkdir inc

下载,安装官方库:

stm32的寄存器不像51 avr等单片机,那么少,自己写写库,背背寄存器就可以了,所以ST公司提供了他们官方的库,为了避免重复造轮子,就直接采用他们的库,库版本为STM32_USB-FS-Device_Lib_V4.0.0,这个库多了u支持,下载的话到st官网搜索stm32f10x就有了.

下载链接:

stsw-stm32121.zip

解压,把解压好的文件夹复制到刚才新建的libs里面.

在工程根目录下新建Makefile.common文件,这个为通咐蠢桐用makefile

# include Makefile

#This file is included in the general Makefile, the libs Makefile and the src Makefile

#Different optimize settings for library and source files can be realized by using arguments

#Compiler optimize settings:

# -O0 no optimize, reduce compilation time and make debugging produce the expected results (default).

# -O1 optimize, reduce code size and execution time, without much increase of compilation time.

# -O2 optimize, reduce code execution time compared to ‘O1’, increase of compilation time.

# -O3 optimize, turns on all optimizations, further increase of compilation time.

# -Os optimize for size, enables all ‘-O2’ optimizations that do not typically increase code size and other code size optimizations.

#Recommended optimize settings for release version: -O3

#Recommended optimize settings for debug version: -O0

#Valid parameters :

# OptLIB=0 –> optimize library files using the -O0 setting

# OptLIB=1 –> optimize library files using the -O1 setting

# OptLIB=2 –> optimize library files using the -O2 setting

# OptLIB=3 –> optimize library files using the -O3 setting

# OptLIB=s –> optimize library files using the -Os setting

# OptSRC=0 –> optimize source files using the -O0 setting

# OptSRC=1 –> optimize source files using the -O1 setting

# OptSRC=2 –> optimize source files using the -O2 setting

# OptSRC=3 –> optimize source files using the -O3 setting

# OptSRC=s –> optimize source files using the -Os setting

# all –> build all

# libs –> build libs only

# src –> build src only

# clean –> clean project

# tshow –> show optimize settings

#Example:

# make OptLIB=3 OptSRC=0 all tshow

TOP=$(shell readlink -f “$(dir $(lastword $(MAKEFILE_LIST)))”)

PROGRAM=main

LIBDIR=$(TOP)/libs

#Adust the following line to the library in use

#=========add by embbnux 根据你的库不同,调整这个地方的库目录地址====================#

STMLIB=$(LIBDIR)/STM32_USB-FS-Device_Lib_V4.0.0/Libraries

#=========add by embbnux 根据你的stm32芯片型号容量不同,修改这个地方的TypeOfMCU=======#

#Adjust TypeOfMCU in use, see CMSIS file “stm32f10x.h”#STM32F103R (128KB FLASH, 20KB RAM) –> STM32F10X_MD#TypeOfMCU=STM32F10X_MD#STM32F103RET (512KB FLASH, 64KB RAM) –> STM32F10X_HD#STM32F103ZET (512KB FLASH, 64KB RAM) –> STM32F10X_HD

#============================================================================#

TypeOfMCU=STM32F10X_HD

#============================================================================#

TC=arm-none-eabi

CC=$(TC)-gcc

LD=$(TC)-ld -v

OBJCOPY=$(TC)-objcopy

AR=$(TC)-ar

GDB=$(TC)-gdb

INCLUDE=-I$(TOP)/inc

INCLUDE+=-I$(STMLIB)/CMSIS/Include

INCLUDE+=-I$(STMLIB)/CMSIS/Device/ST/STM32F10x/Include

INCLUDE+=-I$(STMLIB)/CMSIS/Device/ST/STM32F10x/Source/Templates

INCLUDE+=-I$(STMLIB)/STM32F10x_StdPeriph_Driver/inc

INCLUDE+=-I$(STMLIB)/STM32_USB-FS-Device_Driver/inc

COMMONFLAGS=-g -mcpu=cortex-m3 -mthumb

COMMONFLAGSlib=$(COMMONFLAGS)

#Commands for general Makefile and src Makefile

ifeq ($(OptSRC),0)

COMMONFLAGS+=-O0

InfoTextSrc=src (no optimize, -O0)

else ifeq ($(OptSRC),1)

COMMONFLAGS+=-O1

InfoTextSrc=src (optimize time+ size+, -O1)

else ifeq ($(OptSRC),2)

COMMONFLAGS+=-O2

InfoTextSrc=src (optimize time++ size+, -O2)

else ifeq ($(OptSRC),s)

COMMONFLAGS+=-Os

InfoTextSrc=src (optimize size++, -Os)

else

COMMONFLAGS+=-O3

InfoTextSrc=src (full optimize, -O3)

endif

CFLAGS+=$(COMMONFLAGS) -Wall -Werror $(INCLUDE)

CFLAGS+=-D $(TypeOfMCU)

CFLAGS+=-D VECT_TAB_FLASH

#Commands for libs Makefile

ifeq ($(OptLIB),0)

COMMONFLAGSlib+=-O0

InfoTextLib=libs (no optimize, -O0)

else ifeq ($(OptLIB),1)

COMMONFLAGSlib+=-O1

InfoTextLib=libs (optimize time+ size+, -O1)

else ifeq ($(OptLIB),2)

COMMONFLAGSlib+=-O2

InfoTextLib=libs (optimize time++ size+, -O2)

else ifeq ($(OptLIB),s)

COMMONFLAGSlib+=-Os

InfoTextLib=libs (optimize size++, -Os)

else

COMMONFLAGSlib+=-O3

InfoTextLib=libs (full optimize, -O3)

endif

CFLAGSlib+=$(COMMONFLAGSlib) -Wall -Werror $(INCLUDE)

CFLAGSlib+=-D $(TypeOfMCU)

CFLAGSlib+=-D VECT_TAB_FLASH

stm32设备载入linux的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于stm32设备载入linux,STM32与Linux轻松搭配,设备载入无压力,STM32MP1运行linux和其他SoC芯片相比优势在哪里?,linux 搭建stm32的makefile 怎么写的信息别忘了在本站进行查找喔。


数据运维技术 » STM32与Linux轻松搭配,设备载入无压力 (stm32设备载入linux)