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

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

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

創(chuàng)建CW32L083GCC工程模板

華仔的編程隨筆 ? 來源:華仔的編程隨筆 ? 作者:華仔的編程隨筆 ? 2023-06-20 09:03 ? 次閱讀

【目的】

官方示例提供了MDK、IAR的示例,也提供了以上兩個環(huán)境的工程模板,但是沒有GCC的工程模板,GCC編譯環(huán)境與MDK、IAR主要區(qū)別就是C語言啟動環(huán)境的配置、鏈接文件的不一至,因為要實現(xiàn)VScode或者其他的編譯器來實現(xiàn)開發(fā)環(huán)境的搭建,就需要自己編寫CW32L083_FLASH.ld、以及startup_cw32l083_gcc.s。

【實現(xiàn)的思路】

1、尋找官方支持,我在CW32生態(tài)群里發(fā)了求助的信息,沒有回復(fù)。

2、在淘寶客服,咨詢,回復(fù)說,沒有工程。

3、有大佬提供了CW32F030的工程,我了解到CW32F030與CW32L083一樣是CortexM0+的內(nèi)核,所以想他的啟動文件跟LD應(yīng)該可以相互借鑒。所以償試修改CW32F030的工程來實現(xiàn)GCC的工程。

【實現(xiàn)步驟】

1、拷貝一份工程,另存為cw32l083_gcc,并用vscode打開。

2、到官網(wǎng)下載cw32l083的固件庫。

3、把cw32l083-stdperiph-lib/Libraries下面的固件替換掉cw32l083_gcc/Libraries固件。

4、復(fù)制cw32l083.h、system_cw32l083.h到/Libraries/CMSIS/Device/目錄下面。刪除原來的cw32f030.h以及system_cwl083.h。

5、Libraries/CMSIS/Device/startup_cw32f030_gcc.s重命名為startup_cw32l083_gcc.s。

6、Libraries/CMSIS/Device/CW32f030_FLASH.ld重命名為CW32L083_FLASH.ld。

7、Debug/CW32F030.svd 重命名為CW32L083.svd。并把其文件內(nèi)的cwf030修改為cw32l083.

8、復(fù)制l083固件庫中的cw32l083-stdperiph-lib/IdeSupport/MDKWHXY.CW32L083_DFP.1.0.8.pack 到Debug/WHXY.CW32L083_DFP.1.0.8.pack,并刪除原來的.pack文件。

9、復(fù)制cw32l083-stdperiph-lib/Examples/GPIO/gpio_blink/USER/src/interrupts_cw32l083.c 到/cw32l083_gcc/Core/app/interrupts_cw32l083.c。以及inc下面的interrupts_cw32l083.h。

10、修改Libraries/Libraries.mk文件內(nèi)容,主要是文件夾的名稱重新定位。

模塊名_DIR 是上一層傳遞下來的參數(shù),

是從工程根目錄到該模塊文件夾的路徑

向 C_SOURCES 中添加需要編譯的源文件

C_SOURCES += **(wildcard **(Libraries_DIR)/CW32L083_StdLib/src/*.c)

向 C_INCLUDES 中添加頭文件路徑

C_INCLUDES += -I$(Libraries_DIR)/CMSIS/Include

C_INCLUDES += -I$(Libraries_DIR)/CMSIS/Device/

C_INCLUDES += -I$(Libraries_DIR)/CW32L083_StdLib/inc

向 LIBDIR 中添加靜態(tài)庫文件路徑

LIBDIR += -L$(Libraries_DIR)/Lib

向 LIBS 中添加需要鏈接的靜態(tài)庫

LIBS += -lxxxx

link script

LDSCRIPT = $(Libraries_DIR)/CMSIS/Device/CW32L083_FLASH.ld

匯編文件宏定義

AS_DEFS +=

匯編頭文件目錄

AS_INCLUDES +=

匯編源文件(starup)

ASM_SOURCES += $(Libraries_DIR)/CMSIS/Device/startup_cw32l083_gcc.s

11、修改makefile,修加gcc的路徑:

#######################################

編譯器指定

#######################################

PREFIX = arm-none-eabi-

啟用下一項以指定GCC目錄

GCC_PATH = /Applications/ARM/bin/

12、修改pyocd.yaml,指定tartgets、pack包名稱:

pack: ./Debug/WHXY.CW32L083_DFP.1.0.8.pack

target_override: CW32L083vc

frequency: 24000000

13、查找CW32L083用戶手冊,修改/Libraries/CMSIS/Device/CW32L083_FLASH.ld的RAM、FLASH如下:

/* Specify the memory areas */

MEMORY

{

RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 24K

FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 256K

}

14、由于.h與MDK的編譯上有所差別會報警告

Libraries/CW32L083_StdLib/inc/cw32l083_gtim.h:272:52: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]

272 | #define IS_GTIM_DMA(DMA) (((DMA) & 0xFFFFFFC0 == 0x0UL) && (DMA) != 0x0UL)

修改為:#define IS_GTIM_DMA(DMA) ((((DMA) & 0xFFFFFFC0) == 0x0UL) && (DMA) != 0x0UL),消除運算符的警告。

15、修改SysTick.c中的__weak 編譯錯誤,修改為:attribute ((weak))

到此,工程修改就結(jié)束。

編譯后無警告無錯誤:

[LD] build_exec/template.elf

[HEX] build_exec/template.elf -> build_exec/template.hex

[BIN] build_exec/template.elf -> build_exec/template.bin

[DUMP] build_exec/template.elf -> build_exec/template.s

[SIZE] build_exec/template.elf

text data bss dec hex filename

1088 16 1568 2672 a70 build_exec/template.elf

-e Build Finish

修改app_main.c的LED針腳,內(nèi)容如下:

#include "app_main.h"

#include "cw32l083_gpio.h"

#include "cw32l083_rcc.h"

static inline void LED_Init()

{

GPIO_InitTypeDef GPIO_InitStruct;

RCC_AHBPeriphClk_Enable(RCC_AHB_PERIPH_GPIOC, ENABLE);

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.IT = GPIO_IT_NONE;

GPIO_InitStruct.Pins = GPIO_PIN_2;

GPIO_Init(CW_GPIOC, &GPIO_InitStruct);

}

int main(void)

{

LED_Init();

// 開啟兩線調(diào)試接口

RCC_SWDIO_Config(RCC_SYSCTRL_SWDIOEN);

while (1)

{

GPIO_TogglePin(CW_GPIOC, GPIO_PIN_2);

FirmwareDelay(1000000);

}

return 0;

}

/******************************************************************************

  • EOF (not truncated)
    ****************************************************************************/
    #ifdef USE_FULL_ASSERT
    /
  • @brief Reports the name of the source file and the source line number
  • where the assert_param error has occurred.
  • @param file: pointer to the source file name
  • @param line: assert_param error line source number
  • @retval None
    */
    void assert_failed(uint8_t file, uint32_t line)
    {
    /
    USER CODE BEGIN 6 /
    /
    User can add his own implementation to report the file name and line number,
    tex: printf("Wrong parameters value: file %s on line %d
    ", file, line) /
    /
    USER CODE END 6 /
    }
    #endif /
    USE_FULL_ASSERT */

編譯下載,就可以實現(xiàn)Led1閃爍了。

liujianhuadeMacBook-Pro:cw32l083_gcc liujianhua$ make flash

-e Start pyOCD

0000909 I Loading /Users/liujianhua/cw32l083/cw32l083_gcc/build_exec/template.elf [load_cmd]

[==================================================] 100%

0001522 I Erased 0 bytes (0 sectors), programmed 0 bytes (0 pages), skipped 1536 bytes (3 pages) at 2.45 kB/s [loader]

【總結(jié)】

經(jīng)過N次的試驗,終于成功的實現(xiàn)了cw32l083的gcc工程模版的創(chuàng)建。使得在linux、macOS環(huán)境下不能用MDK、IAR的難題。

附工程模版:

*附件:cw32l083_gcc.zip

審核編輯:湯梓紅

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

    關(guān)注

    180

    文章

    7595

    瀏覽量

    135878
  • IAR
    IAR
    +關(guān)注

    關(guān)注

    5

    文章

    344

    瀏覽量

    36598
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1617

    瀏覽量

    49016
  • 開發(fā)環(huán)境
    +關(guān)注

    關(guān)注

    1

    文章

    219

    瀏覽量

    16568
收藏 人收藏

    評論

    相關(guān)推薦

    基于CW32L083的線控器方案設(shè)計

    基于武漢芯源推出的CW32L083設(shè)計的空調(diào)線控器產(chǎn)品.
    的頭像 發(fā)表于 06-25 14:23 ?4.9w次閱讀
    基于<b class='flag-5'>CW32L083</b>的線控器方案設(shè)計

    CW32L083 RTC初始化設(shè)置

    介紹CW32L083的RTC初始化設(shè)置
    的頭像 發(fā)表于 06-24 10:16 ?1447次閱讀
    <b class='flag-5'>CW32L083</b> RTC初始化設(shè)置

    基于CW32L083的空調(diào)遙控器方案設(shè)計

    基于武漢芯源半導(dǎo)體推出的CW32L083而設(shè)計的的空調(diào)遙控器方案
    的頭像 發(fā)表于 06-21 16:03 ?1466次閱讀
    基于<b class='flag-5'>CW32L083</b>的空調(diào)遙控器方案設(shè)計

    首創(chuàng)ubuntu下cw32l031的vscode+gcc工程創(chuàng)建、下載、調(diào)試

    首創(chuàng)在ubuntu下面用vscode實現(xiàn)cw32l031的gcc工程創(chuàng)建、編譯、下載與調(diào)試
    的頭像 發(fā)表于 06-25 21:49 ?2.4w次閱讀
    首創(chuàng)ubuntu下<b class='flag-5'>cw32l</b>031的vscode+<b class='flag-5'>gcc</b><b class='flag-5'>工程</b><b class='flag-5'>創(chuàng)建</b>、下載、調(diào)試

    【Ubuntu VSCODE+GCCCW32L031實現(xiàn)printf工程

    CW32L031在ubuntu系統(tǒng)下面實現(xiàn)GCC,驅(qū)動UART,實現(xiàn)printf工程
    的頭像 發(fā)表于 06-28 17:07 ?1004次閱讀
    【Ubuntu VSCODE+<b class='flag-5'>GCC</b>】<b class='flag-5'>CW32L</b>031實現(xiàn)printf<b class='flag-5'>工程</b>

    移植RT-Thread nano到CW32L083

    移植RT-Thread Nano到CW32L083開發(fā)板上,并成功運行。
    的頭像 發(fā)表于 07-03 09:04 ?2.2w次閱讀
    移植RT-Thread nano到<b class='flag-5'>CW32L083</b>

    分享武漢芯源CW32L083VxTx_StartKit開發(fā)板資料

    CW32L083_StandardPeripheralLib_V1.9.zip 以上所有的資料都是中文的,工程里有.pack包、有各個外設(shè)的驅(qū)動示例。是學(xué)習(xí)該款芯片開發(fā)的好資料。
    發(fā)表于 06-08 10:00

    首創(chuàng)CW32L083GCC工程模版

    [loader] 【總結(jié)】 經(jīng)過N次的試驗,終于成功的實現(xiàn)了cw32l083gcc工程模塊的創(chuàng)建。使得在linux、macOS環(huán)境下不能用MDK、IAR的難題。*附件:
    發(fā)表于 06-19 22:17

    ubuntu下面用vscdoe實現(xiàn)CW32L031的工程創(chuàng)建、編譯、下載與調(diào)試

    GCC工程模版。現(xiàn)在將移植的過程與結(jié)果分享如下: CW32L031與CW32L083同屬arm-cortex-M0+系列,通對比MDK下的啟動匯編程序,發(fā)現(xiàn)除flsh與內(nèi)存大小不同之
    發(fā)表于 06-25 21:13

    CW32L083產(chǎn)品介紹

    CW32L083是一款基于eFlash的單芯片低功耗微控制器,集成了ARM?Cortex?-M0+ 核心,主頻高達(dá)64MHz,高速嵌入式存儲器(高達(dá)256K字節(jié)的FLASH和 高達(dá)24K字節(jié)
    發(fā)表于 09-14 06:41

    CW32L083段碼屏驅(qū)動

    CW32L083開發(fā)板上有8個段碼LCD顯示,使其顯示為0-9數(shù)字。
    的頭像 發(fā)表于 06-18 09:13 ?18.1w次閱讀
    <b class='flag-5'>CW32L083</b>段碼屏驅(qū)動

    武漢芯源CW32L083開發(fā)板介紹

    CW32L083VxTxStartKit評估板為用戶提供一種經(jīng)濟且靈活的方式使用CW32L083VxTx芯片構(gòu)建系統(tǒng)原型,可進(jìn)行性能、功耗、功能等各方面快速驗證
    的頭像 發(fā)表于 10-20 11:41 ?819次閱讀
    武漢芯源<b class='flag-5'>CW32L083</b>開發(fā)板介紹

    CW32L083實現(xiàn)SHT30驅(qū)動

    CW32L083驅(qū)動SHT30,并顯示到LCD屏上。
    的頭像 發(fā)表于 06-22 09:57 ?2966次閱讀
    <b class='flag-5'>CW32L083</b>實現(xiàn)SHT30驅(qū)動

    CW32L083如何實現(xiàn)AUTOTRIM時鐘校準(zhǔn)?

    CW32L083如何實現(xiàn)AUTOTRIM時鐘校準(zhǔn)?
    的頭像 發(fā)表于 11-07 17:17 ?600次閱讀
    <b class='flag-5'>CW32L083</b>如何實現(xiàn)AUTOTRIM時鐘校準(zhǔn)?

    【技術(shù)手冊】CW32L083RC數(shù)據(jù)手冊

    武漢芯源半導(dǎo)體CW32L083RC數(shù)據(jù)手冊武漢芯源MCU
    發(fā)表于 06-02 17:18 ?11次下載