0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

创建CW32L083GCC工程模板

华仔的编程随笔 来源:华仔的编程随笔 作者:华仔的编程随笔 2023-06-20 09:03 次阅读

【目的】

官方示例提供了MDK、IAR的示例,也提供了以上两个环境的工程模板,但是没有GCC的工程模板,GCC编译环境与MDK、IAR主要区别就是C语言启动环境的配置、链接文件的不一至,因为要实现VScode或者其他的编译器来实现开发环境的搭建,就需要自己编写CW32L083_FLASH.ld、以及startup_cw32l083_gcc.s。

【实现的思路】

1、寻找官方支持,我在CW32生态群里发了求助的信息,没有回复。

2、在淘宝客服,咨询,回复说,没有工程。

3、有大佬提供了CW32F030的工程,我了解到CW32F030与CW32L083一样是CortexM0+的内核,所以想他的启动文件跟LD应该可以相互借鉴。所以偿试修改CW32F030的工程来实现GCC的工程。

【实现步骤】

1、拷贝一份工程,另存为cw32l083_gcc,并用vscode打开。

2、到官网下载cw32l083的固件库。

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

4、复制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。并把其文件内的cwf030修改为cw32l083.

8、复制l083固件库中的cw32l083-stdperiph-lib/IdeSupport/MDKWHXY.CW32L083_DFP.1.0.8.pack 到Debug/WHXY.CW32L083_DFP.1.0.8.pack,并删除原来的.pack文件。

9、复制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文件内容,主要是文件夹的名称重新定位。

模块名_DIR 是上一层传递下来的参数

是从工程根目录到该模块文件夹的路径

向 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 中添加静态库文件路径

LIBDIR += -L$(Libraries_DIR)/Lib

向 LIBS 中添加需要链接的静态库

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))

到此,工程修改就结束。

编译后无警告无错误:

[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针脚,内容如下:

#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();

// 开启两线调试接口

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 */

编译下载,就可以实现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]

【总结】

经过N次的试验,终于成功的实现了cw32l083的gcc工程模版的创建。使得在linux、macOS环境下不能用MDK、IAR的难题。

附工程模版:

*附件:cw32l083_gcc.zip

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136787
  • IAR
    IAR
    +关注

    关注

    5

    文章

    351

    浏览量

    36674
  • 编译器
    +关注

    关注

    1

    文章

    1634

    浏览量

    49128
  • 开发环境
    +关注

    关注

    1

    文章

    225

    浏览量

    16617
收藏 人收藏

    评论

    相关推荐

    基于CW32L083的线控器方案设计

    基于武汉芯源推出的CW32L083设计的空调线控器产品.
    的头像 发表于 06-25 14:23 13.9w次阅读
    基于<b class='flag-5'>CW32L083</b>的线控器方案设计

    CW32L083 RTC初始化设置

    介绍CW32L083的RTC初始化设置
    的头像 发表于 06-24 10:16 1543次阅读
    <b class='flag-5'>CW32L083</b> RTC初始化设置

    基于CW32L083的空调遥控器方案设计

    基于武汉芯源半导体推出的CW32L083而设计的的空调遥控器方案
    的头像 发表于 06-21 16:03 1529次阅读
    基于<b class='flag-5'>CW32L083</b>的空调遥控器方案设计

    首创ubuntu下cw32l031的vscode+gcc工程创建、下载、调试

    首创在ubuntu下面用vscode实现cw32l031的gcc工程创建、编译、下载与调试
    的头像 发表于 06-25 21:49 2.4w次阅读
    首创ubuntu下<b class='flag-5'>cw32l</b>031的vscode+<b class='flag-5'>gcc</b><b class='flag-5'>工程</b><b class='flag-5'>创建</b>、下载、调试

    【Ubuntu VSCODE+GCCCW32L031实现printf工程

    CW32L031在ubuntu系统下面实现GCC,驱动UART,实现printf工程
    的头像 发表于 06-28 17:07 1076次阅读
    【Ubuntu VSCODE+<b class='flag-5'>GCC</b>】<b class='flag-5'>CW32L</b>031实现printf<b class='flag-5'>工程</b>

    移植RT-Thread nano到CW32L083

    移植RT-Thread Nano到CW32L083开发板上,并成功运行。
    的头像 发表于 07-03 09:04 2.2w次阅读
    移植RT-Thread nano到<b class='flag-5'>CW32L083</b>

    分享武汉芯源CW32L083VxTx_StartKit开发板资料

    CW32L083_StandardPeripheralLib_V1.9.zip 以上所有的资料都是中文的,工程里有.pack包、有各个外设的驱动示例。是学习该款芯片开发的好资料。
    发表于 06-08 10:00

    首创CW32L083GCC工程模版

    [loader] 【总结】 经过N次的试验,终于成功的实现了cw32l083gcc工程模块的创建。使得在linux、macOS环境下不能用MDK、IAR的难题。*附件:
    发表于 06-19 22:17

    ubuntu下面用vscdoe实现CW32L031的工程创建、编译、下载与调试

    GCC工程模版。现在将移植的过程与结果分享如下: CW32L031与CW32L083同属arm-cortex-M0+系列,通对比MDK下的启动汇编程序,发现除flsh与内存大小不同之
    发表于 06-25 21:13

    CW32L083产品介绍

    CW32L083是一款基于eFlash的单芯片低功耗微控制器,集成了ARM®Cortex®-M0+ 核心,主频高达64MHz,高速嵌入式存储器(高达256K字节的FLASH和 高达24K字节
    发表于 09-14 06:41

    CW32L083段码屏驱动

    CW32L083开发板上有8个段码LCD显示,使其显示为0-9数字。
    的头像 发表于 06-18 09:13 18.1w次阅读
    <b class='flag-5'>CW32L083</b>段码屏驱动

    武汉芯源CW32L083开发板介绍

    CW32L083VxTxStartKit评估板为用户提供一种经济且灵活的方式使用CW32L083VxTx芯片构建系统原型,可进行性能、功耗、功能等各方面快速验证
    的头像 发表于 10-20 11:41 894次阅读
    武汉芯源<b class='flag-5'>CW32L083</b>开发板介绍

    CW32L083实现SHT30驱动

    CW32L083驱动SHT30,并显示到LCD屏上。
    的头像 发表于 06-22 09:57 3090次阅读
    <b class='flag-5'>CW32L083</b>实现SHT30驱动

    CW32L083如何实现AUTOTRIM时钟校准?

    CW32L083如何实现AUTOTRIM时钟校准?
    的头像 发表于 11-07 17:17 641次阅读
    <b class='flag-5'>CW32L083</b>如何实现AUTOTRIM时钟校准?

    【威廉希尔官方网站 手册】CW32L083RC数据手册

    武汉芯源半导体CW32L083RC数据手册武汉芯源MCU
    发表于 06-02 17:18 11次下载