基于STM32CubeMx的ubuntu開發(fā)環(huán)境


Author shaniadolphin
e-mail 349948204@qq.com

搭建交叉編譯環(huán)境

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

檢查環(huán)境變量,測試是否可用:

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)

設(shè)置STM32CubeMx

打開應(yīng)用創(chuàng)建工程:


創(chuàng)建工程

設(shè)置輸出為Makefie:


設(shè)置輸出

即可通過STM32CUBEMX輸出工程代碼及對應(yīng)的Makefile。


輸出工程

如果后續(xù)要添加自己的代碼兼都,就需要修改這里的Makefile文件泄伪。
用Makefile生成工程的好處就是方便管理自己添加的文件失都。

在Makefile中打開硬件浮點(diǎn)后控,

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

鏈接時(shí)會報(bào)錯(cuò):

  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

原因是庫版本不匹配庙曙,詳細(xì)參考
可以下載下面的庫文件,用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前部增加:

# 在調(diào)用工程時(shí)輸入 make V=1 來顯示編譯過程捌朴,否則默認(rèn)不顯示編譯時(shí)的指令
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的代碼時(shí)洼怔,可能會有錯(cuò)誤提示,可能和編譯順序有關(guān):

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取消左驾,生成工程镣隶,可以編譯成功,這時(shí)再增加freertos選項(xiàng)诡右,即可編譯通過安岂。

參考文檔

# 鏈接地址 文檔名稱
1 https://blog.csdn.net/zhouxuanyuye/article/details/81143423 卷積神經(jīng)網(wǎng)絡(luò)中卷積的OpenCL實(shí)現(xiàn)
2 https://www.cnblogs.com/Reyzal/p/7389993.html Intel核心顯卡OpenCL環(huán)境搭建
3 https://github.com/shaniadolphin/ github源碼
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市稻爬,隨后出現(xiàn)的幾起案子嗜闻,更是在濱河造成了極大的恐慌,老刑警劉巖桅锄,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件琉雳,死亡現(xiàn)場離奇詭異,居然都是意外死亡友瘤,警方通過查閱死者的電腦和手機(jī)翠肘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辫秧,“玉大人束倍,你說我怎么就攤上這事∶讼罚” “怎么了绪妹?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長柿究。 經(jīng)常有香客問我邮旷,道長,這世上最難降的妖魔是什么蝇摸? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任婶肩,我火速辦了婚禮,結(jié)果婚禮上貌夕,老公的妹妹穿的比我還像新娘律歼。我一直安慰自己,他們只是感情好啡专,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布险毁。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪畔况。 梳的紋絲不亂的頭發(fā)上离唐,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機(jī)與錄音问窃,去河邊找鬼。 笑死完沪,一個(gè)胖子當(dāng)著我的面吹牛域庇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播覆积,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼听皿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了宽档?” 一聲冷哼從身側(cè)響起尉姨,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吗冤,沒想到半個(gè)月后又厉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡椎瘟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年覆致,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肺蔚。...
    茶點(diǎn)故事閱讀 40,030評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡煌妈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宣羊,到底是詐尸還是另有隱情璧诵,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布仇冯,位于F島的核電站之宿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏赞枕。R本人自食惡果不足惜澈缺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望炕婶。 院中可真熱鬧姐赡,春花似錦、人聲如沸柠掂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涯贞。三九已至枪狂,卻和暖如春危喉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背州疾。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工辜限, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人严蓖。 一個(gè)月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓薄嫡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親颗胡。 傳聞我的和親對象是個(gè)殘疾皇子毫深,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容