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

使用VSC调试STM32

[复制链接]
wofei1314 发布时间:2017-9-3 00:52
经过几天的摸索(是我自己愚钝),终于实现了使用VSC调试,实例程序是点灯(菜鸟的第一课是不是永远是点灯啊,)....& w4 y4 K& o7 `  U( A4 q+ [

1 M( H9 R$ B; T' \& K" u7 q废话不多说,下面开始本次探索的简单介绍,不详细或者遗漏的地方,需要等朋友跟帖,我会把我知道的分享给大家:)
) w( @+ V8 J7 s: s3 U# N! {" Q
& {# s. q/ H, _) C" w第一步,下载安装VS Code,不知道的同学问度娘,我这里就不啰嗦了,直接附上官网下载地址
# B7 [1 v7 |% X+ S- _5 E点我下载 X64 1.15.1  其它版本请移步官网根据需求下载
  i' g( k) f6 P% m- u9 R  f9 Y' a# Q; |7 H0 e8 a
第二步,安装PlatformIO IDE,具体过程,先打开vscode,然后点插件->搜索->安装
5 Q% e6 w, `9 `  K* ?: d# ~0 y jc1.jpg # y; d; j7 \. N1 K6 p# m: A/ N
; G2 y* E( [1 k
第三步,重启VSC,然后就可以建立工程了,在本地任意位置新建文件夹(也可以是已经存在的,测试嘛,最好是空文件夹),然后记录路径- D2 u7 J/ |& e2 l( q* t) q
使用VSC->文件->打开文件夹
) I; S9 _  A) C5 h* e0 e( E
5 T% b( t( h2 B第四步,使用快捷键 ctrl+alt+i  初始化目录
$ \8 `; k, _1 S- q* V& w/ _3 X: U. r4 X. z
第五步,选择一个已经存在的板子,我是自己画的  单片机型号是STM32F072C8(搜我的帖子,开源串口调试工具),就是这块板子,但Platform不会有它的,所以我选择的是nucleo_f072rb1 D' g/ \% N9 O& j0 p8 O7 c+ V
0 T; m( b5 h% B# a
第六步、新建文件,在src文件夹路径下右键,新建文件main.c0 Z  M2 y; e& B+ h
jc2.jpg 2 D4 T# @7 a& ?! i# a% |. V8 I

* v2 ^5 W, G( s" B0 {# Y第七步、打开main.c,添加代码3 e8 P8 ~3 I' B; Q; N# b  V
$ g0 U0 {* V: L* ?- x, o  k
#include "stm32f0xx_hal.h"
9 y- U. o: q' y8 X, f( P" e) }
, k3 n. i8 [4 r! o#define LED_PIN GPIO_PIN_138 R# v3 X, W9 v, p: D* R: e! N
#define LED_GPIO_PORT GPIOC; d3 q, }' |# a/ s
#define LED_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()6 w" a- c& P4 g( W0 N; |% x

: ^, V5 u" f: N: W9 U0 m+ Qvoid LED_Init();4 r( o1 I( \8 t0 q) p
7 ]( y1 i' d" \& c$ G( G
int main(void)
, j& y! h! |0 m( k" c% l$ _{
; C7 O+ N! G: |0 F* I: t4 R# W  HAL_Init();2 y: ~3 w- q+ X# T" o
  SystemClock_Config();
" i. u' M1 y" j" C6 {- c6 H" o  LED_Init();
# W# A  c7 a+ R& J' ]! W; D2 T$ B
  while (1)1 f+ ^  a7 |3 T$ [! G, e
  {9 s2 b& I5 \  {) ]2 v
    HAL_GPIO_TogglePin(LED_GPIO_PORT, LED_PIN);8 V& I1 I# U# ?* t/ X
    HAL_Delay(1000);
- D8 [7 ~$ O% L% \; ^8 _  }
% Q" s4 Y6 a& t% {% [( i1 S, ^}1 k' G  I3 y+ R1 G4 B
/** System Clock Configuration4 K+ d! b2 x$ s  X# v) W1 q
*/4 i# P5 o  u, D1 W- Y% f/ D' P
void SystemClock_Config(void)) V8 @8 r3 }' C/ O
{1 o1 P9 M) q! e; e6 ]  O# w2 T9 ?& h

1 w0 [* ]% N2 T7 Y0 W  RCC_OscInitTypeDef RCC_OscInitStruct;
( J" B: M+ ]7 w  RCC_ClkInitTypeDef RCC_ClkInitStruct;
+ a/ p0 m  K- c. A8 A" W2 U0 k$ w) d  RCC_PeriphCLKInitTypeDef PeriphClkInit;9 {6 _% ~6 j$ \2 B; I1 k

' o# b1 E' e7 q% c* A0 X( D; g    /**Initializes the CPU, AHB and APB busses clocks
3 n$ }' _+ p( `+ g8 O7 C6 u    *// `8 u. o' Y  S9 g4 w- I, o
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48;
! D) g& V  G2 l% H6 ~$ u3 E2 w  RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
! g* S2 ^& T* f( R7 T3 R  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;! `& r" i9 ~) `
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
+ t1 k+ b% Z: f  {
$ l1 Z+ @0 ~5 S& G; b+ O    //_Error_Handler(__FILE__, __LINE__);
4 D7 o, t7 Z# A5 ~  }& s, v) \3 H5 i3 `# e# T  k

# |! L9 i" w% \6 K1 Q- B7 c    /**Initializes the CPU, AHB and APB busses clocks 1 E6 M) v8 L% u4 C9 ~( p, \$ `2 e
    */+ M+ Y% `4 d2 Q3 S  D
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK( S* W. T( l0 K& t8 O
                              |RCC_CLOCKTYPE_PCLK1;
9 U3 Z$ S. x. [( E$ w( g  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI48;) \, A" V1 T# R" W
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;  C, `* z- G2 v9 }8 [0 `1 Q
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;" u( I0 C1 M) r  s7 }' |, J. W" l2 H

9 |9 F. k4 @. F! b5 z- j: Q: G; ~* I  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
/ f, H: K$ x9 \( n, w1 [7 M  {: r4 U1 M9 o" j2 S& t6 z
    //_Error_Handler(__FILE__, __LINE__);- }# h, r: }; L# V3 }
  }
' F2 W9 Q) u! Q5 l2 a) F
# y; J, `$ {0 [  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB|RCC_PERIPHCLK_USART1! x& r9 [" C( P4 O
                              |RCC_PERIPHCLK_USART2;
( m. M) ^1 M. X' }9 O' o  PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1;$ f, t2 w" q! i5 w1 q% q: B
  PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;$ f. b" s$ b. i% c" ~# T
  PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;) g' g( ]8 p0 j6 I

* U0 L' z) F0 z( j1 `; a  if (HAL_RCCEx_PeriphCLKConfig(&eriphClkInit) != HAL_OK)2 h7 q5 ?. p$ O
  {
+ C; D1 K  a  I: K- y    //_Error_Handler(__FILE__, __LINE__);
6 u8 [3 m$ t* ^- L2 L" K! ~  }
! ]6 I% E9 K9 s% B+ G$ k4 o1 {0 S) R% B4 A6 S
    /**Configure the Systick interrupt time " z, P( v% p! F2 O+ @8 u& U1 P
    */5 c' t% `0 G- n2 W
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
: [. O( O" R  g% b$ p  a8 X" K9 K% \! U9 V, Q  @
    /**Configure the Systick
* ~) K* f$ j1 p* B    */: a) |) s  O$ P2 ]4 [; D( [& L! g
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);' w2 K. {9 V, w( ?3 h  I# O4 u

0 ^2 |$ ^, [/ s8 ]  /* SysTick_IRQn interrupt configuration */
8 G) x9 w4 G# T1 Q+ O% W$ G; O' x  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
7 b. x; ?; g" e2 m' q+ n( J, c! q2 l}
$ I1 t9 \8 D5 w, x# e0 V# D0 J( |, F) }
void LED_Init()" g+ A; a' ~0 u
{
6 I" I3 |$ q1 ]5 c: c8 u2 L  ^3 N% p  LED_GPIO_CLK_ENABLE();
8 o8 L) @# P/ h2 s' M  GPIO_InitTypeDef GPIO_InitStruct;
+ I0 `$ H* |! n( G6 i. g  GPIO_InitStruct.Pin = LED_PIN;
: R; p" h$ \, S" t+ q: h/ t9 d' ?  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;# r/ Z! J, X/ Q
  GPIO_InitStruct.Pull = GPIO_PULLUP;0 n" q; x$ H" L  ~! E
  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;5 x  C% }2 {( W
  HAL_GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);8 }$ s$ T% Q9 |* }
}: O' p+ _6 Y2 b6 D4 Z5 `" a
) ?9 P* V8 `$ q( D
void SysTick_Handler(void)) e2 F/ O2 h  n5 Q) Z8 R
{
/ K0 U/ W/ N2 ]' Y+ v( D  HAL_IncTick();
* X, t5 Q5 x: P" O/ Q}7 A% q( a" e9 ^0 v

# H) w5 \  R& ]* t4 C, I1 G; X/**" O1 P1 j! t) D# O* b- O3 E+ A
* @brief This function handles Hard fault interrupt.( k+ W2 X1 W& B0 `5 U9 o
*/" T$ E" B" q4 D) M2 E
void HardFault_Handler(void)- T) C( X$ p" L: `9 H, L  z
{" r+ t1 k2 U5 e; i5 \9 I0 [7 @9 K
  /* USER CODE BEGIN HardFault_IRQn 0 */- _3 D" D8 W) s2 \2 h
1 c5 z. r# E: h% q: W' g
  /* USER CODE END HardFault_IRQn 0 */
4 V7 I0 e* g) Z  _  G8 _' r  while (1)) _' j; L2 ]  O4 j- O( Q; {5 d
  {
7 f: ?- H' U6 @  a6 l4 q  }
8 x" w3 m$ _. U' n+ V) f  /* USER CODE BEGIN HardFault_IRQn 1 */: B; y0 R( x$ ^% Z0 ^& k
! P3 ?3 s. j- t7 b. g  ]
  /* USER CODE END HardFault_IRQn 1 */3 v. P$ h' B, u3 U3 U6 i
}6 X& G8 N, b: r; }7 C5 r( m% `0 C
' ^( w3 l; s3 `& }

" r. h$ y& C; ~" R$ M. H
1 f! ?3 M* ]! G0 c$ Z2 l4 B* R2 p9 C9 d1 i& M: `- B7 J2 U
第八步、修改Platform.ini 配置文件,设置Jlink仿真器* G7 T1 _/ E" Y& K( z6 O
[env:jlink_debug_and_upload]
. E+ m/ Z! O- N0 mplatform = ststm32
" X1 c' E' {, w/ pframework = stm32cube
( q8 d7 P- G( b2 y' a, J2 l1 aboard = nucleo_f072rb
8 k, X/ O! x; B- v! y8 sdebug_tool = custom+ c7 j7 K% D( ]" q
debug_port = :2331- ?* j2 x7 n8 F. h) a' P
debug_server = JlinkGDBServerCL
0 C$ D0 Y% M  I$ d, M# T    -singlerun
& N* Y" D0 q5 |. V  b4 h6 ?+ {    -if
+ x/ [, v; g6 v6 J& \- u) I    SWD- E3 H! a. H" w$ k' X/ S" w
    -select
8 }8 s* |' b, a    USB6 l% c0 \7 u( t
    -port
/ Z+ n/ R" M6 _( b, V, Q    2331
1 h& u* j1 f* a    -device
4 q  W( J, T  j; H7 u& W  r    STM32F072c8
1 ]3 i/ F7 \- T, e

+ K+ }4 c; l- J6 |
- s2 M/ S' g( R7 {+ o
$ B" a% I5 S, O* E1 x# l
3 K& G2 w" Q, D2 {- j0 C第九步、编译文件,使用快捷键 ctrl+alt+b  编译,编译成功,会有提示1 N& b5 t: P5 V( i0 h

; B0 V& k( D% T0 _我只截取最下面一部分
8 |/ E5 ]3 z* e& |, f: MCalculating size .pioenvs\jlink_debug_and_upload\firmware.elf
+ r- q& \$ J8 oBuilding .pioenvs\jlink_debug_and_upload\firmware.bin
2 Q, ^* @& A+ Z# P9 z8 Ntext       data     bss     dec     hex filename
& I: }% p7 e, ]. q( H$ P4 V3852       1080    1568    6500    1964 .pioenvs\jlink_debug_and_upload\firmware.elf- X3 b" I0 u' A$ o) q- [6 X
============================================== [SUCCESS] Took 9.26 seconds ==============================================8 ~! E" u# H+ i/ _/ p
, Q: s; @- ?7 h; a( R4 T& ~

$ k) g2 j5 d4 t7 x第十步,调试,,快捷键 F5启动
; u$ _" K9 j' [! Q
0 i, L+ \, D# z7 t( I2 J" _ jc3.jpg
) @% w3 F  P+ ]. ?4 }" H3 e' T
: p# s+ U0 D6 w& ?! Z: N6 i可以单步调试,可以F5运行,断点会显示在左侧3 B5 @( Y& M. f4 b) E! _$ @6 U

0 U5 ?4 v- k& i" Q/ G, \深夜发帖,有些困,有的地方写的不好,请大家谅解,有问题跟帖....- x1 ~. d: D2 x' Y

0 `, H- w$ C3 y$ e& R, R% @0 q( G/ H  h6 \0 h6 v9 a

2 t' m9 p. L8 k+ U: r: D; S* n
! @2 w7 e1 H* O" F/ `
赞 收藏 2 评论16 发布时间:2017-9-3 00:52

举报

16个回答
kylongmu 回答时间:2017-9-4 17:19:43
本帖最后由 kylongmu 于 2017-9-4 17:25 编辑
5 q4 g+ b5 B9 j' E; L& a6 c, F1 w0 [& N& K! E
今天跟踪试验了一把:' e/ X! q# p) z2 h2 n
无法打开“PIO Home”: Could not start PIO Home server: Error: timeout。# m: E1 z8 @$ q  N" u2 B& q
又是被墙,只能按楼主的快捷键组合操作,不能按官网的有菜单指导http://docs.platformio.org/en/latest/ide/vscode.html#quick-start8 V, o; k, o" w0 l2 X
另外debug配置还得自己写J-Link参数,工程只能建立官网提供的板子。
( `  t' [7 ?; e! H开发者注意力都不在MCU功能上,而是维护工程文件上面。
$ O: k& }- e: `' WPIO的价格,基本用户每月每人$10。http://platformio.org/pricing; E3 R% k8 G/ V0 L; f9 P% `: J
国内用户洗了睡吧,就算你交得起钱也会被墙,开发时还得自己维护整个工程文件。
6 L; x) [2 _' U% W" ^( l0 K
wofei1314 回答时间:2017-9-5 09:10:31
kylongmu 发表于 2017-9-4 17:19! |- [7 T0 A8 i0 `
今天跟踪试验了一把:5 n' z6 H) s1 t
无法打开“PIO Home”: Could not start PIO Home server: Error: timeout。
4 K' _9 b$ G5 ~  c) K5 E& S又是被 ...
& _) Y( F5 ?: J& ~! `# I9 i4 K. z
你看的好详细,我都没发现收费...
; [& X- ]: O( d8 D- I
! n& w- @  T4 L6 H! W* p1 J0 Z说来惭愧啊...
6 g& s4 i8 q) Q! X
7 v9 V- I/ _! q3 L看了以后可能只能用VSC编辑了
8 c: O& Q$ J' B9 X8 [. R3 K# Z0 |+ R4 e
不知道插件开发难不难,要是自己写个插件调用gcc编译的话就好了
wofei1314 回答时间:2017-9-13 10:34:41
any012 发表于 2017-9-13 09:444 l$ U2 W. l7 C( G0 V
http://platformio.org/pricing& i  B/ ~4 B; {: _' ]8 ~* g
社区版不收费吧,9美元/月的是基本版。
6 Z& ?. L: I0 k6 E* z. [0 h# k- Q
我就是探索了下,社区版本有限制,现在又更新了,反正多了一个选择就是...
wofei1314 回答时间:2017-9-3 00:54:18
本帖最后由 wofei1314 于 2017-9-3 01:04 编辑 ) y" c+ r. J. a4 Z4 a' S+ x* G9 b
1 L6 E# P+ G- H1 f6 i1 K4 C
2楼留给自己,' t- [) K) ?1 B9 }2 o3 O1 d
附上完整工程    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! K7 F7 k% o4 }+ I
额,需要电脑上有MDK软件吗?

# e0 T  B1 r8 n9 W+ ^! a不需要,只要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:398 Y+ A6 F- c8 k3 j4 u" u
楼主最近在qqqun 和jianshu都推广甚多.. 支持一下vsf  ,不觉明历

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