经过几天的摸索(是我自己愚钝),终于实现了使用VSC调试,实例程序是点灯(菜鸟的第一课是不是永远是点灯啊,)....7 s% M% L; A6 Z) A5 _ 废话不多说,下面开始本次探索的简单介绍,不详细或者遗漏的地方,需要等朋友跟帖,我会把我知道的分享给大家:) 第一步,下载安装VS Code,不知道的同学问度娘,我这里就不啰嗦了,直接附上官网下载地址; F' ~2 Q! m: d% ` 点我下载 X64 1.15.1 其它版本请移步官网根据需求下载 0 [! p: w+ @- ?! |9 u" ^9 c) s6 y- s 第二步,安装PlatformIO IDE,具体过程,先打开vscode,然后点插件->搜索->安装 1 i2 G* M" U( Z0 G9 [% [6 `6 b b 第三步,重启VSC,然后就可以建立工程了,在本地任意位置新建文件夹(也可以是已经存在的,测试嘛,最好是空文件夹),然后记录路径 使用VSC->文件->打开文件夹 . z; Y2 k0 ]3 [! e: `) b" q: v8 Y8 e' B1 D 第四步,使用快捷键 ctrl+alt+i 初始化目录 1 [8 U, X. W [; K6 w% N# g 第五步,选择一个已经存在的板子,我是自己画的 单片机型号是STM32F072C8(搜我的帖子,开源串口调试工具),就是这块板子,但Platform不会有它的,所以我选择的是nucleo_f072rb 3 C: Y& N. e( Z3 o( K 第六步、新建文件,在src文件夹路径下右键,新建文件main.c- w' K. |. p X- W$ }) o" [; U: Y . i) P5 j; w, `5 q |; z9 z 第七步、打开main.c,添加代码 #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() ( V0 V B' r. N# W9 ] void LED_Init(); int main(void) { HAL_Init();: R) A& E) M, U Q% p. S, I0 |% I SystemClock_Config(); LED_Init(); : R9 u* D0 m R while (1) { HAL_GPIO_TogglePin(LED_GPIO_PORT, LED_PIN); HAL_Delay(1000); }! 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) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct;& E6 }' n, ^3 t5 T | RCC_PeriphCLKInitTypeDef PeriphClkInit; + o" X( j r. |& \6 T9 P# I- d /**Initializes the CPU, AHB and APB busses clocks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48;" I9 A% P) I" S( L( X, e RCC_OscInitStruct.HSI48State = RCC_HSI48_ON; 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 */. Z$ m8 \. }* w% x, K! m& {3 Q RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |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 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) { //_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; PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1;0 w8 ^4 `+ V" B" t7 J! ` PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1; PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_HSI48; 7 f1 U' Q: K+ i1 K! r" e if (HAL_RCCEx_PeriphCLKConfig(&eriphClkInit) != HAL_OK)5 K. @' N F% A, g! D { //_Error_Handler(__FILE__, __LINE__); } /**Configure the Systick interrupt time */, S- q2 V$ i! L1 t# N- R! F. n HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); ; M6 _& H, Q4 \- K: n' l+ w /**Configure the Systick */6 }2 R- @ M; g HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);. ~3 [9 v/ E2 e9 L2 ]8 }$ M6 V /* SysTick_IRQn interrupt configuration */( T0 B+ h8 u" }, B% w HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); }' t% N' p! c4 J) f void LED_Init() {7 u. }: S: B" @1 H1 K LED_GPIO_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = LED_PIN;7 d3 w# `2 V; {2 v; a8 Y2 } GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 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 { HAL_IncTick();+ y+ N- K- C9 w* |6 z; D* v* } }( @1 l# u: y5 U/ j1 E0 b; K /**( n3 A7 ]' J& C/ k/ i v) k * @brief This function handles Hard fault interrupt. */* `- Y+ D8 m% R1 [ void HardFault_Handler(void)+ F9 [$ J1 F2 R- s9 H { /* 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 */ while (1)% W& o# j( ]2 I) B' X3 s7 h$ Y { }3 M+ `2 L4 d" X( a0 B /* USER CODE BEGIN HardFault_IRQn 1 */ ! 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 / 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 framework = stm32cube2 L0 T2 \6 g0 {& M board = nucleo_f072rb debug_tool = custom debug_port = :2331 debug_server = JlinkGDBServerCL -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 USB -port 2331 -device- p0 v" n0 X8 Y' p STM32F072c8 - X5 t* c0 W! x4 y. F3 h4 }/ D 第九步、编译文件,使用快捷键 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 Building .pioenvs\jlink_debug_and_upload\firmware.bin text data bss dec hex filename 3852 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 第十步,调试,,快捷键 F5启动 - V' q$ U$ Q4 u3 @6 K* ~ 4 h7 w, h( r% \% p 可以单步调试,可以F5运行,断点会显示在左侧 深夜发帖,有些困,有的地方写的不好,请大家谅解,有问题跟帖.... ( 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 |
今天跟踪试验了一把: F/ D2 f! T# C9 D/ }' N
无法打开“PIO Home”: Could not start PIO Home server: Error: timeout。
又是被墙,只能按楼主的快捷键组合操作,不能按官网的有菜单指导http://docs.platformio.org/en/latest/ide/vscode.html#quick-start
另外debug配置还得自己写J-Link参数,工程只能建立官网提供的板子。+ c1 J$ z- C' P) S6 |
开发者注意力都不在MCU功能上,而是维护工程文件上面。
PIO的价格,基本用户每月每人$10。http://platformio.org/pricing
国内用户洗了睡吧,就算你交得起钱也会被墙,开发时还得自己维护整个工程文件。$ r5 o; `" o3 ]5 L8 G
你看的好详细,我都没发现收费...8 Q% o5 q2 x6 i. c W: E
6 q. R" {' k8 e1 D
说来惭愧啊...
看了以后可能只能用VSC编辑了
不知道插件开发难不难,要是自己写个插件调用gcc编译的话就好了
我就是探索了下,社区版本有限制,现在又更新了,反正多了一个选择就是...
: y9 U- j3 M3 C7 O5 j
2楼留给自己,
附上完整工程
不需要,只要VSC+plarformIO IDE插件和STLink驱动或者Jlink驱动...
被你发现了...