返回列表 发新帖我要提问本帖赏金: 20.00元(功能说明)

[AT32L021] 【AT-START-L021测评】vscode+Cmake创建开发环境

[复制链接]
 楼主| lulugl 发表于 2024-12-19 09:46 | 显示全部楼层 |阅读模式
#申请原创# @21小跑堂

【前言】
AT32L021目前的开发有很多种可以选择,使用Keil 、IAR是传统的选择,官方提供了示例工程,大多也是基于Keil创建的。当然也可以使用AT32 IDE进行开发,高度的订制,使用起来也是非常的方便。这些都是可以在win、linux下可行的,但是基于mac os下面就不行了。雅特力官网也提供了vscode来搭建环境的教程,但是没有给出at32l021系列的源文件下载。所以我下大力气,搭建好了vscode + cmake的环境。现在分享如下:
【工具】
1、vscode
2、openocd
3、arm-none-eabi
4、cmake
5、AT32 IDE
6、AT32_Work_Bench_V1.1.03
具体的以上工具创建,网上例程非常多,这里不做详细讲解,但是在win下面需要在环境配置中进行配置。我这里的路径配置如下:
97802676372238a714.png
在这里需要注意一下,如果是自己安装好的openocd,他的目录里没有at32l02xx.cfg这个配置文件,会报错:Error: flash driver 'at32l0xx' not found
我的解决办法是后面安装了一下雅特力的AT32 IDE,这里他的安装目录里就有openocd,我直接把环境配置给了这个目录后,就解决问题了。
【移植步聚】
1、打开AT32_Work_Bench,创建一个基于at32l021的基础工程,在生成代码时选择生成eclipse_gcc。
61449676373f7b2846.png
2、使用vscode打开工程文件夹。创建CMakeLists.txt,其内容如下:
  1. #THIS FILE IS AUTO GENERATED FROM THE TEMPLATE! DO NOT CHANGE!
  2. set(CMAKE_SYSTEM_NAME Generic)
  3. set(CMAKE_SYSTEM_VERSION 1)
  4. cmake_minimum_required(VERSION 3.20)

  5. # specify cross compilers and tools
  6. set(CMAKE_C_COMPILER arm-none-eabi-gcc)
  7. set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
  8. set(CMAKE_ASM_COMPILER arm-none-eabi-gcc)
  9. set(CMAKE_AR arm-none-eabi-ar)
  10. set(CMAKE_OBJCOPY arm-none-eabi-objcopy)
  11. set(CMAKE_OBJDUMP arm-none-eabi-objdump)
  12. set(SIZE arm-none-eabi-size)
  13. set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)

  14. # project settings
  15. project(Project  C CXX ASM)
  16. set(CMAKE_CXX_STANDARD 17)
  17. set(CMAKE_C_STANDARD 11)

  18. #Uncomment for hardware floating point
  19. #add_compile_definitions(ARM_MATH_CM4;ARM_MATH_MATRIX_CHECK;ARM_MATH_ROUNDING)
  20. #add_compile_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)
  21. #add_link_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)

  22. #Uncomment for software floating point
  23. #add_compile_options(-mfloat-abi=soft)

  24. add_compile_options(-mcpu=cortex-m0 -mthumb -mthumb-interwork)
  25. add_compile_options(-ffunction-sections -fdata-sections -fno-common -fmessage-length=0)

  26. # uncomment to mitigate c++17 absolute addresses warnings
  27. #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-register")
  28. if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
  29.     message(VERBOSE "Maximum optimization for speed")
  30.     add_compile_options(-Ofast)
  31. elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
  32.     message(VERBOSE "Maximum optimization for speed, debug info included")
  33.     add_compile_options(-Ofast -g)
  34. elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "MinSizeRel")
  35.     message(VERBOSE "Maximum optimization for size")
  36.     add_compile_options(-Os)
  37. else ()
  38.     message(VERBOSE "Minimal optimization, debug info included")
  39.     add_compile_options(-Og -g)
  40. endif ()
  41. add_definitions(-DAT32L021C8T7 -DAT_START_L021_V1)

  42. #头文件包含
  43. include_directories(
  44.     ./project/inc
  45.     ./libraries/cmsis/cm0plus/core_support
  46.     ./libraries/cmsis/cm0plus/device_support
  47.     ./libraries/drivers/inc

  48. )
  49. # c文件
  50. file(GLOB_RECURSE SOURCES
  51.     ./project/src/*.c
  52.     ./libraries/drivers/src/*.c
  53.     ./libraries/cmsis/cm0plus/device_support/*.c
  54.     ./project/Eclipse_gcc/AT32L021x8_FLASH.ld
  55.     ./project/Eclipse_gcc/startup_at32l021.s

  56. )

  57. set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/project/Eclipse_gcc/AT32L021x8_FLASH.ld)

  58. add_link_options(-Wl,-gc-sections,--print-memory-usage,-Map=${PROJECT_BINARY_DIR}/${PROJECT_NAME}.map)
  59. add_link_options(-mcpu=cortex-m0 -mthumb -mthumb-interwork)
  60. add_link_options(-T ${LINKER_SCRIPT})

  61. add_link_options(-specs=nano.specs -specs=nosys.specs -u _printf_float)

  62. add_executable(${PROJECT_NAME}.elf ${SOURCES} ${LINKER_SCRIPT})

  63. set(HEX_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex)
  64. set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin)

  65. add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD
  66.         COMMAND ${CMAKE_OBJCOPY} -Oihex lt;TARGET_FILE:${PROJECT_NAME}.elf> ${HEX_FILE}
  67.         COMMAND ${CMAKE_OBJCOPY} -Obinary lt;TARGET_FILE:${PROJECT_NAME}.elf> ${BIN_FILE}
  68.         COMMENT "Building ${HEX_FILE}
  69. Building ${BIN_FILE}")
这个文件主要是要把所需要包含的头文件、.c源文件、ld、.s添加进来,以后工程需要增加文件,在这两个目录添加路径就行了。
配置好CMakeLists.txt后,保存,系统就可以自动生成build文件夹。
【配置文件】
在文件夹内增加lunch.json来添加调试的配置文件:
  1. <div style="color: rgb(204, 204, 204); background-color: rgb(31, 31, 31); font-family: Consolas, &quot;Courier New&quot;, monospace; font-size: 14px; line-height: 19px; white-space: pre;"><div>{</div><div>    <span style="color: #6a9955;">//"version": "0.2.0",</span></div><div>    <span style="color: #9cdcfe;">"configurations"</span>: [</div><div>        {</div><div>            <span style="color: #9cdcfe;">"cwd"</span>: <span style="color: #ce9178;">"${workspaceRoot}"</span>,</div><div>            <span style="color: #9cdcfe;">"type"</span>: <span style="color: #ce9178;">"cortex-debug"</span>,</div><div>            <span style="color: #9cdcfe;">"request"</span>: <span style="color: #ce9178;">"launch"</span>,</div><div>            <span style="color: #9cdcfe;">"name"</span>: <span style="color: #ce9178;">"openocd-launch"</span>,</div><div>            <span style="color: #9cdcfe;">"armToolchainPath"</span>: <span style="color: #ce9178;">"C:/gcc-arm-none-eabi/bin"</span>,</div><div>            <span style="color: #9cdcfe;">"gdbPath"</span>: <span style="color: #ce9178;">"C:/gcc-arm-none-eabi/bin/arm-none-eabi-gdb.exe"</span>,</div><div>            <span style="color: #9cdcfe;">"interface"</span>: <span style="color: #ce9178;">"swd"</span>,</div><div>            <span style="color: #9cdcfe;">"servertype"</span>: <span style="color: #ce9178;">"openocd"</span>,</div><div>            <span style="color: #9cdcfe;">"configFiles"</span>: [</div><div>                <span style="color: #ce9178;">"D:/AT32IDE/OpenOCD/scripts/interface/atlink.cfg"</span>,</div><div>                <span style="color: #ce9178;">"D:/AT32IDE/OpenOCD/scripts/target/at32l021xx.cfg"</span>,</div><div>            ],</div><div>            <span style="color: #9cdcfe;">"executable"</span>: <span style="color: #ce9178;">"./build/Project.elf"</span>,</div><div>            <span style="color: #9cdcfe;">"svdFile"</span>: <span style="color: #ce9178;">"./project/misc/AT32L021xx_v2.svd"</span>,</div><div>            <span style="color: #9cdcfe;">"runToEntryPoint"</span>: <span style="color: #ce9178;">"main"</span>,</div><div>        },</div><div>    ]</div><div>}</div></div>
这里的AT32L021xx_v2.svd需要从AT32IDE的工具里面复制出来。他的目录是在D:\AT32IDE\repo\SVD下面
31884676377a4843f0.png
编写下载任务:
  1. {
  2.     // See https://go.microsoft.com/fwlink/?LinkId=733558
  3.     // for the documentation about the tasks.json format
  4.     "version": "2.0.0",
  5.     "tasks": [
  6.         {
  7.             "label": "build",
  8.             "type": "shell",
  9.             "command": "make",
  10.             "args": [
  11.                 "-j12"
  12.             ],
  13.             "problemMatcher": []
  14.         },
  15.         {
  16.             "label": "clean",
  17.             "type": "shell",
  18.             "command": "make",
  19.             "args": [
  20.                 "clean"
  21.             ],
  22.             "problemMatcher": []
  23.         },
  24.         {
  25.             
  26.             "label": "download code",
  27.             "type": "process",
  28.             "command": "openocd",
  29.             "args": [
  30.                 "-f",
  31.                 "D:/AT32IDE/OpenOCD/scripts/interface/atlink.cfg",
  32.                 "-f",
  33.                 "D:/AT32IDE/OpenOCD/scripts/target/at32l021xx.cfg",
  34.                 "-c",
  35.                 "program build/Project.hex",
  36.                 "-c",
  37.                 "program build/Project.elf verify reset exit"
  38.             ],
  39.             "group": "build"
  40.         }
  41.     ]
  42. }
"label": "download code任务,主要是指定at32l021xx.cfg、atlink.cfg、Project.hex的路径。
c_cpp_properities.json:
  1. {
  2.     "configurations": [
  3.         {
  4.             "name": "Win32",
  5.             "includePath": [
  6.                 "${workspaceFolder}/**"
  7.             ],
  8.             "defines": [
  9.                 "_DEBUG",
  10.                 "UNICODE",
  11.                 "_UNICODE"
  12.             ],
  13.             "compilerPath": "C:\\gcc-arm-none-eabi\\bin\\arm-none-eabi-gcc.exe",
  14.             "cStandard": "c17",
  15.             "cppStandard": "gnu++14",
  16.             "intelliSenseMode": "gcc-arm",
  17.             "configurationProvider": "ms-vscode.cmake-tools"
  18.         }
  19.     ],
  20.     "version": 4
  21. }
这样所有的工程就解了,点击“生成”就可以编译固件:
3190067637910bcff7.png
运行任务openocd-lauch就可以进入调试:
5605367637964c7f85.png
【总结】
在雅特力的官网有如何使用vscode创建开发环境的教程,使用的是makfile来编写,我这次使用的是Cmake来创建,相比makeflile,Cmake相对比较简单一些。
经过差不多一个星期的学习,多次试验,终于把AT32L021在vscode 下的环境创建好了。这里也给雅特力的技术支持提个建议,把他的.cfg、svd.s也打包出来,方便vscode + Cmake(makefile)的用户来创建环境。
这次环境创建好后,可以方便的在linux、macOS跨平台进行开发,是非常有意义的!
附工程源码: AT32L021C8T7_LED1.zip (1.57 MB, 下载次数: 5)

打赏榜单

ArterySW 打赏了 20.00 元 2024-12-19
理由:内容优秀

梦境漫游者 发表于 2024-12-19 09:58 | 显示全部楼层
感觉比keil上配置麻烦

评论

[url=home.php?mod=space&uid=1550954]@lulugl[/url] :仿真比不上keil不能实时看变量数值  发表于 2024-12-19 18:41
如果用熟悉了,比keil方便N倍,唯一的缺点是他编出来的固件要大一些  发表于 2024-12-19 14:12
qinlu123 发表于 2024-12-19 18:47 | 显示全部楼层
我们现在用vscode + PIO来开发stm32基本就放弃仿真功能了太难用
WoodData 发表于 2024-12-20 10:22 | 显示全部楼层
学习学习
 楼主| lulugl 发表于 2024-12-20 15:49 | 显示全部楼层
qinlu123 发表于 2024-12-19 18:47
我们现在用vscode + PIO来开发stm32基本就放弃仿真功能了太难用

调试还是需要的。
小宏121 发表于 2024-12-30 16:36 | 显示全部楼层
大佬,请问一下,我这边能够生成成功,但是点击openocd-launch会报图片中错误,请问要怎么解决,我百度了也没有找到解决思路 14224.jpg


评论

我仔细 看了你的报错信息,最好先把基础环境配置好,确认编译器等安装好,对应的路径设置正确  发表于 2024-12-30 21:08
石头君 发表于 2024-12-31 16:48 | 显示全部楼层
我用的是vscode+EIDE,感觉还行
您需要登录后才可以回帖 登录 | 注册

本版积分规则

180

主题

830

帖子

12

粉丝
快速回复 在线客服 返回列表 返回顶部