经过几天的摸索(是我自己愚钝),终于实现了使用VSC调试,实例程序是点灯(菜鸟的第一课是不是永远是点灯啊, )....& w4 y4 K& o7 ` U( A4 q+ [废话不多说,下面开始本次探索的简单介绍,不详细或者遗漏的地方,需要等朋友跟帖,我会把我知道的分享给大家:) 第一步,下载安装VS Code,不知道的同学问度娘,我这里就不啰嗦了,直接附上官网下载地址 点我下载 X64 1.15.1 其它版本请移步官网根据需求下载 ' a# Q; |7 H0 e8 a 第二步,安装PlatformIO IDE,具体过程,先打开vscode,然后点插件->搜索->安装
; G2 y* E( [1 k 第三步,重启VSC,然后就可以建立工程了,在本地任意位置新建文件夹(也可以是已经存在的,测试嘛,最好是空文件夹),然后记录路径- D2 u7 J/ |& e2 l( q* t) q 使用VSC->文件->打开文件夹 第四步,使用快捷键 ctrl+alt+i 初始化目录 * 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
第七步、打开main.c,添加代码3 e8 P8 ~3 I' B; Q; N# b V $ g0 U0 {* V: L* ?- x, o k #include "stm32f0xx_hal.h" #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 void LED_Init();4 r( o1 I( \8 t0 q) p 7 ]( y1 i' d" \& c$ G( G int main(void) { HAL_Init();2 y: ~3 w- q+ X# T" o SystemClock_Config(); LED_Init(); & 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); } }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 RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_PeriphCLKInitTypeDef PeriphClkInit;9 {6 _% ~6 j$ \2 B; I1 k /**Initializes the CPU, AHB and APB busses clocks *// `8 u. o' Y S9 g4 w- I, o RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48; RCC_OscInitStruct.HSI48State = RCC_HSI48_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;! `& r" i9 ~) ` if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { //_Error_Handler(__FILE__, __LINE__); }& s, v) \3 H5 i3 `# e# T k /**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; 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 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) {: r4 U1 M9 o" j2 S& t6 z //_Error_Handler(__FILE__, __LINE__);- }# h, r: }; L# V3 } } PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB|RCC_PERIPHCLK_USART1! x& r9 [" C( P4 O |RCC_PERIPHCLK_USART2; 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 if (HAL_RCCEx_PeriphCLKConfig(& eriphClkInit) != HAL_OK)2 h7 q5 ?. p$ O{ //_Error_Handler(__FILE__, __LINE__); } 4 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); % \! U9 V, Q @ /**Configure the Systick */: a) |) s O$ P2 ]4 [; D( [& L! g HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);' w2 K. {9 V, w( ?3 h I# O4 u /* SysTick_IRQn interrupt configuration */ HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); } 0 V# D0 J( |, F) } void LED_Init()" g+ A; a' ~0 u { LED_GPIO_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = LED_PIN; 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 { HAL_IncTick(); }7 A% q( a" e9 ^0 v /**" 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 */ while (1)) _' j; L2 ] O4 j- O( Q; {5 d { } /* 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 `& } 2 p9 C9 d1 i& M: `- B7 J2 U 第八步、修改Platform.ini 配置文件,设置Jlink仿真器* G7 T1 _/ E" Y& K( z6 O [env:jlink_debug_and_upload] platform = ststm32 framework = stm32cube board = nucleo_f072rb debug_tool = custom+ c7 j7 K% D( ]" q debug_port = :2331- ?* j2 x7 n8 F. h) a' P debug_server = JlinkGDBServerCL -singlerun -if SWD- E3 H! a. H" w$ k' X/ S" w -select USB6 l% c0 \7 u( t -port 2331 -device STM32F072c8 第九步、编译文件,使用快捷键 ctrl+alt+b 编译,编译成功,会有提示1 N& b5 t: P5 V( i0 h 我只截取最下面一部分 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- 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& ~ 第十步,调试,,快捷键 F5启动
可以单步调试,可以F5运行,断点会显示在左侧3 B5 @( Y& M. f4 b) E! _$ @6 U 深夜发帖,有些困,有的地方写的不好,请大家谅解,有问题跟帖....- x1 ~. d: D2 x' Y % @0 q( G/ H h6 \0 h6 v9 a + U: r: D; S* n ! @2 w7 e1 H* O" F/ ` |
微信公众号
手机版
6 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参数,工程只能建立官网提供的板子。
开发者注意力都不在MCU功能上,而是维护工程文件上面。
PIO的价格,基本用户每月每人$10。http://platformio.org/pricing; E3 R% k8 G/ V0 L; f9 P% `: J
国内用户洗了睡吧,就算你交得起钱也会被墙,开发时还得自己维护整个工程文件。
你看的好详细,我都没发现收费...
说来惭愧啊...
看了以后可能只能用VSC编辑了
8 [. R3 K# Z0 |+ R4 e
不知道插件开发难不难,要是自己写个插件调用gcc编译的话就好了
我就是探索了下,社区版本有限制,现在又更新了,反正多了一个选择就是...
1 L6 E# P+ G- H1 f6 i1 K4 C
2楼留给自己,
附上完整工程
不需要,只要VSC+plarformIO IDE插件和STLink驱动或者Jlink驱动...
被你发现了...