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

使用VSC调试STM32

[复制链接]
wofei1314 发布时间:2017-9-3 00:52
经过几天的摸索(是我自己愚钝),终于实现了使用VSC调试,实例程序是点灯(菜鸟的第一课是不是永远是点灯啊,)....7 s% M% L; A6 Z) A5 _

. X( x4 t7 C% d! P6 N2 n* w废话不多说,下面开始本次探索的简单介绍,不详细或者遗漏的地方,需要等朋友跟帖,我会把我知道的分享给大家:)
6 e, a8 E/ `" k) o; L
3 t4 b1 z( V8 v! J  v7 X- w5 |第一步,下载安装VS Code,不知道的同学问度娘,我这里就不啰嗦了,直接附上官网下载地址; F' ~2 Q! m: d% `
点我下载 X64 1.15.1  其它版本请移步官网根据需求下载
' Y6 r. N& f& o/ j2 F6 t0 [! p: w+ @- ?! |9 u" ^9 c) s6 y- s
第二步,安装PlatformIO IDE,具体过程,先打开vscode,然后点插件->搜索->安装
; R# `) C  W! V: r; }3 S jc1.jpg " _+ K) [6 R6 T; `# k' j
1 i2 G* M" U( Z0 G9 [% [6 `6 b  b
第三步,重启VSC,然后就可以建立工程了,在本地任意位置新建文件夹(也可以是已经存在的,测试嘛,最好是空文件夹),然后记录路径
6 d- R) J+ E0 {5 t, v: J使用VSC->文件->打开文件夹
- {! i' T4 _) H3 T( o. z; Y2 k0 ]3 [! e: `) b" q: v8 Y8 e' B1 D
第四步,使用快捷键 ctrl+alt+i  初始化目录
# f/ n+ _; {. w% b* ]$ h1 [8 U, X. W  [; K6 w% N# g
第五步,选择一个已经存在的板子,我是自己画的  单片机型号是STM32F072C8(搜我的帖子,开源串口调试工具),就是这块板子,但Platform不会有它的,所以我选择的是nucleo_f072rb
7 n2 Y+ g; [4 f0 D% _# g/ o3 C: Y& N. e( Z3 o( K
第六步、新建文件,在src文件夹路径下右键,新建文件main.c- w' K. |. p  X- W$ }) o" [; U: Y
jc2.jpg
. m+ g+ x& Z; p- I1 U8 _3 O0 r. i) P5 j; w, `5 q  |; z9 z
第七步、打开main.c,添加代码
  u+ d% F4 f9 E9 C3 X
, s% `4 ]" Q6 X# G#include "stm32f0xx_hal.h"8 y9 C: a+ J. K% c6 L
3 M$ b4 L' X0 A
#define LED_PIN GPIO_PIN_13; i  ^8 ^- u+ x- T8 [8 S
#define LED_GPIO_PORT GPIOC: z+ k) ]% w+ }7 j; D3 j7 G! c
#define LED_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
2 U" U! |- s' U9 b3 P, |9 L( V0 V  B' r. N# W9 ]
void LED_Init();
0 N7 j$ g$ o- j( ~* P' c2 n
) [" L+ ], F9 v- Vint main(void)
$ r$ q9 M7 h2 X1 i$ N{
6 l" i. p) q; P8 `' m3 v  HAL_Init();: R) A& E) M, U  Q% p. S, I0 |% I
  SystemClock_Config();
  [& Y$ _8 Q* N. D  z) ]  LED_Init();
8 x! n( h2 S8 H1 p4 m2 @: R$ _4 V: R9 u* D0 m  R
  while (1)
6 |) n% ^# [) A2 y6 J  {
& g+ x! ^0 f, s- j* }# G8 X& H    HAL_GPIO_TogglePin(LED_GPIO_PORT, LED_PIN);
3 p2 {3 Q8 d* f# G% o% V    HAL_Delay(1000);
# r# I) x7 J# ]1 V% j+ d+ u  }! u: g4 ]% A9 W9 R$ r: Q% R
}  j% n9 N' V9 z) P
/** System Clock Configuration3 C" @% y  F/ g* o; q4 L
*/6 B6 L# [3 m- \) k; t
void SystemClock_Config(void)
5 G# M" [$ S2 G0 y$ |{
  \8 Y  {9 L9 N
! a0 N9 ?; c5 v- z  RCC_OscInitTypeDef RCC_OscInitStruct;
# U' R1 G, f; y) j1 d+ c6 o; c  RCC_ClkInitTypeDef RCC_ClkInitStruct;& E6 }' n, ^3 t5 T  |
  RCC_PeriphCLKInitTypeDef PeriphClkInit;
% }0 {% x9 C/ q+ o" X( j  r. |& \6 T9 P# I- d
    /**Initializes the CPU, AHB and APB busses clocks
8 [+ y& O) ]5 p$ e8 j  v; B7 A  X: s    */
5 ^! I9 g, Y& M+ N% Q+ y) Q  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48;" I9 A% P) I" S( L( X, e
  RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
  v! m, l, p6 S" Y. _1 M  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;& d8 W9 m/ P" a% j7 e; u9 ~" ~, V) ]4 a
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK); _; t# z) q/ \; m5 Y2 F, u- S
  {8 V8 g4 `% G. p0 x$ F( a$ h
    //_Error_Handler(__FILE__, __LINE__);" E9 j3 r( `  S
  }  s" K& C( S* y8 x( f) m: f# Y
: J) z- R" m  ^  [2 Q- a
    /**Initializes the CPU, AHB and APB busses clocks
$ K+ i2 |% \6 ~3 `6 s& T, g& q    */. Z$ m8 \. }* w% x, K! m& {3 Q
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
- V8 ]0 V' ]2 V1 Z                              |RCC_CLOCKTYPE_PCLK1;) l+ q/ g$ E" ~, R- {# X
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI48;. z: ]* G' b4 L9 K# t/ B
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;$ d$ e, }6 @3 E! g0 R& ]" R3 Y
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;% O6 y) o( ^. g

3 G) x) o, N- ]5 P  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
" L$ k3 @1 q1 \8 P  {
6 G/ p. i" e4 C1 Z! H& j9 M    //_Error_Handler(__FILE__, __LINE__);1 ^* c7 I5 E! _8 A
  }& f6 N% i% \8 g( f6 B+ L3 D& }
) Q: S$ T* ^1 g# Z* Y
  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB|RCC_PERIPHCLK_USART10 @2 V; K' b9 f
                              |RCC_PERIPHCLK_USART2;
0 Q: [. f, T9 k8 K& ]  PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1;0 w8 ^4 `+ V" B" t7 J! `
  PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;
4 u! H( d5 W. C3 T) E+ |" J  PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;
/ @" q; s- q4 {  ^6 [4 Z) l& m6 m7 f1 U' Q: K+ i1 K! r" e
  if (HAL_RCCEx_PeriphCLKConfig(&eriphClkInit) != HAL_OK)5 K. @' N  F% A, g! D
  {
; g2 k, i, H4 P( O4 B    //_Error_Handler(__FILE__, __LINE__);
/ q3 U! x0 [; M9 |  }
! d+ F  _1 A; F
! C# X2 V; Q, d    /**Configure the Systick interrupt time
: N8 r7 t& t" W! w, w7 t9 F    */, S- q2 V$ i! L1 t# N- R! F. n
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
& v. J  V3 m& I/ m( A, g6 @1 A; M6 _& H, Q4 \- K: n' l+ w
    /**Configure the Systick
  U0 T9 C4 x; V% Z    */6 }2 R- @  M; g
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);. ~3 [9 v/ E2 e9 L2 ]8 }$ M6 V

! _  X# V) Z( {! l: A5 M) X4 D% k  /* SysTick_IRQn interrupt configuration */( T0 B+ h8 u" }, B% w
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
+ U5 q$ A+ Y4 x3 Z}' t% N' p! c4 J) f

8 P6 l# A6 U+ v3 f% i$ l" o3 }. hvoid LED_Init()
- q' K# t& ~5 X/ B, V9 m# l' R{7 u. }: S: B" @1 H1 K
  LED_GPIO_CLK_ENABLE();
& Z8 p/ v3 t( }: d8 ^( N) d% L  GPIO_InitTypeDef GPIO_InitStruct;
/ C) z* ]5 t; t: D  GPIO_InitStruct.Pin = LED_PIN;7 d3 w# `2 V; {2 v; a8 Y2 }
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- E6 y8 P" r8 ]8 X9 t2 a  GPIO_InitStruct.Pull = GPIO_PULLUP;! h; n7 ]0 Z0 ]) E) k
  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;# I) \) X) Y/ C0 D% V
  HAL_GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);/ d, J* H  ^9 X& R
}  e( h- w6 O% n5 {
/ J  F0 @2 J( `8 w
void SysTick_Handler(void)3 j3 c" w- G8 C: W4 m6 U6 R
{
  B) e+ G( d2 b0 Q  HAL_IncTick();+ y+ N- K- C9 w* |6 z; D* v* }
}( @1 l# u: y5 U/ j1 E0 b; K

' H% N1 i4 W: k+ ^# h/ ^% [/**( n3 A7 ]' J& C/ k/ i  v) k
* @brief This function handles Hard fault interrupt.
) w+ e3 U) n1 v+ d' i# X*/* `- Y+ D8 m% R1 [
void HardFault_Handler(void)+ F9 [$ J1 F2 R- s9 H
{
  j. K2 d/ f0 P& [5 T7 |! Z  /* USER CODE BEGIN HardFault_IRQn 0 */+ C% l0 `+ E$ T+ N: l- a
4 ]% Q# ?* Z: p. I7 X' q- X
  /* USER CODE END HardFault_IRQn 0 */
7 R3 g) h% f) z6 p8 v  while (1)% W& o# j( ]2 I) B' X3 s7 h$ Y
  {
, z3 [! E) F/ P4 B9 t4 _, y7 A# X( D  }3 M+ `2 L4 d" X( a0 B
  /* USER CODE BEGIN HardFault_IRQn 1 */
) J4 P/ Q% _8 a* u2 L! Z% `2 S! R! u* V0 D* h% I( @
  /* USER CODE END HardFault_IRQn 1 */0 X! ^8 Y# }* g+ |! H" L7 t$ u
}6 E5 }$ U) y7 Z6 K7 R4 u4 j
/ U4 p! r" v  g1 r1 V/ G$ A

7 \' K) Y( y2 i% V) r$ D: S1 i
9 j9 F9 u+ l3 ?/ s" P3 |% Q8 n; _+ ~" a6 k0 G
第八步、修改Platform.ini 配置文件,设置Jlink仿真器1 \2 U. M9 n% ~4 L4 W9 t! W
[env:jlink_debug_and_upload]: h5 P8 P( N: u$ f! E' A- Y
platform = ststm32
. n) L0 H2 P' i4 ]; Mframework = stm32cube2 L0 T2 \6 g0 {& M
board = nucleo_f072rb
% N" I+ `: B' d+ |debug_tool = custom
% A0 z- P$ p& p- h9 P) _& ddebug_port = :2331
6 O" E; y9 e7 t/ y/ ]debug_server = JlinkGDBServerCL
4 X0 s5 S; u, e7 }  x$ T3 D2 t    -singlerun' h, |! ]- p3 v  E% x2 U
    -if1 R9 a1 m4 t" M6 N' a7 V+ `. b
    SWD$ V0 A# O/ K5 D7 p6 L
    -select
8 @; F( \! Y" x3 L8 `/ [    USB
- R  M( x" V0 I% O3 I    -port
  f$ ?/ l- D- ?$ S9 d    2331
  O4 X; N0 B7 Z: b- x) D" B8 O    -device- p0 v" n0 X8 Y' p
    STM32F072c8
1 `/ R6 C/ U) a0 b; i) D  }0 R

. |2 x) K' y; K; u" ]- X5 t* c0 W! x4 y. F3 h4 }/ D

$ c  F% u! t0 O1 [; j/ k$ I
2 ^" P' I! S! f, Z" N' S! |第九步、编译文件,使用快捷键 ctrl+alt+b  编译,编译成功,会有提示# ?8 m  j( r' k
- g+ b6 B5 M# o
我只截取最下面一部分: k0 e" t3 _) I+ E5 R5 V/ t! _
Calculating size .pioenvs\jlink_debug_and_upload\firmware.elf
& e4 L+ b2 L' yBuilding .pioenvs\jlink_debug_and_upload\firmware.bin
7 R6 M2 Z4 e& w) }text       data     bss     dec     hex filename
" W0 J/ p6 U. h. V- Q3852       1080    1568    6500    1964 .pioenvs\jlink_debug_and_upload\firmware.elf. q6 u6 l. E/ Y  L6 U+ L% ?. O
============================================== [SUCCESS] Took 9.26 seconds ==============================================( W, Q8 s# V) H. y

. k! }7 ?% k' t2 Z" G* ]9 o
% k% e8 n! U5 D# p( W  ^第十步,调试,,快捷键 F5启动
0 A/ o. O+ B5 o& Y- V' q$ U$ Q4 u3 @6 K* ~
jc3.jpg 4 K7 o5 l7 U' o" s  I3 q) ^. z0 ?( w
4 h7 w, h( r% \% p
可以单步调试,可以F5运行,断点会显示在左侧
' y8 }# i6 }( D3 R' ~
$ s& }% a, L; n1 S" P深夜发帖,有些困,有的地方写的不好,请大家谅解,有问题跟帖....
2 M. L1 B  |+ T& Q* \% d$ j( D% [: t+ P  w. C* p8 D) j" |
  a* g3 z7 B0 _
. M- N* y1 w/ v
0 L% W$ \5 J0 B9 X. k) ^1 B
) o0 c) y, m2 f# e' a1 @+ ]- D
收藏 2 评论16 发布时间:2017-9-3 00:52

举报

16个回答
kylongmu 回答时间:2017-9-4 17:19:43
本帖最后由 kylongmu 于 2017-9-4 17:25 编辑 7 _0 [1 c# U6 f, X

9 x. H) n: w. {" K! T6 v今天跟踪试验了一把:  F/ D2 f! T# C9 D/ }' N
无法打开“PIO Home”: Could not start PIO Home server: Error: timeout。
* X5 [8 m& ~" c" b' n又是被墙,只能按楼主的快捷键组合操作,不能按官网的有菜单指导http://docs.platformio.org/en/latest/ide/vscode.html#quick-start
3 s8 I0 @4 p& V8 J另外debug配置还得自己写J-Link参数,工程只能建立官网提供的板子。+ c1 J$ z- C' P) S6 |
开发者注意力都不在MCU功能上,而是维护工程文件上面。
& \# [- h/ P# B) `PIO的价格,基本用户每月每人$10。http://platformio.org/pricing
9 d; k$ z! X; O. w- W# w国内用户洗了睡吧,就算你交得起钱也会被墙,开发时还得自己维护整个工程文件。$ r5 o; `" o3 ]5 L8 G
wofei1314 回答时间:2017-9-5 09:10:31
kylongmu 发表于 2017-9-4 17:19/ P% s7 J6 A3 v) c: ]: k
今天跟踪试验了一把:; h- i2 V7 D& D( H  \( ^0 R) ?4 X
无法打开“PIO Home”: Could not start PIO Home server: Error: timeout。/ S: x+ n4 r: b% Y
又是被 ...
- X+ n* a% t' ~+ U
你看的好详细,我都没发现收费...8 Q% o5 q2 x6 i. c  W: E
6 q. R" {' k8 e1 D
说来惭愧啊...
" _% O9 A, U) y* }, G; _
1 w' R+ N( i8 V5 T9 C看了以后可能只能用VSC编辑了
; Y- Q2 f& U+ ^( Y
; e3 \2 R$ j8 Q% u  K6 P8 ~不知道插件开发难不难,要是自己写个插件调用gcc编译的话就好了
wofei1314 回答时间:2017-9-13 10:34:41
any012 发表于 2017-9-13 09:44
' f+ \' S5 K: Q) khttp://platformio.org/pricing4 q( M# D' S- J' F7 Y
社区版不收费吧,9美元/月的是基本版。

" c! [- A: t' J  _: s6 e( d我就是探索了下,社区版本有限制,现在又更新了,反正多了一个选择就是...
wofei1314 回答时间:2017-9-3 00:54:18
本帖最后由 wofei1314 于 2017-9-3 01:04 编辑
" ~$ }3 ^3 G1 d; m: y9 U- j3 M3 C7 O5 j
2楼留给自己,
& r! \# @/ t0 \% ^! O0 \& V: C; ^附上完整工程    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
5 N3 `2 n& t' s* L额,需要电脑上有MDK软件吗?

' v# }4 S0 b: r0 u' Q/ w5 Y" _不需要,只要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:39, k5 ]# G9 I, Z
楼主最近在qqqun 和jianshu都推广甚多.. 支持一下vsf  ,不觉明历

2 k6 ~  h4 [' C" b: |" S- [# f被你发现了...
反派小智 回答时间:2017-9-6 08:47:13
谢谢分享,这个不错
12下一页

所属标签

相似分享

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