经过几天的摸索(是我自己愚钝),终于实现了使用VSC调试,实例程序是点灯(菜鸟的第一课是不是永远是点灯啊, )....) W1 `5 z4 q1 ^6 X7 A$ w 废话不多说,下面开始本次探索的简单介绍,不详细或者遗漏的地方,需要等朋友跟帖,我会把我知道的分享给大家:) 第一步,下载安装VS Code,不知道的同学问度娘,我这里就不啰嗦了,直接附上官网下载地址 点我下载 X64 1.15.1 其它版本请移步官网根据需求下载! n7 u. K v6 E1 @' j0 ?6 z 1 [ n9 ?+ k$ v) o" d 第二步,安装PlatformIO IDE,具体过程,先打开vscode,然后点插件->搜索->安装
第三步,重启VSC,然后就可以建立工程了,在本地任意位置新建文件夹(也可以是已经存在的,测试嘛,最好是空文件夹),然后记录路径 使用VSC->文件->打开文件夹 第四步,使用快捷键 ctrl+alt+i 初始化目录 ) s$ g, j9 G% ]% l7 Q 第五步,选择一个已经存在的板子,我是自己画的 单片机型号是STM32F072C8(搜我的帖子,开源串口调试工具),就是这块板子,但Platform不会有它的,所以我选择的是nucleo_f072rb 第六步、新建文件,在src文件夹路径下右键,新建文件main.c* c3 A5 n' w1 m) i7 Q; D6 u! Z
第七步、打开main.c,添加代码 ! x' K, F G$ F# ]# \+ [ #include "stm32f0xx_hal.h"; s8 [( a( p5 o! s+ w #define LED_PIN GPIO_PIN_13 #define LED_GPIO_PORT GPIOC3 d6 }5 v4 L; C& U0 A' _% r #define LED_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() void LED_Init();* D/ U7 Q& S+ {7 T 5 J8 _/ b& C: ]% u! Y. F0 k int main(void) { HAL_Init();. N5 s" c% W9 j" ]9 f% ^1 _ SystemClock_Config(); LED_Init(); while (1)- s$ D3 o9 @- ?$ X% C0 } { HAL_GPIO_TogglePin(LED_GPIO_PORT, LED_PIN); HAL_Delay(1000); }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) {: j& r# p3 H* O/ W! | RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct;, H' i0 F2 s& q RCC_PeriphCLKInitTypeDef PeriphClkInit; ( v: e& O& W7 w+ C% J9 {0 J /**Initializes the CPU, AHB and APB busses clocks ( z! h- _2 W7 K+ V */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48;6 a* Z8 m _( S, o; u, v$ |0 n RCC_OscInitStruct.HSI48State = RCC_HSI48_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;3 k; V2 v' `/ W& t+ P if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {4 o1 [' a0 x. l' {- R4 L //_Error_Handler(__FILE__, __LINE__);6 e+ w4 V( j4 q7 x p( O7 ~ } /**Initializes the CPU, AHB and APB busses clocks 0 f# `4 V% m: w% [- ~ */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |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) { //_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 |RCC_PERIPHCLK_USART2; PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1; PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;( J/ Y& q! A' ? PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_HSI48; if (HAL_RCCEx_PeriphCLKConfig(& eriphClkInit) != HAL_OK)8 {& x) g* f: Q9 ^" G2 L: q{ //_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 ] */ HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); ( o7 {4 Q$ w' R. @ x /**Configure the Systick */& y( F+ ~: d9 l+ R& o7 y HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); & b8 z! W9 o( H0 P6 Z /* SysTick_IRQn interrupt configuration */ HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); } " }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(); GPIO_InitTypeDef GPIO_InitStruct;4 s+ v, [# T" Y) a1 n+ W' R4 O3 e3 x8 F GPIO_InitStruct.Pin = LED_PIN; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_PULLUP;* Q. k5 Q% v3 v% G GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; HAL_GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct); }; |- g! a/ d9 U+ ^/ v void SysTick_Handler(void)- Z" z% w/ q) M | { HAL_IncTick();# F' ]) r" t3 R( x" l } /**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 */ while (1) { }/ 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 } # 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 board = nucleo_f072rb' C0 P8 ~5 i" a3 K ?; M/ ] debug_tool = custom debug_port = :2331+ c: b6 f# o, s. {& {( ~" Y debug_server = JlinkGDBServerCL -singlerun -if! c% ~2 n% D3 ~$ R SWD" b+ A0 D) j$ |: J7 I- y5 d -select USB -port 2331 -device STM32F072c8 $ O% I/ ]; ?2 }3 n& P/ d , G' ?; C; D/ c" e 第九步、编译文件,使用快捷键 ctrl+alt+b 编译,编译成功,会有提示 我只截取最下面一部分 Calculating size .pioenvs\jlink_debug_and_upload\firmware.elf Building .pioenvs\jlink_debug_and_upload\firmware.bin 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 ============================================== & }2 i: J4 K3 R; u 第十步,调试,,快捷键 F5启动
}4 E. }0 r/ K 可以单步调试,可以F5运行,断点会显示在左侧0 ]* _9 M) W" ? 3 x. T! N5 A; p( P! T7 j 深夜发帖,有些困,有的地方写的不好,请大家谅解,有问题跟帖.... * 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 |
微信公众号
手机版
6 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
另外debug配置还得自己写J-Link参数,工程只能建立官网提供的板子。
开发者注意力都不在MCU功能上,而是维护工程文件上面。0 j& L2 m/ ]! o2 e
PIO的价格,基本用户每月每人$10。http://platformio.org/pricing
国内用户洗了睡吧,就算你交得起钱也会被墙,开发时还得自己维护整个工程文件。$ k: S* u2 ], n
你看的好详细,我都没发现收费...) 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编辑了
不知道插件开发难不难,要是自己写个插件调用gcc编译的话就好了
我就是探索了下,社区版本有限制,现在又更新了,反正多了一个选择就是...
/ t: D$ R6 X. j. Z
2楼留给自己,
附上完整工程
不需要,只要VSC+plarformIO IDE插件和STLink驱动或者Jlink驱动...
被你发现了...