经过几天的摸索(是我自己愚钝),终于实现了使用VSC调试,实例程序是点灯(菜鸟的第一课是不是永远是点灯啊,)....9 H2 z! _2 n! K& s/ K) {8 d2 g 废话不多说,下面开始本次探索的简单介绍,不详细或者遗漏的地方,需要等朋友跟帖,我会把我知道的分享给大家:)& d# k4 {. W- `$ Y+ f$ f " V4 k" H. x( t 第一步,下载安装VS Code,不知道的同学问度娘,我这里就不啰嗦了,直接附上官网下载地址 点我下载 X64 1.15.1 其它版本请移步官网根据需求下载5 e/ S& @' x- ~+ k2 M: N# I 第二步,安装PlatformIO IDE,具体过程,先打开vscode,然后点插件->搜索->安装 第三步,重启VSC,然后就可以建立工程了,在本地任意位置新建文件夹(也可以是已经存在的,测试嘛,最好是空文件夹),然后记录路径 使用VSC->文件->打开文件夹 9 T4 T( N! H; R- | 第四步,使用快捷键 ctrl+alt+i 初始化目录4 t# d+ ]1 ^# X0 M- D4 ^" [8 p, n 第五步,选择一个已经存在的板子,我是自己画的 单片机型号是STM32F072C8(搜我的帖子,开源串口调试工具),就是这块板子,但Platform不会有它的,所以我选择的是nucleo_f072rb 第六步、新建文件,在src文件夹路径下右键,新建文件main.c/ |3 s8 R9 R% y3 B, V 7 b, w( j% P- q; o* T$ i i 第七步、打开main.c,添加代码 #include "stm32f0xx_hal.h" #define LED_PIN GPIO_PIN_13 #define LED_GPIO_PORT GPIOC #define LED_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()" j- ^% h% L. e& d9 { G1 s* C* B" J void LED_Init(); int main(void)! Z9 e" v! M: Z4 `3 E9 s8 u; M { HAL_Init(); SystemClock_Config(); LED_Init();: W! U/ k4 Q l1 }$ p7 d while (1) {, n! I. j& F7 k" g! y HAL_GPIO_TogglePin(LED_GPIO_PORT, LED_PIN); HAL_Delay(1000);5 G- X' m* |1 Q5 x- a5 l+ g, Y" k) v } } /** System Clock Configuration */ void SystemClock_Config(void)' I1 C7 w0 b) g- X+ o) f# } { RCC_OscInitTypeDef RCC_OscInitStruct;6 u* l- ~9 B3 j, t1 O RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_PeriphCLKInitTypeDef PeriphClkInit; /**Initializes the CPU, AHB and APB busses clocks 0 Z( ?$ w# w0 V. n! ? */0 |# S& W: n2 J' ~6 o, M RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48;# Z9 h$ [3 J% Y0 _! \' K+ x RCC_OscInitStruct.HSI48State = RCC_HSI48_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { //_Error_Handler(__FILE__, __LINE__); } " _- \, ~) K1 @: P /**Initializes the CPU, AHB and APB busses clocks */! w, R, P9 H3 P6 v" ~& `7 ? RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK& c0 P/ r0 d0 y% J |RCC_CLOCKTYPE_PCLK1;2 s* e; O: k: h% W3 |2 X% `$ o RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI48;8 J5 F7 ] r* z# E6 s& O% l RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;! a2 q, a8 E) ] if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) {& ^8 l& k. Q, o0 s; W7 g2 C" L9 | //_Error_Handler(__FILE__, __LINE__);6 z" }, o0 w9 w1 \& J) ?3 H9 K } / a' s6 F J) q0 ^# r6 j PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB|RCC_PERIPHCLK_USART1 |RCC_PERIPHCLK_USART2; PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1;0 `+ c+ w$ F5 b/ z, `' |- s( N; m PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;( V! s" [* ^# ~. u2 G PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_HSI48; if (HAL_RCCEx_PeriphCLKConfig(&eriphClkInit) != HAL_OK)9 P( U$ l* L2 z) ~3 ^/ p { //_Error_Handler(__FILE__, __LINE__); }2 P* b+ h# x- a' d( q! G2 u /**Configure the Systick interrupt time 7 c B3 t* a' `5 G8 x0 D9 `: J$ [ */ HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); * D* F. c- x( y. ]% h3 \ /**Configure the Systick */; X$ i6 B; c, U5 R. f HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);& B0 q4 b8 y$ {. [- E% {4 o5 I % S) A5 P6 \' ~ /* SysTick_IRQn interrupt configuration */ HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); }# G9 z! I! k. v. |/ `" Z! p9 l & ?) v# y8 [2 J! D void LED_Init(); h: \0 Q1 x e {9 J% p5 h$ L9 C/ H; X, n l LED_GPIO_CLK_ENABLE();/ [. x3 U/ g4 ~( C! C0 o2 ? GPIO_InitTypeDef GPIO_InitStruct;- |& D) w& P( e0 M( O. U+ s GPIO_InitStruct.Pin = LED_PIN; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;$ h6 b: G) G4 o5 N8 w1 f GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; HAL_GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);- k6 ^2 W+ u1 K( b \+ U0 ^4 _ } - r T; i" U y4 [! @- ~! L void SysTick_Handler(void)5 k/ {3 g* L) N. x& j* x { HAL_IncTick(); }9 E( z" m1 ] s9 V; E1 W /** * @brief This function handles Hard fault interrupt.5 c' E) i9 ]4 R4 r */3 G0 p1 v% h6 q+ N0 v void HardFault_Handler(void)# c8 @* c7 ~ U" x4 W U {; D/ f/ @7 a) n6 T /* USER CODE BEGIN HardFault_IRQn 0 */! l1 {- k1 `* g- K# r6 v /* USER CODE END HardFault_IRQn 0 */ while (1) {- ^3 V( I: f2 ]5 ] }0 p5 U/ Y) G6 Y% S) D# F /* USER CODE BEGIN HardFault_IRQn 1 */ /* USER CODE END HardFault_IRQn 1 */ }, P B) J/ H: D; O' g 8 x& t" T: m1 c# U/ G G 7 R7 p) B$ b) x 第八步、修改Platform.ini 配置文件,设置Jlink仿真器+ x V* W- k: @! a" u8 l [env:jlink_debug_and_upload] platform = ststm32) J6 K; H0 u$ y" s, U framework = stm32cube" I) C+ \1 B' t- ?- `2 F4 ] board = nucleo_f072rb- ?7 ~8 K3 o9 c3 m4 m, b, G. ^ debug_tool = custom4 V- Y" l1 A; Q; ^% J, r debug_port = :2331/ e8 u8 T7 I" H5 m7 Y debug_server = JlinkGDBServerCL -singlerun4 Q- t& L( J/ p -if SWD- ]- u7 a8 @* ` B7 }5 |. S, Y1 x -select USB -port 2331 -device STM32F072c8: M7 j5 ~$ Q) S' E; p' x , |* v% J# k6 m 第九步、编译文件,使用快捷键 ctrl+alt+b 编译,编译成功,会有提示2 M$ x5 K6 p# z4 E z7 H3 E 我只截取最下面一部分4 _+ b, e) G" K4 E: P2 R& q/ q1 Y 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: i @1 x4 v! X, }4 L0 ^# n ============================================== [SUCCESS] Took 9.26 seconds ============================================== 5 N' S6 x+ ]: N1 s: p8 N+ b 第十步,调试,,快捷键 F5启动1 U/ m9 c- G' N f; q% `2 v # M8 e2 c* q" B6 C5 H# f 可以单步调试,可以F5运行,断点会显示在左侧 - G7 d3 c1 H5 z2 p 深夜发帖,有些困,有的地方写的不好,请大家谅解,有问题跟帖.... $ p7 O1 ]: c, E { . G# k+ x. L2 u! a$ P5 q% m+ N 2 @8 z+ y- ]9 l" G$ N+ d: J |
6 L: p5 J) h' E, c' A' e& f
今天跟踪试验了一把:
无法打开“PIO Home”: Could not start PIO Home server: Error: timeout。
又是被墙,只能按楼主的快捷键组合操作,不能按官网的有菜单指导http://docs.platformio.org/en/latest/ide/vscode.html#quick-start
另外debug配置还得自己写J-Link参数,工程只能建立官网提供的板子。
开发者注意力都不在MCU功能上,而是维护工程文件上面。! {1 E7 X" y, k. g' p
PIO的价格,基本用户每月每人$10。http://platformio.org/pricing
国内用户洗了睡吧,就算你交得起钱也会被墙,开发时还得自己维护整个工程文件。
你看的好详细,我都没发现收费...; i2 o! T" F' I- Y* T" _
说来惭愧啊...$ F: \* x" N* B. d
看了以后可能只能用VSC编辑了1 {: ^1 Q9 u, k9 J
& l( ~1 ?( b* n& R. ~& k' @
不知道插件开发难不难,要是自己写个插件调用gcc编译的话就好了
我就是探索了下,社区版本有限制,现在又更新了,反正多了一个选择就是...
2楼留给自己,
附上完整工程
不需要,只要VSC+plarformIO IDE插件和STLink驱动或者Jlink驱动...
被你发现了...