你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用VSC调试STM32

[复制链接]
wofei1314 发布时间:2017-9-3 00:52
经过几天的摸索(是我自己愚钝),终于实现了使用VSC调试,实例程序是点灯(菜鸟的第一课是不是永远是点灯啊,)....9 H2 z! _2 n! K& s/ K) {8 d2 g

7 q8 i9 P2 i1 I% R+ D3 o废话不多说,下面开始本次探索的简单介绍,不详细或者遗漏的地方,需要等朋友跟帖,我会把我知道的分享给大家:)& d# k4 {. W- `$ Y+ f$ f
" V4 k" H. x( t
第一步,下载安装VS Code,不知道的同学问度娘,我这里就不啰嗦了,直接附上官网下载地址
0 B9 z: y6 E1 E! \7 l点我下载 X64 1.15.1  其它版本请移步官网根据需求下载5 e/ S& @' x- ~+ k2 M: N# I

8 p& ?/ R( D3 ?& y9 q6 I第二步,安装PlatformIO IDE,具体过程,先打开vscode,然后点插件->搜索->安装
7 {1 T% x# j$ R) k2 B9 t3 V jc1.jpg
9 |* N7 a2 i8 k8 {( b. l2 g$ N
) j; `5 S* G- P+ h# g  J2 [第三步,重启VSC,然后就可以建立工程了,在本地任意位置新建文件夹(也可以是已经存在的,测试嘛,最好是空文件夹),然后记录路径
% O6 O5 Q8 b9 q. n( P使用VSC->文件->打开文件夹
5 u: v. g7 @, e) h" g. H9 g1 [9 T4 T( N! H; R- |
第四步,使用快捷键 ctrl+alt+i  初始化目录4 t# d+ ]1 ^# X0 M- D4 ^" [8 p, n

. T$ ~+ t/ s( a; t8 K4 }: g第五步,选择一个已经存在的板子,我是自己画的  单片机型号是STM32F072C8(搜我的帖子,开源串口调试工具),就是这块板子,但Platform不会有它的,所以我选择的是nucleo_f072rb
3 x$ o2 I. j4 d+ I6 x# Z
$ V; P$ T. d% m' K第六步、新建文件,在src文件夹路径下右键,新建文件main.c/ |3 s8 R9 R% y3 B, V
jc2.jpg % H6 T7 B7 h# v! k: }. A
7 b, w( j% P- q; o* T$ i  i
第七步、打开main.c,添加代码
2 H: a7 n7 U! ~5 G3 h' n! j
1 y9 {* F, y* y# b" u( Q+ b1 a6 l#include "stm32f0xx_hal.h"
) y% F, x( k6 {0 L  W% P& m
, j  I& T# m* C( i  |' V8 ]& W; g3 l' U6 Q#define LED_PIN GPIO_PIN_13
* R4 U' [5 i, c( j1 m, N* G% k) j#define LED_GPIO_PORT GPIOC
) v% P" ^( ?, Y- i  I( z8 i#define LED_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()" j- ^% h% L. e& d9 {
  G1 s* C* B" J
void LED_Init();
! o) k: Y. b% A# i" V" G
7 M* P& r7 v  o: P$ j# ?( i5 Sint main(void)! Z9 e" v! M: Z4 `3 E9 s8 u; M
{
: ^- G7 y3 Z# z6 @" |  HAL_Init();
% b9 d! }3 d) }- ~/ ]  SystemClock_Config();
4 u+ d+ n8 i# t$ ~8 i  u6 U1 T  LED_Init();: W! U/ k4 Q  l1 }$ p7 d

+ u: U" b% P( y7 D  while (1)
% z7 u, K7 K/ B! a. Q$ r  {, n! I. j& F7 k" g! y
    HAL_GPIO_TogglePin(LED_GPIO_PORT, LED_PIN);
; i  W3 @3 i/ T& r    HAL_Delay(1000);5 G- X' m* |1 Q5 x- a5 l+ g, Y" k) v
  }
1 e6 g2 _+ _, n4 x$ u}
, _% l) H: d1 p% d1 u/** System Clock Configuration
5 E! P7 P, [  H3 Z6 V% U*/
0 m3 Z  ?" n( Qvoid SystemClock_Config(void)' I1 C7 w0 b) g- X+ o) f# }
{
: O2 J& |3 m  M5 w# A- Q% c3 \
; _% x6 \6 p1 a% b/ a  RCC_OscInitTypeDef RCC_OscInitStruct;6 u* l- ~9 B3 j, t1 O
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
; o  |/ m. B& z6 X& S  RCC_PeriphCLKInitTypeDef PeriphClkInit;
, h$ b5 S$ P, z( ^$ c
( f* k1 o' A( ^8 B    /**Initializes the CPU, AHB and APB busses clocks 0 Z( ?$ w# w0 V. n! ?
    */0 |# S& W: n2 J' ~6 o, M
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48;# Z9 h$ [3 J% Y0 _! \' K+ x
  RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
' ~. y+ S* V) g+ J  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
, p, z+ L7 f  ~8 l  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
. V) O3 M) w7 x; S1 n8 W  {
7 l% S1 K: h. `$ l    //_Error_Handler(__FILE__, __LINE__);
2 ?# q, s6 U" a  }
  U* D% c$ P+ [/ a; s" _- \, ~) K1 @: P
    /**Initializes the CPU, AHB and APB busses clocks
- q/ J& J5 P- U( ?- R# X, n" _    */! w, R, P9 H3 P6 v" ~& `7 ?
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK& c0 P/ r0 d0 y% J
                              |RCC_CLOCKTYPE_PCLK1;2 s* e; O: k: h% W3 |2 X% `$ o
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI48;8 J5 F7 ]  r* z# E6 s& O% l
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
, u) k) U1 K/ F, N& \$ n  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;! a2 q, a8 E) ]

) A0 Z9 \' d2 c+ [$ n/ o1 _  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
9 h9 }2 G6 G* i0 }' Q" s( g  {& ^8 l& k. Q, o0 s; W7 g2 C" L9 |
    //_Error_Handler(__FILE__, __LINE__);6 z" }, o0 w9 w1 \& J) ?3 H9 K
  }
& i1 ^+ A  z; F& `4 F/ a' s6 F  J) q0 ^# r6 j
  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB|RCC_PERIPHCLK_USART1
& S9 q' ^! J2 d                              |RCC_PERIPHCLK_USART2;
9 N0 }0 I. T1 u( ?* G% Q  PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1;0 `+ c+ w$ F5 b/ z, `' |- s( N; m
  PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;( V! s" [* ^# ~. u2 G
  PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;
2 M, @0 Y- T, f+ ^8 o, a9 C
* c  L' Q# H4 P" c) [  if (HAL_RCCEx_PeriphCLKConfig(&eriphClkInit) != HAL_OK)9 P( U$ l* L2 z) ~3 ^/ p
  {
$ P- s$ y0 _1 v+ n6 c/ C6 X& n    //_Error_Handler(__FILE__, __LINE__);
7 f3 G( i5 r5 \  }2 P* b+ h# x- a' d( q! G2 u

- P; P/ @9 |$ F6 ]% P5 C) u    /**Configure the Systick interrupt time 7 c  B3 t* a' `5 G8 x0 D9 `: J$ [
    */
9 B0 C- I  W# `+ F* J7 B1 b, Q  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
4 p, X; p# C' L4 K9 p( A* D* F. c- x( y. ]% h3 \
    /**Configure the Systick
6 g( r; f4 O5 V, O' b3 M4 Y    */; X$ i6 B; c, U5 R. f
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);& B0 q4 b8 y$ {. [- E% {4 o5 I
% S) A5 P6 \' ~
  /* SysTick_IRQn interrupt configuration */
, j: O8 ]( }. T2 @4 C: D  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
, z3 F6 J% [" r5 a3 S0 p7 o$ O}# G9 z! I! k. v. |/ `" Z! p9 l
& ?) v# y8 [2 J! D
void LED_Init(); h: \0 Q1 x  e
{9 J% p5 h$ L9 C/ H; X, n  l
  LED_GPIO_CLK_ENABLE();/ [. x3 U/ g4 ~( C! C0 o2 ?
  GPIO_InitTypeDef GPIO_InitStruct;- |& D) w& P( e0 M( O. U+ s
  GPIO_InitStruct.Pin = LED_PIN;
, y3 V5 s- k. N; F* g; z  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;$ h6 b: G) G4 o5 N8 w1 f
  GPIO_InitStruct.Pull = GPIO_PULLUP;
5 i+ ?! T/ G: S) u1 f  I5 K  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
1 n& h, v( q  R  HAL_GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);- k6 ^2 W+ u1 K( b  \+ U0 ^4 _
}
6 Y% w% C4 F) X" ?: R9 X- r  T; i" U  y4 [! @- ~! L
void SysTick_Handler(void)5 k/ {3 g* L) N. x& j* x
{
) h  H) l# e. f/ @. E  HAL_IncTick();
* ?: F7 G2 ?) J$ l7 h) v}9 E( z" m1 ]  s9 V; E1 W

# p: H; j# \  {7 K" E/**
/ w; [5 v" _; [5 e* @brief This function handles Hard fault interrupt.5 c' E) i9 ]4 R4 r
*/3 G0 p1 v% h6 q+ N0 v
void HardFault_Handler(void)# c8 @* c7 ~  U" x4 W  U
{; D/ f/ @7 a) n6 T
  /* USER CODE BEGIN HardFault_IRQn 0 */! l1 {- k1 `* g- K# r6 v

9 U/ @" ?0 C' }5 }* ^0 c! ]; W; R9 }  /* USER CODE END HardFault_IRQn 0 */
% d+ ?3 `$ U2 d2 `2 U3 W3 p2 i, y  while (1)
. j: B. F1 e8 [7 r' Q6 E7 O7 _  {- ^3 V( I: f2 ]5 ]
  }0 p5 U/ Y) G6 Y% S) D# F
  /* USER CODE BEGIN HardFault_IRQn 1 */
" T, s7 `) j- K( Y
' h- l8 ]6 }5 b7 d( r2 I  /* USER CODE END HardFault_IRQn 1 */
5 y% ^6 x1 m/ B; R8 R}, P  B) J/ H: D; O' g
8 x& t" T: m1 c# U/ G  G
7 R7 p) B$ b) x

7 \- ]3 J9 q6 ~+ e0 i) Q* x  u
6 j- j! y# s" W# @4 p) R/ n. z, @第八步、修改Platform.ini 配置文件,设置Jlink仿真器+ x  V* W- k: @! a" u8 l
[env:jlink_debug_and_upload]
5 U. e- D2 `+ P$ X& y3 Cplatform = ststm32) J6 K; H0 u$ y" s, U
framework = stm32cube" I) C+ \1 B' t- ?- `2 F4 ]
board = nucleo_f072rb- ?7 ~8 K3 o9 c3 m4 m, b, G. ^
debug_tool = custom4 V- Y" l1 A; Q; ^% J, r
debug_port = :2331/ e8 u8 T7 I" H5 m7 Y
debug_server = JlinkGDBServerCL
7 L6 _- q2 s1 t3 M! O    -singlerun4 Q- t& L( J/ p
    -if
9 k# b& ]; o$ T% ]    SWD- ]- u7 a8 @* `  B7 }5 |. S, Y1 x
    -select
: }$ k( G/ k) g3 a: R4 C  Z/ n& M    USB
6 w/ G% X) v4 j& p    -port
! x" F0 L4 u+ r$ j& M    2331
; W2 [' K2 K) L4 s4 q3 V8 J    -device
; [2 K! \% T1 x; L    STM32F072c8: M7 j5 ~$ Q) S' E; p' x

- i" w, J0 t1 v5 s
4 _3 G4 l9 l) i0 V2 C
1 Y7 {5 |7 `  i$ N, |* v% J# k6 m
第九步、编译文件,使用快捷键 ctrl+alt+b  编译,编译成功,会有提示2 M$ x5 K6 p# z4 E  z7 H3 E

, w9 A8 J0 H9 T9 b5 G/ y" ?& Z我只截取最下面一部分4 _+ b, e) G" K4 E: P2 R& q/ q1 Y
Calculating size .pioenvs\jlink_debug_and_upload\firmware.elf
! ^3 C/ n& m# O8 [# CBuilding .pioenvs\jlink_debug_and_upload\firmware.bin
5 S7 d+ ], H1 r: R! Qtext       data     bss     dec     hex filename
( t" }& n: T6 b+ a7 e) b3852       1080    1568    6500    1964 .pioenvs\jlink_debug_and_upload\firmware.elf: i  @1 x4 v! X, }4 L0 ^# n
============================================== [SUCCESS] Took 9.26 seconds ==============================================
- h- n" B, ]( A5 N' S6 x+ ]: N1 s: p8 N+ b

) l5 S5 F+ a- |6 Q6 W" ?第十步,调试,,快捷键 F5启动1 U/ m9 c- G' N  f; q% `2 v
# M8 e2 c* q" B6 C5 H# f
jc3.jpg / o* ~+ r) i1 S1 B) Y: N$ W; L

( H0 {" C+ |: w* Q8 ~可以单步调试,可以F5运行,断点会显示在左侧
! Z$ _+ l+ M% H& C3 e/ M- G7 d3 c1 H5 z2 p
深夜发帖,有些困,有的地方写的不好,请大家谅解,有问题跟帖....
$ G  N* F4 ~* L8 s! C$ p7 O1 ]: c, E  {
. G# k+ x. L2 u! a$ P5 q% m+ N

: b5 H% B+ {9 Z. E  p; {2 @8 z+ y- ]9 l" G$ N+ d: J

5 S. \* \6 |/ X- }8 ?+ o
收藏 2 评论16 发布时间:2017-9-3 00:52

举报

16个回答
kylongmu 回答时间:2017-9-4 17:19:43
本帖最后由 kylongmu 于 2017-9-4 17:25 编辑 # ^5 A+ R" @2 ?/ E( r$ F2 H2 k
6 L: p5 J) h' E, c' A' e& f
今天跟踪试验了一把:
. v- b( p5 X& y无法打开“PIO Home”: Could not start PIO Home server: Error: timeout。
/ ^# o0 s4 p7 d3 T. C又是被墙,只能按楼主的快捷键组合操作,不能按官网的有菜单指导http://docs.platformio.org/en/latest/ide/vscode.html#quick-start
4 `' z7 ^! L3 v& g+ U- K' [另外debug配置还得自己写J-Link参数,工程只能建立官网提供的板子。
8 l: m" ~6 Y. m9 D; m开发者注意力都不在MCU功能上,而是维护工程文件上面。! {1 E7 X" y, k. g' p
PIO的价格,基本用户每月每人$10。http://platformio.org/pricing
* Q& M( b4 a" q5 P# U3 b国内用户洗了睡吧,就算你交得起钱也会被墙,开发时还得自己维护整个工程文件。
. Y8 u4 a, D. M+ Z4 K
wofei1314 回答时间:2017-9-5 09:10:31
kylongmu 发表于 2017-9-4 17:19- t9 t/ I$ N" R) P5 Z
今天跟踪试验了一把:
& ]4 M& a( X3 m1 Y- B无法打开“PIO Home”: Could not start PIO Home server: Error: timeout。9 L% k8 A/ c% A" v* X6 \
又是被 ...
; ?' m- r% Q# q, }' C
你看的好详细,我都没发现收费...; i2 o! T" F' I- Y* T" _

0 H2 g1 C  v) k6 D$ H说来惭愧啊...$ F: \* x" N* B. d

1 c) [* H) G' g% _; y看了以后可能只能用VSC编辑了1 {: ^1 Q9 u, k9 J
& l( ~1 ?( b* n& R. ~& k' @
不知道插件开发难不难,要是自己写个插件调用gcc编译的话就好了
wofei1314 回答时间:2017-9-13 10:34:41
any012 发表于 2017-9-13 09:44% N* ^( S: q7 _$ ?3 J" X9 p. H' v8 j
http://platformio.org/pricing! o  y9 I( h" f6 F7 P6 v
社区版不收费吧,9美元/月的是基本版。
9 g8 M: j9 W2 w/ o1 _
我就是探索了下,社区版本有限制,现在又更新了,反正多了一个选择就是...
wofei1314 回答时间:2017-9-3 00:54:18
本帖最后由 wofei1314 于 2017-9-3 01:04 编辑
& e2 q; k: U" `
7 C/ n' V2 i" x* v2楼留给自己,
5 d! D( i1 B4 F5 P9 y! T附上完整工程    platformTest.rar (11.69 MB, 下载次数: 72)
@乔木 回答时间:2017-9-3 08:06:46
值得学习
Paderboy 回答时间:2017-9-3 08:49:08
帅。。。。
epochal 回答时间:2017-9-3 09:35:39
谢谢分享!
kylongmu 回答时间:2017-9-3 22:43:46
不错,等待持续进化。
五哥1 回答时间:2017-9-4 00:29:50
值得学习
andey 回答时间:2017-9-4 13:09:09
提示: 作者被禁止或删除 内容自动屏蔽
any012 回答时间:2017-9-4 13:44:32
额,需要电脑上有MDK软件吗?
wofei1314 回答时间:2017-9-4 13:57:19
any012 发表于 2017-9-4 13:44
+ h5 i% i2 Z$ N$ ?! t额,需要电脑上有MDK软件吗?

: s& @( D* M7 d2 D+ K" D9 K不需要,只要VSC+plarformIO IDE插件和STLink驱动或者Jlink驱动...
harvardx 回答时间:2017-9-4 14:39:06
楼主最近在qqqun 和jianshu都推广甚多.. 支持一下vsf  ,不觉明历
wofei1314 回答时间:2017-9-4 15:33:30
harvardx 发表于 2017-9-4 14:394 I3 G" S) B: x$ X1 b4 |
楼主最近在qqqun 和jianshu都推广甚多.. 支持一下vsf  ,不觉明历
2 d. `  ~) i9 g# f2 z% @, O. C
被你发现了...
反派小智 回答时间:2017-9-6 08:47:13
谢谢分享,这个不错
12下一页

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版