OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4007|回复: 1

使用VSCODE+LLVM工具链进行STM32的开发

[复制链接]

7

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2017-9-16
在线时间
80 小时
发表于 2020-2-13 16:45:43 | 显示全部楼层 |阅读模式
我们需要的工具主要有:
  • 带有ARM后端的LLVM
  • Clang
  • Compiler-RT
  • CMSIS以及对应驱动
  • 其他工具
由于是裸机开发,因此对于C的标准库仅有有限的支持。以F7为例,目标平台是arm-none-eabi,使用硬浮点。具体选项我整理成了一个cmake的toolchain file,可以在这里查看

首先是使用CMake配置并交叉编译Compiler-RT,可以参考官方文档。在编译过程中,会需要一些标准库中assert.h,stdlib.h等,这里可以只给出声明,不给实现,使用的CMake选项主要有:
  • COMPILER_RT_OS_DIR="baremetal"
  • COMPILER_RT_BUILD_BUILTINS=ON
  • COMPILER_RT_BUILD_SANITIZERS=OFF
  • COMPILER_RT_BUILD_XRAY=OFF
  • COMPILER_RT_BUILD_LIBFUZZER=OFF
  • COMPILER_RT_BUILD_PROFILE=OFF

构建完成后,可在lib/baremetal目录中找到libclang_rt.builtins-arm*.a,该文件的结尾与具体的目标有关。

之后便可以使用Clang对程序编译,链接后即可通过OpenOCD进行调试。


在VScode中,我们需要的主要插件是Cortex-Debug配合launch.json对开发板调试。launch.json主要内容为:
launch.png
其中“servertype”与你使用的调试器有关,这里使用的是OpenOCD。"swoConfig"是配置ITM端口,使得单片机在使用SWD的情况下进行IO(即不使用串口,直接使用ST-Link或JLink就可以实现IO)。我们这里启用端口0。"cpuFrequency"与单片机频率一致,图片中的配置会将ITM的输出显示在控制台上。
"svdFile" 保存了单片机的各种外设信息,用于查看外设寄存器的状态
"executable"就是需要的可执行文件
相应的,单片机也要使能ITM的相关功能。
  1. #include "core_cm7.h"

  2. void ITM_Init(void) {
  3.   ITM_LAR = ITM_LAR_ACCESS; // unlock
  4.   ITM_TCR = 0x1;            // global enable for ITM
  5.   ITM_TPR = 0x1;            // first 8 stim registers have unpriv access
  6.   ITM_TER = 0xF;            // enable 4 stim ports
  7.   DEMCR = TRCENA;           // global enable DWT and ITM
  8. }
复制代码
以上代码使能了单片机的ITM功能,配合ITM_SendChar函数即可实现字符输出。效果如下:
t.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2019-5-26
在线时间
2 小时
发表于 2020-3-3 23:45:33 | 显示全部楼层
我也用类似的方法配置了VSCode,可是全局变量无法实时更新,请问你的可以嘛?还有我的__weak 提示错误,你的有没有啊?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-7 20:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表