搜索
bottom↓
回复: 15

使用VSC调试STM32

[复制链接]

出0入0汤圆

发表于 2017-9-3 01:06:07 | 显示全部楼层 |阅读模式
源码工程  


经过几天的摸索(是我自己愚钝),终于实现了使用VSC调试,实例程序是点灯(菜鸟的第一课是不是永远是点灯啊,)....

废话不多说,下面开始本次探索的简单介绍,不详细或者遗漏的地方,需要等朋友跟帖,我会把我知道的分享给大家:)

第一步,下载安装VS Code,不知道的同学问度娘,我这里就不啰嗦了,直接附上官网下载地址
点我下载 X64 1.15.1  其它版本请移步官网根据需求下载

第二步,安装PlatformIO IDE,具体过程,先打开vscode,然后点插件->搜索->安装
  

第三步,重启VSC,然后就可以建立工程了,在本地任意位置新建文件夹(也可以是已经存在的,测试嘛,最好是空文件夹),然后记录路径
使用VSC->文件->打开文件夹

第四步,使用快捷键 ctrl+alt+i  初始化目录

第五步,选择一个已经存在的板子,我是自己画的  单片机型号是STM32F072C8(搜我的帖子,开源串口调试工具),就是这块板子,但Platform不会有它的,所以我选择的是nucleo_f072rb

第六步、新建文件,在src文件夹路径下右键,新建文件main.c
  

第七步、打开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()

void LED_Init();

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  LED_Init();

  while (1)
  {
    HAL_GPIO_TogglePin(LED_GPIO_PORT, LED_PIN);
    HAL_Delay(1000);
  }
}
/** System Clock Configuration
*/
void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
  RCC_PeriphCLKInitTypeDef PeriphClkInit;

    /**Initializes the CPU, AHB and APB busses clocks
    */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48;
  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__);
  }

    /**Initializes the CPU, AHB and APB busses clocks
    */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI48;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
  {
    //_Error_Handler(__FILE__, __LINE__);
  }

  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB|RCC_PERIPHCLK_USART1
                              |RCC_PERIPHCLK_USART2;
  PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1;
  PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;
  PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;

  if (HAL_RCCEx_PeriphCLKConfig(&eriphClkInit) != HAL_OK)
  {
    //_Error_Handler(__FILE__, __LINE__);
  }

    /**Configure the Systick interrupt time
    */
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

    /**Configure the Systick
    */
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  /* SysTick_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}

void LED_Init()
{
  LED_GPIO_CLK_ENABLE();
  GPIO_InitTypeDef GPIO_InitStruct;
  GPIO_InitStruct.Pin = LED_PIN;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  HAL_GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);
}

void SysTick_Handler(void)
{
  HAL_IncTick();
}

/**
* @brief This function handles Hard fault interrupt.
*/
void HardFault_Handler(void)
{
  /* USER CODE BEGIN HardFault_IRQn 0 */

  /* USER CODE END HardFault_IRQn 0 */
  while (1)
  {
  }
  /* USER CODE BEGIN HardFault_IRQn 1 */

  /* USER CODE END HardFault_IRQn 1 */
}




第八步、修改Platform.ini 配置文件,设置Jlink仿真器
[env:jlink_debug_and_upload]
platform = ststm32
framework = stm32cube
board = nucleo_f072rb
debug_tool = custom
debug_port = :2331
debug_server = JlinkGDBServerCL
    -singlerun
    -if
    SWD
    -select
    USB
    -port
    2331
    -device
    STM32F072c8




第九步、编译文件,使用快捷键 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 filename
3852       1080    1568    6500    1964 .pioenvs\jlink_debug_and_upload\firmware.elf
============================================== [SUCCESS] Took 9.26 seconds ==============================================


第十步,调试,,快捷键 F5启动

  

可以单步调试,可以F5运行,断点会显示在左侧

深夜发帖,有些困,有的地方写的不好,请大家谅解,有问题跟帖....

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2017-9-3 08:18:05 | 显示全部楼层
LZ有遇到过VSCODE结构体里面的成员,在自动补完时没有显示的情况?

出0入0汤圆

发表于 2017-9-3 11:06:02 | 显示全部楼层
还能这样调代码啊,赶紧试试

出0入134汤圆

发表于 2017-9-3 17:10:42 | 显示全部楼层
试了下hal blink的例程,stm32f411re代码下进去可以跑,stm32f103c8t6跑不了,不知道什么原因。

出0入0汤圆

发表于 2017-9-3 18:10:02 来自手机 | 显示全部楼层
顶顶,不错,谢谢分享。

出0入0汤圆

发表于 2017-9-4 08:20:21 来自手机 | 显示全部楼层
可以玩玩,用还是算了

出0入0汤圆

发表于 2017-9-4 08:41:20 | 显示全部楼层
什么编译器?

出0入0汤圆

 楼主| 发表于 2017-9-4 09:02:01 | 显示全部楼层
ghostxdy 发表于 2017-9-3 08:18
LZ有遇到过VSCODE结构体里面的成员,在自动补完时没有显示的情况?

我用的还是比较少,暂时没用遇到~

出0入0汤圆

 楼主| 发表于 2017-9-4 09:02:55 | 显示全部楼层
elecfun 发表于 2017-9-3 17:10
试了下hal blink的例程,stm32f411re代码下进去可以跑,stm32f103c8t6跑不了,不知道什么原因。 ...

103C8T6的也下载进去了吗?

不能调试还是不能执行啊?

出0入0汤圆

 楼主| 发表于 2017-9-4 09:06:17 | 显示全部楼层

详情可以看下  PlatformIO IDE官网

http://platformio.org/

出0入22汤圆

发表于 2017-9-4 10:09:24 | 显示全部楼层
请问一下,ctrl+alt+i,这些快捷键,找不到对应的菜单呢,楼主是如何摸索出来的?

出0入0汤圆

 楼主| 发表于 2017-9-4 11:33:16 | 显示全部楼层
zxq6 发表于 2017-9-4 10:09
请问一下,ctrl+alt+i,这些快捷键,找不到对应的菜单呢,楼主是如何摸索出来的? ...

这个在它的主页上有个 教程,教程里写的

另外,它非常多的操作都是有快捷键的,所以,可以打开设置界面,看看快捷键都是啥

曾经看到很多设计都是全程快捷键,我只记下常用的几个...

出0入22汤圆

发表于 2017-9-4 11:55:21 | 显示全部楼层
wofei3344 发表于 2017-9-4 11:33
这个在它的主页上有个 教程,教程里写的

另外,它非常多的操作都是有快捷键的,所以,可以打开设置界面 ...

你说的他,是指VSC还是后面安装的那个编译器?

出0入0汤圆

 楼主| 发表于 2017-9-6 15:43:11 | 显示全部楼层
zxq6 发表于 2017-9-4 11:55
你说的他,是指VSC还是后面安装的那个编译器?

VSC只是查看代码,编辑代码用的,编译调试是后面装的那个插件

出100入101汤圆

发表于 2017-9-6 20:16:36 来自手机 | 显示全部楼层
收藏,学习

出0入0汤圆

发表于 2017-9-7 08:40:35 | 显示全部楼层
这个厉害了,赶紧试试,完整的VS太庞大了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-18 14:31

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表