【目的】
官方示例提供了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 += -lxxxxlink scriptLDSCRIPT = $(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 canadd his own implementation to report the file name and line number,
tex: printf("Wrong parametersvalue: file %s on line %d\\r\\n", 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
审核编辑:汤梓红
上一篇:世界热消息:中信证券:随着硅料价格见底 光伏行业排产将逐渐提升
下一篇:最后一页
X 关闭
-

2023-06-20
创建CW32L083GCC工程模板
-

2023-06-20
世界热消息:中信证券:随着硅料价格见底 光伏行业排产将逐渐提升
-

2023-06-20
全球快播:韩国首尔房价暴跌40%?韩国人表示问题不大
-

2023-06-20
皖通高速:6月19日融资买入56.19万元,融资融券余额3601.49万元
-

2023-06-20
今日热讯:平台返利竟成少数商家“空手套白狼”的生意
-

2023-06-20
今日精选:王者2023端午节有什么活动 王者荣耀端午节活动介绍
-

2023-06-20
环球速递!民雷路站 关于民雷路站介绍
-

2023-06-20
实时焦点:大运摩托车发动机是什么品牌(大运摩托车用什么发动机?)
-

2023-06-19
鼻梁在哪里?_鼻梁在哪里|全球关注
-

2023-06-19
曲阜万仞宫墙南广场区域实行分时段限行 市民游客注意|全球热推荐
-

2023-06-19
最新消息:【短讯】南向资金今日净流入超71亿:加仓中移动及小鹏汽车 抛售腾讯和美团
-

2023-06-19
华新手袋国际控股公布2023财年年度权益分配方案 全球快播
-

2023-06-19
辛巴辛选集团618顺利收官:增长60%,总带货量1.28亿件 环球观速讯
-

2023-06-19
后继有人!山东篮坛新星狂飙26分,2米16米淄博小伙新赛季亮相CBA
-

2023-06-19
【全球报资讯】淡淡粽叶香 浓浓警民情
-

2023-06-19
黄子佼爆料牵涉18位明星,4人选择起诉,好友出面劝他别想不开
-

2023-06-19
预计未来一周 强降雨和高温仍是我国天气两大“主角”
-

2023-06-19
过半美国人支持定罪后赦免特朗普 专家:凸显美国民众政治分裂
-

2023-06-19
上海生育津贴2023年最新发放标准 上海生育金怎么算能领多少?|环球新资讯
-

2023-06-19
巴克莱据悉扩大针对亚洲投资者的融资业务_每日讯息
-

2023-06-19
热点聚焦:余姚市成立文化赋能产业研究会
-

2023-06-19
腾讯云北京举办"行业大模型及智能应用技术峰会" 探讨智能化未来 天天微资讯
-

2023-06-19
北京菜百铂金多少钱一克(2023年06月19日)参考价格
-

2023-06-19
【环球报资讯】德国杯首轮抽签:拜仁将战德丙球队,多特战弱旅
-

2023-06-19
第二十一届中国国际城市建设博览会开幕 展示科技创新趋势 全球热闻
-

2023-06-19
名医大咖走进大众 华为智能生活馆全国四城开展“健康大讲堂”活动
-

2023-06-19
2023年南宁狂热派对音乐会座位图|天天即时看
-

2023-06-19
记者:老鹰和勇士有意杜克中锋莱夫利 得至少10号签才能选中他|环球看点
-

2023-06-19
雅思单词大全10000个_雅思单词大全 今日关注
-

2023-06-19
和远气体:目前电子特气项目建设正在抓紧推进 -每日快播

