91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

稚暉君:配置CLion用于STM32開發(fā)

li5236 ? 來源:稚暉君 ? 作者:稚暉君 ? 2022-03-30 14:28 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

0.前言

最近在做一個開源個人項目有用到STM32這款MCU,好久沒用Keil感覺各種不適應(yīng),遂嘗試能不能把STM32的開發(fā)環(huán)境部署到其他更強大的IDE,結(jié)果很圓滿,以下是配置Clion用于STM32開發(fā)的過程記錄,供大家參考~

嵌入式開發(fā)的人對STM32這個平臺應(yīng)該都是非常熟悉的,在國內(nèi)尤其流行,很多產(chǎn)品里面都是基于這個平臺做的方案。多數(shù)人在開發(fā)STM32的時候用的都是Keil這個老牌IDE,很大一部分原因是因為大多數(shù)人最初是從51單片機學(xué)習(xí)過來的,51就是基于Keil去開發(fā)的,然后遷移到STM32的時候也就沿用下來了。

poYBAGJD-MSAE-jMAAGqK_1W7fQ709.png

Keil開發(fā)環(huán)境界面

Keil操作簡單,容易上手,而且可以很方便地進行調(diào)試。但是對于以前不是做嵌入式開發(fā)的軟件開發(fā)人員來說,面對Keil這種上世紀(jì)風(fēng)格的IDE(不只是UI)肯定是不太有好感的。在嘗試過STM32CubeIDE和TrueStudio等用Eclipse修改的IDE之后,總是覺得還是沒內(nèi)味兒。

我平時工作中最常用的是Pycharm和Android Studio,都是Jetbrains系的IDE。用過Jetbrains系IDE的朋友肯定會被它強大的代碼補全、界面風(fēng)格、各種插件、流暢性等眾多優(yōu)點所吸引,毫無疑問這些是能夠極大提高開發(fā)效率的。而其中有一款CLion IDE就是專門面向C/C++開發(fā)的,所以本篇文章會介紹如何把STM32的編譯調(diào)試環(huán)境部署到CLion中,過程還是有很多坑值得注意的。

代碼的話大家以前用的基本上都是ST的標(biāo)準(zhǔn)庫,然后自己開發(fā)邏輯部分,或者在一些方便的地方直接操作寄存器。直接操作寄存器能提高代碼的執(zhí)行效率,但是很難移植,后來ST開發(fā)了一款可以快速demo的平臺Cube MX,通過這個軟件配合ST的HAL庫,可以快速的搭建工程,并能生成跨芯片平臺的工程。HAL庫更容易進行移植,而且應(yīng)用起來也更加方便,ST也正在加大對HAL庫的支持,并漸漸放棄標(biāo)準(zhǔn)庫。

本篇介紹的內(nèi)容也是以基于HAL庫開發(fā)為準(zhǔn)的。

1.環(huán)境及所需工具

軟件環(huán)境:

Windows 10

STM32CubeMX

Clion-2019

MinGW

OpenOCD

arm-none-eabi-gcc

硬件環(huán)境:

STM32F103VET6

自制的DapLink下載器(ST-Link/J-Link也是可以的)

工具安裝

STM32CubeMX

這個正常去官網(wǎng)下載最新版的安裝就行了:https://www.st.com/en/development-tools/stm32cubemx.html

OpenOCD

OpenOCD是用于對STM32進行下載仿真的工具,是一個開源軟件包,Windows版本下從這里下載,下載好解壓到一個目錄就行,后面會在Clion中鏈接這個目錄:

poYBAGJD-OuAP9JSAACziATgD7c707.png

MinGW

Clion需要使用MinGW環(huán)境來配置工具鏈,安裝方法如下:

首先去MinGW主頁下載最新版本的MinGW: Minimalist GNU for Windows,這是MinGW的安裝器:

poYBAGJD-RyAW_WKAAByc9a_XmA589.png

打開exe進行安裝,修改安裝目錄(最好不能有空格),安裝完成后進行組件下載:

pYYBAGJD-SmADsKRAADAsNIXB6k023.png

如上圖中所示,把Basic Setup里面的組件全部勾選(也可也去掉不需要的語言編譯器比如Objective-C)。

配置系統(tǒng)的環(huán)境變量,在Path環(huán)境變量里面添加一條,指向MinGW的bin文件夾:

pYYBAGJD-TSAYvSdAARjzraWc78780.png

重啟電腦,然后在命令窗口中輸入下面的命令驗證安裝是否成功:

gcc -v

poYBAGJD-WiARzQgAANK47t3hBw920.png

arm-none-eabi-gcc

Windows到這里下載:https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads ,選擇ZIP壓縮包形式的:

pYYBAGJD-XSAJqboAAEuJQeeUm8794.png

解壓到一個文件夾,并把安裝目錄下的bin文件夾添加到環(huán)境變量:

pYYBAGJD-YOALgF1AAClL1bISbo807.png

然后重啟使得環(huán)境變量生效之后可以在命令行里用以下語句測試:

arm-none-eabi-gcc -v

如果有信息輸出,那就是裝好了。

Clion配置

Clion是基于CMake來管理項目的,所以首選我們需要配置好預(yù)設(shè)的MinGW和CMake環(huán)境。

打開File-Settings-Build,Execution,Deployment選項卡,在Toolchains下面添加一個MinGW環(huán)境:

pYYBAGJD-cKAWw7bAAGrodGOi1I736.png

注意Debugger不要改,否則斷點調(diào)試的時候無法連接。

然后再CMake欄下確認一下工具鏈?zhǔn)欠裾_:

poYBAGJD-cyABiMKAAFvrdg2JJI812.png

至此Clion環(huán)境配置完成,可以創(chuàng)建STM32項目了。

2.在Clion中創(chuàng)建STM32工程

創(chuàng)建CubeMX工程

在Clion中選擇File-New Project可以創(chuàng)建STM32CubeMX的項目:

poYBAGJD-dyALETlAAEDws5kiEg026.png

點擊create后會生成一個.ioc文件,這個文件跟使用STM32CubeMX直接創(chuàng)建的是一樣的,點擊圖中的鏈接可以跳轉(zhuǎn)到STM32CubeMX中打開這個ioc文件:

poYBAGJD-eaAY6pnAAFDl5Kx1OA948.png

默認選中的芯片型號是STM32F030F4Px,我們可以在CubeMX中重新選擇自己需要的芯片,一切操作都和使用Keil開發(fā)沒有區(qū)別。

只有一個地方需要注意一下,就是在下面的設(shè)置中項目名稱一定要和在Clion中建立的一致,這樣生成的工程文件才會覆蓋Clion中的文件,否則會另外生成一個文件夾,Clion就無法讀取了。

另外生成的IDE類型選擇是SW4STM32。

pYYBAGJD-jmADZ4HAAHJmZHTaAY474.png

每次修改完點Generate之后,彈窗直接點Close,Clion里面會自動更新文件。

pYYBAGJD-kiAJLfwAACASL1Cpuw886.png

第一次設(shè)置完回到Clion會彈出一個板卡選擇窗口:

pYYBAGJD-lOAA9HSAAELqp3Q-1Q475.png

這些配置文件是跟OpenOCD下載程序有關(guān)的,里面的板子很可能是沒有我們自己要用的型號的,后面會介紹怎么自己建立這個配置文件,這里先點取消。

編譯工程

在IDE底欄的CMake選項卡中如果沒有提示錯誤,說明工程配置就沒問題了。

點擊這個按鈕可以更新CMake工程:

poYBAGJD-miARY1vAAEGWpNWddc765.png

頂欄的這三個圖標(biāo)分別是編譯、下載、調(diào)試:

pYYBAGJD-nKAKWzfAABoL7-49MI462.png

點擊編譯,可以看到編譯輸出:

poYBAGJD-oeAVgu_AAFkuugNNbg339.png

可以看到成功生成了用于燒寫的.bin和.hex文件。

燒錄程序 & 在線調(diào)試

在Keil里面我們燒錄程序的時候要指定使用的下載器(J-Link、ST-Link、CMSIS-DAP等),Clion燒錄程序之前通用需要進行一些設(shè)置。

點擊編譯按鈕旁邊的配置欄下拉,選Edit Configurations,打開配置窗口:

pYYBAGJD-s6AFQavAAGEa0Yhsrk622.png

可以看到?jīng)]有設(shè)置板子的config文件所以出現(xiàn)警告錯誤,這個配置文件就是前面說的需要自己生成的文件。

我們在工程根目錄下新建一個文件夾config,在里面新建一個配置文件daplink.cfg(因為我這里使用的是自制DapLink作為仿真器),文件的內(nèi)容如下:

# choose st-link/j-link/dap-link etc.

adapter driver cmsis-dap

transport select swd

# 0x10000 = 64K Flash Size

set FLASH_SIZE 0x20000

source [find target/stm32f1x.cfg]

# download speed = 10MHz

adapter speed 10000

前兩行設(shè)置了仿真器的類型和接口,下面幾行指定了Flash大小、芯片類型、下載速度等。

如果對自己的芯片不知道怎么設(shè)置,可以參考OpenOCD自帶的一系列配置文件,路徑在OpenOCD安裝目錄的share\openocd\scripts下:

pYYBAGJD-uOATz0jAAFUa5mI5ZE179.png

只需要關(guān)注這幾個目錄:

board:板卡配置,各種官方板卡

interface:仿真器類型配置,比如ST-Link、CMSIS-DAP等都在里面

target:芯片類型配置,STM32F1xx、STM32L0XX等等都在里面

設(shè)置好配置文件之后,就可以點擊下載或者調(diào)試按鈕進行下載和在線調(diào)試了。

在配置文件中不要加reset_config srst_only這一句,會導(dǎo)致下載失敗,這一句是指示系統(tǒng)重啟的,刪除不影響下載。

CLion里面是支持全功能的單步斷點調(diào)試的,也能在代碼里直接觀察變量的值,非常舒服~

pYYBAGJD-viALcAAAAG0towS1BU769.png

強大的代碼補全功能

pYYBAGJD-wuAbHvfAAH3i7nOez0149.png

單步調(diào)試和變量觀察功能

3.其他問題

編譯錯誤問題

如果移動了工程文件夾的話,最好打開.ioc文件重新Generate一下再編譯,可以解決很多錯誤。

printf重定向問題

在Keil里面為了使用printf函數(shù)我們需要重定向fputc函數(shù):

int fputc (int ch, FILE *f)

{

(void)HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000);

return ch;

}

其中的FILE定義在stdio.h頭文件中,所以需要在項目中包含這個頭文件,但是經(jīng)過測試發(fā)現(xiàn),Keil里面包含的是MDK\ARM\ARMCC\include這個目錄下的stdio.h,而在Clion中是不會鏈接到這個文件的。因此如果在Clion中也按之前的方法進行重定向,會發(fā)現(xiàn)printf沒有任何輸出。

在Clion中鏈接的是GNU-Tools-ARM-Embedded\arm-none-eabi\include里面的stdio.h,如果仍然想使用printf函數(shù)功能,則需要進行如下操作:

新建一個retarget.h文件內(nèi)容如下:

#ifndef _RETARGET_H__

#define _RETARGET_H__

#include “stm32f1xx_hal.h”

#include

#include

void RetargetInit(UART_HandleTypeDef *huart);

int _isatty(int fd);

int _write(int fd, char *ptr, int len);

int _close(int fd);

int _lseek(int fd, int ptr, int dir);

int _read(int fd, char *ptr, int len);

int _fstat(int fd, struct stat *st);

#endif //#ifndef _RETARGET_H__

再新建一個retarget.c文件內(nèi)容如下:

#include 《_ansi.h》

#include 《_syslist.h》

#include

#include

#include

#include

#include

#if !defined(OS_USE_SEMIHOSTING)

#define STDIN_FILENO 0

#define STDOUT_FILENO 1

#define STDERR_FILENO 2

UART_HandleTypeDef *gHuart;

void RetargetInit(UART_HandleTypeDef *huart)

{

gHuart = huart;

/* Disable I/O buffering for STDOUT stream, so that

* chars are sent out as soon as they are printed. */

setvbuf(stdout, NULL, _IONBF, 0);

}

int _isatty(int fd)

{

if (fd 》= STDIN_FILENO && fd 《= STDERR_FILENO)

return 1;

errno = EBADF;

return 0;

}

int _write(int fd, char *ptr, int len)

{

HAL_StatusTypeDef hstatus;

if (fd == STDOUT_FILENO || fd == STDERR_FILENO)

{

hstatus = HAL_UART_Transmit(gHuart, (uint8_t *) ptr, len, HAL_MAX_DELAY);

if (hstatus == HAL_OK)

return len;

else

return EIO;

}

errno = EBADF;

return -1;

}

int _close(int fd)

{

if (fd 》= STDIN_FILENO && fd 《= STDERR_FILENO)

return 0;

errno = EBADF;

return -1;

}

int _lseek(int fd, int ptr, int dir)

{

(void) fd;

(void) ptr;

(void) dir;

errno = EBADF;

return -1;

}

int _read(int fd, char *ptr, int len)

{

HAL_StatusTypeDef hstatus;

if (fd == STDIN_FILENO)

{

hstatus = HAL_UART_Receive(gHuart, (uint8_t *) ptr, 1, HAL_MAX_DELAY);

if (hstatus == HAL_OK)

return 1;

else

return EIO;

}

errno = EBADF;

return -1;

}

int _fstat(int fd, struct stat *st)

{

if (fd 》= STDIN_FILENO && fd 《= STDERR_FILENO)

{

st-》st_mode = S_IFCHR;

return 0;

}

errno = EBADF;

return 0;

}

#endif //#if !defined(OS_USE_SEMIHOSTING)

添加這兩個文件到工程,更新CMake,編譯之后會發(fā)現(xiàn),有幾個系統(tǒng)函數(shù)重復(fù)定義了,被重復(fù)定義的函數(shù)位于Src目錄的syscalls.c文件中,我們把里面重復(fù)的幾個函數(shù)刪掉即可。

在main函數(shù)的初始化代碼中添加對頭文件的引用并注冊重定向的串口號:

#include “retarget.h”

RetargetInit(&huart1);

然后就可以愉快地使用printf和scanf啦:

char buf[100];

printf(“\r\nYour name: ”);

scanf(“%s”, buf);

printf(“\r\nHello, %s!\r\n”, buf);

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32
    +關(guān)注

    關(guān)注

    2310

    文章

    11172

    瀏覽量

    373818
  • 稚暉君
    +關(guān)注

    關(guān)注

    7

    文章

    41

    瀏覽量

    6520
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    奮斗 STM32 開發(fā)板入門手冊

    電子發(fā)燒友網(wǎng)站提供《奮斗 STM32 開發(fā)板入門手冊.pdf》資料免費下載
    發(fā)表于 01-13 10:44 ?1次下載

    稚暉發(fā)布全球最小全身力控人形機器人,上緯啟元開啟個人機器人時代

    12月31日,全球首款全身力控小尺寸人形機器人“啟元Q1”正式發(fā)布。上緯新材董事長彭志輝(稚暉)宣布,公司將以“上緯啟元”品牌進軍個人機器人賽道,并首次對外明確了這一業(yè)務(wù)方向。 作為全球最小全身力
    的頭像 發(fā)表于 12-31 16:34 ?646次閱讀

    【免費試用】正點原子STM32N647開發(fā)板免費試用

    資源、多種傳感器外設(shè)和通訊接口,非常適合用于STM32N6系列芯片的學(xué)習(xí)、開發(fā)和驗證。>>>點擊立即申請
    的頭像 發(fā)表于 12-23 08:06 ?1208次閱讀
    【免費試用】正點原子<b class='flag-5'>STM32</b>N647<b class='flag-5'>開發(fā)</b>板免費試用

    STM32C0116-DK探索套件開發(fā)指南與技術(shù)解析

    STMicroelectronics STM32C0116-DK探索套件設(shè)計用于演示STM32C0 MCU的特性,采用UFQFPN20封裝。STM32C0116-DK套件包括一個
    的頭像 發(fā)表于 10-27 14:57 ?690次閱讀
    <b class='flag-5'>STM32</b>C0116-DK探索套件<b class='flag-5'>開發(fā)</b>指南與技術(shù)解析

    ?STM32 Nucleo-144開發(fā)板技術(shù)解析與應(yīng)用指南

    STMicroelectronics NUCLEO-H563ZI STM32 Nucleo-144控制板適用于對多種性能和功耗特點進行評測,價格經(jīng)濟實惠且配置靈活多變
    的頭像 發(fā)表于 10-25 17:05 ?1687次閱讀
    ?<b class='flag-5'>STM32</b> Nucleo-144<b class='flag-5'>開發(fā)</b>板技術(shù)解析與應(yīng)用指南

    STM32 Nucleo-144開發(fā)板技術(shù)解析與應(yīng)用指南

    STMicroelectronics NUCLEO-H7S3L8 STM32 Nucleo-144開發(fā)板采用STM32H7S3L8 MCU,提供了一個經(jīng)濟實惠的多功能平臺,用于原型設(shè)計
    的頭像 發(fā)表于 10-17 14:40 ?1268次閱讀
    <b class='flag-5'>STM32</b> Nucleo-144<b class='flag-5'>開發(fā)</b>板技術(shù)解析與應(yīng)用指南

    ?STM32 Nucleo-64開發(fā)板技術(shù)解析與應(yīng)用指南

    ^?^ Uno V3連接和ST morpho接口,適用于STM32 Nucleo開放式開發(fā)平臺。STM32 Nucleo-64板集成了ST-LINK調(diào)試器/編程器,無需任何單獨的探頭。
    的頭像 發(fā)表于 10-16 10:50 ?804次閱讀
    ?<b class='flag-5'>STM32</b> Nucleo-64<b class='flag-5'>開發(fā)</b>板技術(shù)解析與應(yīng)用指南

    STM32 Nucleo IO-Link開發(fā)套件技術(shù)解析

    和X-NUCLEO-DO40A1擴展板組成。該Nucleo套件可用于評估目的和用作開發(fā)環(huán)境。P-NUCLEO-IOD5A1套件用于開發(fā)IO-Link和SIO應(yīng)用,
    的頭像 發(fā)表于 10-16 10:01 ?939次閱讀
    <b class='flag-5'>STM32</b> Nucleo IO-Link<b class='flag-5'>開發(fā)</b>套件技術(shù)解析

    【教程】手把手教你用CLion進行CW32開發(fā)

    /CW32-GCC-Clion-Template 最近 CLion 對非商業(yè)用途免費了,我立馬下載了最新的CLion2025,現(xiàn)在針國產(chǎn)武漢芯源半導(dǎo)體的 CW32單片機 搭建CLion
    的頭像 發(fā)表于 09-29 18:00 ?6988次閱讀
    【教程】手把手教你用<b class='flag-5'>CLion</b>進行CW32<b class='flag-5'>開發(fā)</b>

    cubemx+clion+gcc無法使用msh怎么解決?

    通過STM32CUMX配置RTTHREAD NANO ,用keil編譯并且移植shell之后,輸入鍵盤上下鍵無反應(yīng),而用clion+gcc編譯后(修改過啟動文件),只能打印version信息,無法顯示msh和輸入,兩者除了啟動文
    發(fā)表于 09-23 07:36

    cubemx+clion+gcc無法使用msh怎么解決?

    通過STM32CUMX配置RTTHREAD NANO ,用keil編譯并且移植shell之后,輸入鍵盤上下鍵無反應(yīng),而用clion+gcc編譯后(修改過啟動文件),只能打印version信息,無法顯示msh和輸入,兩者除了啟動文
    發(fā)表于 06-13 08:17

    【米爾-STM32MP257開發(fā)板試用體驗】初次體驗米爾-STM32MP257開發(fā)

    如何在MYD-LD25X開發(fā)板上使用STM32CubeMX工具來實現(xiàn)最小系統(tǒng)的搭建及外設(shè)資源的配置。通過本次培訓(xùn),學(xué)員不僅能掌握基礎(chǔ)的開發(fā)流程,還能在實踐中提高對
    發(fā)表于 04-30 16:21

    基于RV1126開發(fā)板網(wǎng)絡(luò)配置方法

    RV1126開發(fā)板網(wǎng)絡(luò)硬件資源有:以太網(wǎng)、WiFi,采用的網(wǎng)絡(luò)配置方案是:Netplan。 ? ? ? ?Netplan是一個用于配置Linux網(wǎng)絡(luò)的簡單工具。用戶只需要一個yaml
    的頭像 發(fā)表于 04-15 14:57 ?978次閱讀
    基于RV1126<b class='flag-5'>開發(fā)</b>板網(wǎng)絡(luò)<b class='flag-5'>配置</b>方法

    STM32F10xxx硬件開發(fā)指南

    官方STM32F10xxx硬件開發(fā)指南
    發(fā)表于 04-14 14:59 ?3次下載

    STM32開發(fā)入門進階必備!《STM32嵌入式系統(tǒng)開發(fā)—基于STM32CubeMX和HAL庫》新書發(fā)布!

    近日,由華清遠見教育科技集團精心編撰的教育部高等學(xué)校電子信息類專業(yè)教學(xué)指導(dǎo)委員會規(guī)劃教材、普通高等教育電子信息類專業(yè)系列教材——《STM32嵌入式系統(tǒng)開發(fā)—基于STM32CubeMX和HAL庫》重磅
    的頭像 發(fā)表于 04-03 14:54 ?2037次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>開發(fā)</b>入門進階必備!《<b class='flag-5'>STM32</b>嵌入式系統(tǒng)<b class='flag-5'>開發(fā)</b>—基于<b class='flag-5'>STM32</b>CubeMX和HAL庫》新書發(fā)布!