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

使用VSC调试STM32

[复制链接]
wofei1314 发布时间:2017-9-3 00:52
经过几天的摸索(是我自己愚钝),终于实现了使用VSC调试,实例程序是点灯(菜鸟的第一课是不是永远是点灯啊,)....
( Q$ _8 C' Z2 w$ U6 X  E& C) W1 `5 z4 q1 ^6 X7 A$ w
废话不多说,下面开始本次探索的简单介绍,不详细或者遗漏的地方,需要等朋友跟帖,我会把我知道的分享给大家:)
, q  g/ D+ d# j; V; x- p1 |
9 j( Z/ z5 u  Q8 G; M第一步,下载安装VS Code,不知道的同学问度娘,我这里就不啰嗦了,直接附上官网下载地址
) [  ?; J  G) }0 L( K  g: |  Q点我下载 X64 1.15.1  其它版本请移步官网根据需求下载! n7 u. K  v6 E1 @' j0 ?6 z
1 [  n9 ?+ k$ v) o" d
第二步,安装PlatformIO IDE,具体过程,先打开vscode,然后点插件->搜索->安装
5 D6 u3 o' l! o& Y& p9 [3 ~ jc1.jpg
$ M; N! Y9 F6 K3 c* f# R' q* Z0 g; I8 H
9 S3 K" ~! g0 M. i( Z# P9 g第三步,重启VSC,然后就可以建立工程了,在本地任意位置新建文件夹(也可以是已经存在的,测试嘛,最好是空文件夹),然后记录路径
3 b* \  J% M8 Q使用VSC->文件->打开文件夹
* K" F1 a9 _- R
1 D6 g- k6 _) G3 R0 }" ]第四步,使用快捷键 ctrl+alt+i  初始化目录
! m5 u- m1 b. h" l: ?  U) s$ g, j9 G% ]% l7 Q
第五步,选择一个已经存在的板子,我是自己画的  单片机型号是STM32F072C8(搜我的帖子,开源串口调试工具),就是这块板子,但Platform不会有它的,所以我选择的是nucleo_f072rb
: n8 d' c& X$ K# K- B: ?$ Y' F
  B5 T/ k/ |& w第六步、新建文件,在src文件夹路径下右键,新建文件main.c* c3 A5 n' w1 m) i7 Q; D6 u! Z
jc2.jpg
3 u; [8 m. {$ {% O
1 k& L+ [9 r6 N第七步、打开main.c,添加代码
8 @8 {- P- a4 {% f" i7 i6 I7 h$ w! x' K, F  G$ F# ]# \+ [
#include "stm32f0xx_hal.h"; s8 [( a( p5 o! s+ w

: z! I, Y9 x( p  V0 c" P- r#define LED_PIN GPIO_PIN_13
- i: Q) h# U9 L- d$ C; z/ A" [#define LED_GPIO_PORT GPIOC3 d6 }5 v4 L; C& U0 A' _% r
#define LED_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
  X+ C1 N# o/ }1 t5 e" h- u" [
5 c/ m- Q4 A% Q3 t. Vvoid LED_Init();* D/ U7 Q& S+ {7 T
5 J8 _/ b& C: ]% u! Y. F0 k
int main(void)
2 n! F2 ~+ \& ^1 W{
. ]0 M+ ]0 f  r' }  F, K  HAL_Init();. N5 s" c% W9 j" ]9 f% ^1 _
  SystemClock_Config();
/ n8 v) r6 L# Y- R7 {( J& x  LED_Init();
$ g' P; w5 j, [: F  }7 [
' |' Q/ T2 U' T0 V  while (1)- s$ D3 o9 @- ?$ X% C0 }
  {
( L  v9 a1 @) K, ?    HAL_GPIO_TogglePin(LED_GPIO_PORT, LED_PIN);
. s& a. v  Z6 y' q    HAL_Delay(1000);
; e6 ~( E9 ?- `  }2 d# ?' k6 F2 z1 X  G' S
}$ N- H. @3 v: x* M3 e8 q. k
/** System Clock Configuration8 F5 D' m; k+ k' i/ v) u
*/8 r& d8 @) T% t7 I4 Q' m
void SystemClock_Config(void)
; A, b0 V. G% K5 U1 O{: j& r# p3 H* O/ W! |

. l, x) O5 f' ]% Z5 M4 D3 O# p  RCC_OscInitTypeDef RCC_OscInitStruct;
3 B  F8 N0 p: y7 z' z/ C( o+ c4 K8 G  RCC_ClkInitTypeDef RCC_ClkInitStruct;, H' i0 F2 s& q
  RCC_PeriphCLKInitTypeDef PeriphClkInit;
; Q, }$ T9 N- C7 i( v: e& O& W7 w+ C% J9 {0 J
    /**Initializes the CPU, AHB and APB busses clocks ( z! h- _2 W7 K+ V
    */
4 J9 a# M: M7 S  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48;6 a* Z8 m  _( S, o; u, v$ |0 n
  RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
# @1 e3 G8 t3 Z: @  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;3 k; V2 v' `/ W& t+ P
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
7 }/ J! X5 A$ A8 p& J# Q. B0 t  {4 o1 [' a0 x. l' {- R4 L
    //_Error_Handler(__FILE__, __LINE__);6 e+ w4 V( j4 q7 x  p( O7 ~
  }
9 U2 V4 U# H5 V
: ~+ X5 v2 r; t+ Y- _. c: C    /**Initializes the CPU, AHB and APB busses clocks 0 f# `4 V% m: w% [- ~
    */
3 J1 g& C& ]* ~& r  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
3 t: V4 z, b7 t: `2 c1 o# n                              |RCC_CLOCKTYPE_PCLK1;3 I, [# P+ `4 X; K. T; U: s
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI48;0 @, W7 e$ a: `% S' e; ?
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;( I& \: q9 t; `' j
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;2 L" u* c, [# s: @) C" l
0 t6 x$ P7 ]: M7 I9 ]
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
4 ^( K. F8 u: f6 N- I  {
3 I# s; D6 S# S3 Z    //_Error_Handler(__FILE__, __LINE__);- o" `% _* h. @1 R
  }1 I: y  m/ i; U* P) d1 I
. o7 [  @' u/ K! ?  W
  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB|RCC_PERIPHCLK_USART1
+ J0 M7 q" w" _- o; J! U9 V5 p                              |RCC_PERIPHCLK_USART2;
0 \. G( `2 K6 Z4 X  PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1;
, o4 _* i6 Z8 j0 @5 t4 e& H) s. n  PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;( J/ Y& q! A' ?
  PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;
# j8 Q4 Z, N7 s6 z1 P  z
; V0 x9 n& l  L2 g  R6 m  if (HAL_RCCEx_PeriphCLKConfig(&eriphClkInit) != HAL_OK)8 {& x) g* f: Q9 ^" G2 L: q
  {
. N3 O- {# Y: r$ x% p% N1 r    //_Error_Handler(__FILE__, __LINE__);/ L6 \  l0 g4 j; U) d$ ~
  }7 ~' n! N3 s+ r" B5 p% t
8 M+ L- Q5 S" G+ H% U
    /**Configure the Systick interrupt time 5 w% n! {+ p( P( g2 `9 @9 ]
    */
/ x- c6 R" p9 F; d( \2 J  l% I  x  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
' |+ x  v; G" T  ?( o7 {4 Q$ w' R. @  x
    /**Configure the Systick
* C% j% r. q2 m: j  n4 h% |# C    */& y( F+ ~: d9 l+ R& o7 y
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
  Q( d3 W3 E+ j, j& b8 z! W9 o( H0 P6 Z
  /* SysTick_IRQn interrupt configuration */
0 N- E" Q* q( x5 z$ {& R/ S1 V  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
5 |% |- i7 K1 Q$ K5 Z4 R' M}
1 U3 F7 U7 n3 q0 F8 e  X" }2 O2 g2 h+ n
void LED_Init()3 V' t7 ~) ?, ?1 v
{* D% k' s. x- M% o( i" B. o- s
  LED_GPIO_CLK_ENABLE();
2 C" R: Z/ k6 v& R$ |& q4 _  GPIO_InitTypeDef GPIO_InitStruct;4 s+ v, [# T" Y) a1 n+ W' R4 O3 e3 x8 F
  GPIO_InitStruct.Pin = LED_PIN;
, S' h! u/ ^& L  v! F7 d& R5 x  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
) _+ y! B. X8 G5 x6 J* {  GPIO_InitStruct.Pull = GPIO_PULLUP;* Q. k5 Q% v3 v% G
  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
( E; W, ^9 i9 o2 z  HAL_GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);
+ b3 d/ p& |: z& ^4 D7 L) F& L}; |- g! a/ d9 U+ ^/ v

% q7 ^2 l* H2 h* m& V8 G& Hvoid SysTick_Handler(void)- Z" z% w/ q) M  |
{
8 ], G8 {8 X2 f9 ]. ^  HAL_IncTick();# F' ]) r" t3 R( x" l
}
' P$ F7 j4 Z4 c( z9 E
7 z% ^2 t$ ~$ O  W) P- K/**6 i$ Y* A4 ^/ v
* @brief This function handles Hard fault interrupt.' a  z) P# {( S) O& g) c
*/8 W, g0 [9 u6 _( D' `
void HardFault_Handler(void)" F$ ?  o2 U2 A" H
{! n5 x2 U( _2 j' P& j
  /* USER CODE BEGIN HardFault_IRQn 0 */; R: \4 ^- x* }; G" g
8 B$ w( g( x+ d
  /* USER CODE END HardFault_IRQn 0 */
( J2 C% R1 h3 ^- [6 y( f' k$ e  while (1)
9 X& x5 o0 B1 L! p  {
' B3 \/ a6 z& w( @  }/ f" `4 }7 g1 N' t( @; v
  /* USER CODE BEGIN HardFault_IRQn 1 */5 @7 I8 q( G! c. n
/ y% |* ~1 i2 w" F2 O/ ?
  /* USER CODE END HardFault_IRQn 1 */+ ?; L4 \. [* ~0 L
}
  s& {/ {1 p( p* `8 K# a

, `( b' Z6 i  O9 _& Q
9 }  h0 e# P/ ~/ [
* g% x! ]/ Z) C  o# _# l. p/ F  _: W6 [9 |6 u
第八步、修改Platform.ini 配置文件,设置Jlink仿真器5 b& b+ Y6 E. T+ }; R7 u
[env:jlink_debug_and_upload]. i2 ?# J8 E( U, [  C
platform = ststm32: Z- p, x9 ?  H0 h
framework = stm32cube
- O* N+ j0 a& z5 \board = nucleo_f072rb' C0 P8 ~5 i" a3 K  ?; M/ ]
debug_tool = custom
2 c5 P, A) f- r8 K2 y# Ydebug_port = :2331+ c: b6 f# o, s. {& {( ~" Y
debug_server = JlinkGDBServerCL
% r) e- M/ ]4 c: H7 r: i) d! M( i    -singlerun
" c8 v6 }+ T& h( R3 G* E    -if! c% ~2 n% D3 ~$ R
    SWD" b+ A0 D) j$ |: J7 I- y5 d
    -select
  w& _3 d& I# z' A8 }8 J    USB
8 K, W! F1 H0 ?* e3 A    -port
& F. e! B* w6 I& `6 ~; {    2331
% k, K& a9 U; Q# ]    -device
- |6 r2 }7 X! Q8 B9 \3 o    STM32F072c8
6 @# p, P6 @! Z4 W# T. W; H1 c% n8 T
$ O% I/ ]; ?2 }3 n& P/ d

# Y9 [7 B- u% k: _1 N$ p- R, G' ?; C; D/ c" e

5 ?# V# j8 ]7 Q第九步、编译文件,使用快捷键 ctrl+alt+b  编译,编译成功,会有提示
. ?. ~0 Z- K& ^2 d- P' R
: ]0 ^2 C: e$ _9 J7 [; {: G& |我只截取最下面一部分
% S6 J6 t% j8 r4 L  A1 lCalculating size .pioenvs\jlink_debug_and_upload\firmware.elf
" o4 ^" a8 k5 ?- M& MBuilding .pioenvs\jlink_debug_and_upload\firmware.bin
8 p0 I8 L1 i! {9 B1 N0 |text       data     bss     dec     hex filename0 J( {9 y" c9 F9 A& Z& {2 b
3852       1080    1568    6500    1964 .pioenvs\jlink_debug_and_upload\firmware.elf4 _  M; b: H; P9 V7 l& S- w
============================================== [SUCCESS] Took 9.26 seconds ==============================================
: ]# V  U! Q! K8 u
9 W/ `' E2 R1 J1 v& }2 i: J4 K3 R; u
第十步,调试,,快捷键 F5启动
2 U2 Z2 p) G- ~. B; V8 x
0 }( v8 U" k5 j( z6 y5 J" n jc3.jpg # t8 U( a% ^2 g- T$ h/ `& W$ C
  }4 E. }0 r/ K
可以单步调试,可以F5运行,断点会显示在左侧0 ]* _9 M) W" ?
3 x. T! N5 A; p( P! T7 j
深夜发帖,有些困,有的地方写的不好,请大家谅解,有问题跟帖....
* [: X- S" G3 b% W* K& J- m# q" Y' P5 H: u
1 V# b, ~* T' L9 {1 h
+ k/ Y( l* X# a% n/ ]; |6 c: k+ U" n

, M5 d! [5 O: P/ P  B1 A* _. I
0 [0 n8 P0 b4 h0 `( |
赞 收藏 2 评论16 发布时间:2017-9-3 00:52

举报

16个回答
kylongmu 回答时间:2017-9-4 17:19:43
本帖最后由 kylongmu 于 2017-9-4 17:25 编辑
4 I5 Q0 Y* I( m% c8 M- O6 H" ]/ d' x6 M: f: e8 g( G; }( a3 _
今天跟踪试验了一把:5 ]( v3 E4 L8 e' f0 ^! r
无法打开“PIO Home”: Could not start PIO Home server: Error: timeout。& }9 c2 @3 [3 G- f3 ?
又是被墙,只能按楼主的快捷键组合操作,不能按官网的有菜单指导http://docs.platformio.org/en/latest/ide/vscode.html#quick-start
1 ?- n% w+ T; S* F. B2 |9 \另外debug配置还得自己写J-Link参数,工程只能建立官网提供的板子。
$ g* V' S7 y; v7 _& d1 M$ L9 A; H2 x0 r开发者注意力都不在MCU功能上,而是维护工程文件上面。0 j& L2 m/ ]! o2 e
PIO的价格,基本用户每月每人$10。http://platformio.org/pricing
8 x2 \# X+ [4 G& ^! p国内用户洗了睡吧,就算你交得起钱也会被墙,开发时还得自己维护整个工程文件。$ k: S* u2 ], n
wofei1314 回答时间:2017-9-5 09:10:31
kylongmu 发表于 2017-9-4 17:19
0 I/ S4 g$ I4 G, u- k今天跟踪试验了一把:0 q5 I% w, ]! M' p% C! h4 A4 t
无法打开“PIO Home”: Could not start PIO Home server: Error: timeout。
/ z6 V) s1 V9 ~* p' U% g& m$ l又是被 ...

: ], ]# n& N% F! V, h/ t/ M0 f0 N8 Z你看的好详细,我都没发现收费...) m2 K' x! ?: E  ]( j
, n9 z; U/ J7 D0 p9 |
说来惭愧啊...3 ?3 Y2 g+ E: e8 T
* T& A9 J1 x% Q9 A& E
看了以后可能只能用VSC编辑了
) x  @" j! N0 G  e5 A
- u- `' D; e& l/ r3 x不知道插件开发难不难,要是自己写个插件调用gcc编译的话就好了
wofei1314 回答时间:2017-9-13 10:34:41
any012 发表于 2017-9-13 09:442 f. N$ }$ A( U$ O; z/ b- A% A
http://platformio.org/pricing
  Z9 [7 s+ D9 c) m' v$ X社区版不收费吧,9美元/月的是基本版。
6 k6 I! K5 j; Z  G5 V2 @
我就是探索了下,社区版本有限制,现在又更新了,反正多了一个选择就是...
wofei1314 回答时间:2017-9-3 00:54:18
本帖最后由 wofei1314 于 2017-9-3 01:04 编辑 . |. j, R5 x* x: k9 v! B- N6 A) v" c& \
/ t: D$ R6 X. j. Z
2楼留给自己,
6 s2 L9 x' k4 [+ Q$ b3 ?附上完整工程    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
+ V, o# L8 h9 ?) ?0 N额,需要电脑上有MDK软件吗?

/ X  C3 Q& G4 ?3 F! T4 P不需要,只要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:399 ]) ~! \/ p& j) U  M! o$ \
楼主最近在qqqun 和jianshu都推广甚多.. 支持一下vsf  ,不觉明历

$ e% q# t( u5 S& o+ {0 l2 F被你发现了...
反派小智 回答时间:2017-9-6 08:47:13
谢谢分享,这个不错
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版