基于STM32CubeMx的ubuntu开发环境


Author shaniadolphin
e-mail 349948204@qq.com

搭建交叉编译环境

stm32 属于arm cortex-m系列thumb指令集,使用的编译工具是arm-none-eabi,在ubuntu下的安装可以参考以下方式:

sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
sudo apt-get update
sudo apt-get install gcc-arm-embedded

检查环境变量,测试是否可用:

dolphin@DESKTOP-DR5OKOG:/mnt/e/WORK/shaniadolphin/stm32/test_gcc$ echo $PATH | grep "gcc"
dolphin@DESKTOP-DR5OKOG:/mnt/e/WORK/shaniadolphin/stm32/test_gcc$ arm-none-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-none-eabi/6.3.1/lto-wrapper
Target: arm-none-eabi
gcc version 6.3.1 20170620 (15:6.3.1+svn253039-1build1)

设置STM32CubeMx

打开应用创建工程:


创建工程

设置输出为Makefie:


设置输出

即可通过STM32CUBEMX输出工程代码及对应的Makefile。


输出工程

如果后续要添加自己的代码,就需要修改这里的Makefile文件。
用Makefile生成工程的好处就是方便管理自己添加的文件。

在Makefile中打开硬件浮点,

# float-abi
FLOAT-ABI = -mfloat-abi=hard

链接时会报错:

  LD      stm32f405_ledscreen_freertos.elf
/usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/bin/ld: error: /usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/lib/crt0.o: Conflicting CPU architectures 13/1
/usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/bin/ld: failed to merge target specific data of file /usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/lib/crt0.o
collect2: error: ld returned 1 exit status
Makefile:199: recipe for target 'build/stm32f405_ledscreen_freertos.elf' failed
make: *** [build/stm32f405_ledscreen_freertos.elf] Error 1

原因是库版本不匹配,详细参考
可以下载下面的库文件,用dpkg的命令安装这样deb包,以安装匹配的库:
libnewlib-dev_3.0.0.20180802-2_all.deb
libnewlib-arm-none-eabi_3.0.0.20180802-2_all.deb

sudo dpkg -i libnewlib-dev_3.0.0.20180802-2_all.deb
sudo dpkg -i libnewlib-arm-none-eabi_3.0.0.20180802-2_all.deb

修改Makefile

在Makefile前部增加:

# 在调用工程时输入 make V=1 来显示编译过程,否则默认不显示编译时的指令
ifneq ($(V),1)
Q       := @
NULL    := 2>/dev/null
endif

修改编译打印:

#######################################
# build the application
#######################################
# list of objects
OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))
vpath %.c $(sort $(dir $(C_SOURCES)))
# list of ASM program objects
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o)))
vpath %.s $(sort $(dir $(ASM_SOURCES)))

$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR)
    @printf "  CC      $(*).c\n"
    $(Q) $(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@

$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)
    @printf "  AS      $(*).s\n"
    $(Q) $(AS) -c $(CFLAGS) $< -o $@

$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
    @printf "  LD      $(TARGET).elf\n"
    $(Q) $(CC) $(OBJECTS) $(LDFLAGS) -o $@
    @printf "  SZ      $(TARGET).elf\n"
    $(Q) $(SZ) $@

$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
    $(HEX) $< $@
    
$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
    $(BIN) $< $@
    
$(BUILD_DIR):
    mkdir $@

使打印像如图所示的效果,

make -j
  CC      main.c
  CC      stm32l0xx_it.c
  CC      stm32l0xx_hal_msp.c
  CC      stm32l0xx_hal_adc.c
  CC      stm32l0xx_hal_adc_ex.c
  CC      stm32l0xx_hal_i2c.c
  CC      stm32l0xx_hal_i2c_ex.c
  CC      stm32l0xx_hal_rtc.c
  CC      stm32l0xx_hal_tim.c
  CC      stm32l0xx_hal_rtc_ex.c
  CC      stm32l0xx_hal_tim_ex.c
  CC      stm32l0xx_hal.c
  CC      stm32l0xx_hal_flash_ex.c
  CC      stm32l0xx_hal_pwr.c
  CC      stm32l0xx_hal_flash_ramfunc.c
  CC      stm32l0xx_hal_pwr_ex.c
  CC      stm32l0xx_hal_dma.c
  CC      system_stm32l0xx.c
  CC      stm32l0xx_hal_gpio.c
  CC      stm32l0xx_hal_rcc.c
  AS      startup_stm32l011xx.s
  CC      stm32l0xx_hal_rcc_ex.c
  CC      stm32l0xx_hal_cortex.c
  CC      stm32l0xx_hal_flash.c
  LD      firmware.elf
  SZ      firmware.elf
   text    data     bss     dec     hex filename
  10152      20    1836   12008    2ee8 build/firmware.elf
arm-none-eabi-objcopy -O ihex build/firmware.elf build/firmware.hex
arm-none-eabi-objcopy -O binary -S build/firmware.elf build/firmware.bin

否则会显示完整的编译指令,让命令窗非常凌乱:

dolphin@DESKTOP-DR5OKOG:/mnt/e/WORK/shaniadolphin/stm32/test_gcc$ make
mkdir build
arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb   -DUSE_HAL_DRIVER -DSTM32F103xB -IInc -IDrivers/STM32F1xx_HAL_Driver/Inc -IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy -IMiddlewares/ST/STM32_USB_Device_Library/Core/Inc -IMiddlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -IDrivers/CMSIS/Device/ST/STM32F1xx/Include -IDrivers/CMSIS/Include -IMiddlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3 -IMiddlewares/Third_Party/FreeRTOS/Source/include -IMiddlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -O3 -Wall -fdata-sections -ffunction-sections -g -gdwarf-2 -MMD -MP -MF"build/main.d" -Wa,-a,-ad,-alms=build/main.lst Src/main.c -o build/main.o
arm-none-eabi-gcc build/main.o build/usb_device.o build/usbd_conf.o build/usbd_desc.o build/usbd_cdc_if.o build/stm32f1xx_it.o build/stm32f1xx_hal_msp.o build/stm32f1xx_hal_timebase_TIM.o build/stm32f1xx_hal_gpio_ex.o build/stm32f1xx_hal_pcd.o build/stm32f1xx_hal_pcd_ex.o build/stm32f1xx_ll_usb.o build/stm32f1xx_hal_adc.o build/stm32f1xx_hal_adc_ex.o build/stm32f1xx_hal_spi.o build/stm32f1xx_hal_spi_ex.o build/stm32f1xx_hal_tim.o build/stm32f1xx_hal_tim_ex.o build/stm32f1xx_hal_uart.o build/stm32f1xx_hal.o build/stm32f1xx_hal_rcc.o build/stm32f1xx_hal_rcc_ex.o build/stm32f1xx_hal_gpio.o build/stm32f1xx_hal_dma.o build/stm32f1xx_hal_cortex.o build/stm32f1xx_hal_pwr.o build/stm32f1xx_hal_flash.o build/stm32f1xx_hal_flash_ex.o build/system_stm32f1xx.o build/usbd_core.o build/usbd_ctlreq.o build/usbd_ioreq.o build/usbd_cdc.o build/freertos.o build/heap_4.o build/port.o build/croutine.o build/event_groups.o build/list.o build/queue.o build/tasks.o build/timers.o build/cmsis_os.o build/startup_stm32f103xb.o -mcpu=cortex-m3 -mthumb   -specs=nano.specs -TSTM32F103C8Tx_FLASH.ld  -lc -lm -lnosys  -Wl,-Map=build/oled_test.map,--cref -Wl,--gc-sections -o build/oled_test.elf
arm-none-eabi-size build/oled_test.elf
   text    data     bss     dec     hex filename
  19500     360   11064   30924    78cc build/oled_test.elf
arm-none-eabi-objcopy -O ihex build/oled_test.elf build/oled_test.hex
arm-none-eabi-objcopy -O binary -S build/oled_test.elf build/oled_test.bin

需要注意编译freertos的代码时,可能会有错误提示,可能和编译顺序有关:

dolphin@DESKTOP-DR5OKOG:/mnt/e/WORK/shaniadolphin/stm32/test_gcc$ make
mkdir build
arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb   -DUSE_HAL_DRIVER -DSTM32F103xB -IInc -IDrivers/STM32F1xx_HAL_Driver/Inc -IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy -IMiddlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3 -IMiddlewares/ST/STM32_USB_Device_Library/Core/Inc -IMiddlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -IDrivers/CMSIS/Device/ST/STM32F1xx/Include -IMiddlewares/Third_Party/FreeRTOS/Source/include -IMiddlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -IDrivers/CMSIS/Include -O3 -Wall -fdata-sections -ffunction-sections -g -gdwarf-2 -MMD -MP -MF"build/main.d" -Wa,-a,-ad,-alms=build/main.lst Src/main.c -o build/main.o
arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb   -DUSE_HAL_DRIVER -DSTM32F103xB -IInc -IDrivers/STM32F1xx_HAL_Driver/Inc -IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy -IMiddlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3 -IMiddlewares/ST/STM32_USB_Device_Library/Core/Inc -IMiddlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -IDrivers/CMSIS/Device/ST/STM32F1xx/Include -IMiddlewares/Third_Party/FreeRTOS/Source/include -IMiddlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -IDrivers/CMSIS/Include -O3 -Wall -fdata-sections -ffunction-sections -g -gdwarf-2 -MMD -MP -MF"build/freertos.d" -Wa,-a,-ad,-alms=build/freertos.lst Src/freertos.c -o build/freertos.o
Src/freertos.c:91:8: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'
 __weak void PreSleepProcessing(uint32_t *ulExpectedIdleTime)
        ^~~~
Src/freertos.c:96:8: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'
 __weak void PostSleepProcessing(uint32_t *ulExpectedIdleTime)
        ^~~~
Makefile:191: recipe for target 'build/freertos.o' failed
make: *** [build/freertos.o] Error 1

将freertos取消,生成工程,可以编译成功,这时再增加freertos选项,即可编译通过。

参考文档

# 链接地址 文档名称
1 https://blog.csdn.net/zhouxuanyuye/article/details/81143423 卷积神经网络中卷积的OpenCL实现
2 https://www.cnblogs.com/Reyzal/p/7389993.html Intel核心显卡OpenCL环境搭建
3 https://github.com/shaniadolphin/ github源码
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,002评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,777评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,341评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,085评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,110评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,868评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,528评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,422评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,938评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,067评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,199评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,877评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,540评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,079评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,192评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,514评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,190评论 2 357

推荐阅读更多精彩内容