目录
一、前言
二、arch Linux的安装,及其工具链、编译选项、Makefile的介绍
(一)archLinux的安装
1.常用工具的安装
(二)建立工程文件
(三)Makefile
(四)cortex-debug的配置:
后记
近半年来,随着windows10的更新,在windows上开发stm32越发感觉不舒服(指windows平台,当然keill也不舒服),每每感觉windows的弹窗、广告、浏览器等问题愈发严重、keill的授权也始终萦绕在心头,多次想切换到linux下试一试,但每次切换过去不到一周又切换到windows系统。在这中间也是试了不少linux发行版。在这样不断的切换中逐渐厌烦(鬼知道我在windows下安装了多少遍驱动,在Linux下重装了多少工具。。。。。泪目),最选择了arch linux(无他,只是听说很难,不好安装,就一头沉进去了)。为了能继续在野生钢铁侠的路上越走越远,又开始在Linux上搭建开发平台,搞调试、串口等工具也是一阵摸索,为了各位同仁再遇到一样的情况下快速的上手Linux下stm32开发,遂在此抛砖引玉。
archLinux的安装我强烈建议看这一篇文档:
Arch Linux 安装使用教程 - ArchTutorial - Arch Linux StudioArch Linux 安装使用教程,每月实时更新!包含从 archlinux 安装,魔法充能,到显卡驱动,日常软件的使用等,另附媒体制作,编程等你可能需要的全部内容。让 Arch Linux 成为你的常用系统吧!
这一篇包含了基本系统的安装,驱动的安装,桌面环境的安装,以及常用工具的安装,而且更新很及时。
stm32 GCC编译器:
sudo pacman -S arm-none-eabi-gcc arm-none-eabi-gdb arm-none-eabi-newlib #pacman 是aechLinux的包管理器 -S(大写)选项是 安装或者升级单个软件包,或者一列软件包(包含依赖包)
Vscode 及其插件的安装:
安装前请确保您的电脑上有yay包管理器
yay -S visual-studio-code-bin #微软官方版本,专有软件
具体vscode版本可以看arch Linux的wiki:
Visual Studio Code (简体中文) - ArchWiki
在vscode中安装扩展工具如下
C/C++
Cortex-Debug
GNU Linker Map files
建立工程(我的目录如下)
├── Build
│ ├── main.bin
│ ├── main.d
│ ├── main.elf
│ ├── main.hex
│ ├── main.o
│ ├── misc.d
│ ├── misc.o
│ ├── spi.d
│ ├── spi.o
│ ├── startup_stm32f407xx.o
│ ├── stm32f4xx_gpio.d
│ ├── stm32f4xx_gpio.o
│ ├── stm32f4xx_rcc.d
│ ├── stm32f4xx_rcc.o
│ ├── stm32f4xx_spi.d
│ ├── stm32f4xx_spi.o
│ ├── stm32f4xx_usart.d
│ ├── stm32f4xx_usart.o
│ ├── system_stm32f4xx.d
│ ├── system_stm32f4xx.o
│ ├── usart.d
│ └── usart.o
├── CMSIS
│ ├── Inc
│ │ ├── core_cm4.h
│ │ ├── core_cmFunc.h
│ │ ├── core_cmInstr.h
│ │ ├── core_cmSimd.h
│ │ ├── stm32f4xx.h
│ │ └── system_stm32f4xx.h
│ └── Src
│ └── system_stm32f4xx.c
├── Dev
│ ├── inc
│ │ ├── misc.h
│ │ ├── stm32f4xx_adc.h
│ │ ├── stm32f4xx_can.h
│ │ ├── stm32f4xx_cec.h
│ │ ├── stm32f4xx_crc.h
│ │ ├── stm32f4xx_cryp.h
│ │ ├── stm32f4xx_dac.h
│ │ ├── stm32f4xx_dbgmcu.h
│ │ ├── stm32f4xx_dcmi.h
│ │ ├── stm32f4xx_dfsdm.h
│ │ ├── stm32f4xx_dma2d.h
│ │ ├── stm32f4xx_dma.h
│ │ ├── stm32f4xx_dsi.h
│ │ ├── stm32f4xx_exti.h
│ │ ├── stm32f4xx_flash.h
│ │ ├── stm32f4xx_flash_ramfunc.h
│ │ ├── stm32f4xx_fmc.h
│ │ ├── stm32f4xx_fmpi2c.h
│ │ ├── stm32f4xx_fsmc.h
│ │ ├── stm32f4xx_gpio.h
│ │ ├── stm32f4xx_hash.h
│ │ ├── stm32f4xx_i2c.h
│ │ ├── stm32f4xx_iwdg.h
│ │ ├── stm32f4xx_lptim.h
│ │ ├── stm32f4xx_ltdc.h
│ │ ├── stm32f4xx_pwr.h
│ │ ├── stm32f4xx_qspi.h
│ │ ├── stm32f4xx_rcc.h
│ │ ├── stm32f4xx_rng.h
│ │ ├── stm32f4xx_rtc.h
│ │ ├── stm32f4xx_sai.h
│ │ ├── stm32f4xx_sdio.h
│ │ ├── stm32f4xx_spdifrx.h
│ │ ├── stm32f4xx_spi.h
│ │ ├── stm32f4xx_syscfg.h
│ │ ├── stm32f4xx_tim.h
│ │ ├── stm32f4xx_usart.h
│ │ └── stm32f4xx_wwdg.h
│ └── src
│ ├── misc.c
│ ├── stm32f4xx_adc.c
│ ├── stm32f4xx_can.c
│ ├── stm32f4xx_cec.c
│ ├── stm32f4xx_crc.c
│ ├── stm32f4xx_cryp_aes.c
│ ├── stm32f4xx_cryp.c
│ ├── stm32f4xx_cryp_des.c
│ ├── stm32f4xx_cryp_tdes.c
│ ├── stm32f4xx_dac.c
│ ├── stm32f4xx_dbgmcu.c
│ ├── stm32f4xx_dcmi.c
│ ├── stm32f4xx_dfsdm.c
│ ├── stm32f4xx_dma2d.c
│ ├── stm32f4xx_dma.c
│ ├── stm32f4xx_dsi.c
│ ├── stm32f4xx_exti.c
│ ├── stm32f4xx_flash.c
│ ├── stm32f4xx_flash_ramfunc.c
│ ├── stm32f4xx_fmc.c
│ ├── stm32f4xx_fmpi2c.c
│ ├── stm32f4xx_fsmc.c
│ ├── stm32f4xx_gpio.c
│ ├── stm32f4xx_hash.c
│ ├── stm32f4xx_hash_md5.c
│ ├── stm32f4xx_hash_sha1.c
│ ├── stm32f4xx_i2c.c
│ ├── stm32f4xx_iwdg.c
│ ├── stm32f4xx_lptim.c
│ ├── stm32f4xx_ltdc.c
│ ├── stm32f4xx_pwr.c
│ ├── stm32f4xx_qspi.c
│ ├── stm32f4xx_rcc.c
│ ├── stm32f4xx_rng.c
│ ├── stm32f4xx_rtc.c
│ ├── stm32f4xx_sai.c
│ ├── stm32f4xx_sdio.c
│ ├── stm32f4xx_spdifrx.c
│ ├── stm32f4xx_spi.c
│ ├── stm32f4xx_syscfg.c
│ ├── stm32f4xx_tim.c
│ ├── stm32f4xx_usart.c
│ └── stm32f4xx_wwdg.c
├── main.map
├── Makefile
├── startup_stm32f407xx.s
├── STM32F407IGHx_FLASH.ld
├── STM32F407.svd
└── User
├── main.c
├── spi.c
├── spi.h
├── usart.c
└── usart.h
arm-none-eabi-gcc #编译器
arm-none-eabi-as #汇编器
arm-none-eabi-ld#链接器
arm-none-eabi-objcopy#目标文件格式转换
常用编译选项(arm-none-eabi-gcc):
-mthumb -mcpu=cortex-m4 #处理器架构选项 M4/M3/M7
--specs=nosys.specs #
arm-none-eabi
工具链带有两个基于newlib
的库可供选择(newlib
和newlib_nano
)可选参数有 nosys.specs / nano.specs 注意:这即是一个编译选项也是一个链接选项-Wall #使能所有警告
-O0 #编译优化选项,可以为(数字 0 1 2 3)
-g #产生调试信息
-I 头文件路径 #指定用户头文件搜索目录
-D #全局宏定义相当于#define
链接常用选项(arm-none-eabi-ld):
-mthumb -mcpu=cortex-m4 #处理器架构选项 M4/M3/M7
--specs=nosys.specs #
arm-none-eabi
工具链带有两个基于newlib
的库可供选择(newlib
和newlib_nano
)可选参数有 nosys.specs / nano.specs 注意:这即是一个编译选项也是一个链接选项-Wl,-Map=main.map #Wl后面的东西是作为参数传递给链接器ld,-map是生成map文件
-static #此选项将禁止使用动态库
-g #产生调试信息
有更详细的文档,请移步到这个链接:
gcc for arm 工具链使用(一)_fdcp123的专栏-CSDN博客
我先给出我自己写的一个Makefile文档,功能不多,日常用。
TARGET = main
#定义编译器
CC := arm-none-eabi-gcc
AS :=arm-none-eabi-as
LD :=arm-none-eabi-ld
AR :=arm-none-eabi-ar
OBJCOPY :=arm-none-eabi-objcopy
#定义启动文件和链接文件
START_FILE = startup_stm32f407xx.s
LINK_FILE =./STM32F407IGHx_FLASH.ld
#定义头文件搜索路径
include = -I /home/fxx/Desktop/Project/CMSIS/Inc/
include += -I /home/fxx/Desktop/Project/Dev/inc/
include += -I /home/fxx/Desktop/Project/User/
define = -D STM32F40_41xxx
#定义c文件搜索路径
vpath %.c ./CMSIS/Src
vpath %.c ./Dev/src
vpath %.c ./User
vpath %.o ./Build
#定义编译选项
CFLAGS = -mcpu=cortex-m4 --specs=nosys.specs -Wall -Wextra -g -O0 -fcond-mismatch $(include) $(define) -MD
ASFLAGS = -mcpu=cortex-m4
LDFLAGS = -mcpu=cortex-m4 --specs=nosys.specs -O0 -static -g -Wl,-Map=main.map
#要编译的c文件
C_SOURCE = stm32f4xx_rcc.c stm32f4xx_gpio.c stm32f4xx_spi.c stm32f4xx_usart.c system_stm32f4xx.c usart.c spi.c misc.c main.c
O_OBJ =$(C_SOURCE:%.c=%.o)
AS_OBJ =$(START_FILE:%.s=%.o)
$(warning $(O_OBJ))
$(warning $(C_SOURCE))
all:bin
elf:$(O_OBJ) $(AS_OBJ)$(CC) $(LDFLAGS) $(addprefix ./Build/,$(O_OBJ)) $(addprefix ./Build/,$(AS_OBJ)) -T $(LINK_FILE) -o ./Build/$(TARGET).elf
bin:elf$(OBJCOPY) ./Build/$(TARGET).elf ./Build/$(TARGET).bin$(OBJCOPY) ./Build/$(TARGET).elf ./Build/$(TARGET).hex
$(AS_OBJ):$(START_FILE)$(AS) $(ASFLAGS) -c $^ -o ./Build/$@
$(O_OBJ):%.o:%.c$(CC) $(CFLAGS) -c $< -o ./Build/$@
clean:rm -rf ./Build/*.o ./Build/*.d ./*.map ./Build/*.elf ./Build/*.bin ./Build/*.hex
要学习Makefile的请移步到下面链接:
跟我一起写 Makefile(一)_陈皓专栏 【空谷幽兰,心如皓月】-CSDN博客_makefile
在vscod中按:ctrl+shift+d 跳转到调试界面
新建一个lauch.json文件
具体配置如下:
{"configurations": [{"cwd": "${workspaceRoot}","executable": "./Build/main.elf","name": "Debug Microcontroller","request": "launch","type": "cortex-debug","showDevDebugOutput": false,"servertype": "openocd","configFiles": ["/usr/share/openocd/scripts/interface/stlink.cfg","/usr/share/openocd/scripts/target/stm32f4x.cfg"],"svdFile": "./STM32F407.svd"}]
}
具体配置参数请移步至下面链接学习:
Cortex-debug 调试器使用介绍_Null-CSDN博客
本文也是拾人牙慧,自创极少,若有不当之处,还望各位读者能够及时斧正。
本文发布于:2024-01-31 05:36:42,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170665060325936.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |