使用宇宙第一IDE---Visual Stdio编写调试STM32的方法,智能补全,牛逼的调试能力

2019-08-14 05:44发布

去年因为某些原因学习了一下C#,主要是为了写单片机上位机用的,所以接触了一下Visual Stdio 2015这个IDE,用完感觉是真心好,宇宙第一IDE一点毛病都没有。
那时候是单片机,上位机在一起学习,一边用着KEIL,一边用着Visual Stdio,简直就是冰火两重天(当然Keil也有一些优点,毕竟是ARM旗下的IDE嘛)
首先说一下Visual Stdio:①智能补全(再加上VassistX智能补全,简直完美,打几个字母,一条语句就出来了)
                                ②代码高亮显示,关键字,宏定义等等,不同的东西,不同的颜 {MOD}
                                ③调试:太强大了,在线调试,条件断点,动态变量,还有动态变量的波形图(配上STM32的ADC姑且可以算是个示波器吧,当然跟上千的示波器没法比)
                                ④文件管理也很强大,还能自己写Makefile(当然我这种垃圾是不会的)
                                ⑤实时监控STM32的所有寄存器(在SWD或者JTAG有效的情况下)
                                ⑥很多啊,我这种小菜鸟也就知道着一些,VS的强大我只摸到冰山一角(冰山一角的一角),毕竟是宇宙第一IDE
                         缺点 ①呵,软件大,大,大,除了大,还是大,配置太低的电脑可能有些吃力,当然VS已经优化很多了,至少一般的电脑很少出现卡顿,很流畅。
                                ②Keil调试的时候有seconds这个时间,可以调试时间,但VS上没有(或许是有的,但我无能没发现也不一定)
                                ③(等等......)
                                下面放点图吧(勿喷)

演示图.jpg 智能提示.jpg
首先要准备什么东西
①Visual stdio(版本么随便你吧)
②AvssistX(这个是只能补全代码的插件,可自行百度下破解版,如果不用,也可以用Vs本身就自带的智能补全,也很强大,但这个插件很强)
③Visual GDB(这个是必须的,要编写,调试STM32,这个是必须的,同样还能在线调试Linux,通过SSH,这里就不说了,反正我也不会,这个也百度下破解版)
④VS VIM(这个插件是对于喜欢离开鼠标的狂人,是和Linux的VIM一样的文本编辑器,解放双手,鼠标是程序员思维的破坏者嘛!我暂时还没体会到,但用着很爽)

进入正题:怎么用VS编写STM32并且将程序下载到STM32中
下载进去暂时有两种方法
①通过烧写软件(需要HEX文件,VS生成的16进制文件是ihex,直接把后缀改成hex就能下载了)
②各种在线调试器(什么J-Link啊,ST-Link啊,啦啦啦啦啦,你们都懂的了)
第一:怎么用Visual GDB编写程序,直接上图

步骤一:文件-》新建-》项目
GDB配置1.jpg
步骤二:如图选....英文打着麻烦,我四级还没过呢,......(努力中,不过四级大学不毕业)
GDB配置2.jpg
步骤三:也是吧..按着图来,下载两个Devices(STM32 Devices 和 Atmel ARM Devices)(我也不知道哪个有用,我看我就下啦俩,就全上图了)
GDB配置3.jpg
步骤四:然后按照图示查找自己开发板STM32的型号,选择后NEXT就行啦
注:下面的Execute From意思是吧程序下载到哪里..(当然是选FLASH)
还有C library Type是啥,恩,不知道,我只知道,如果要用Visual GDB内部的控制台显示printf什么的就要选下拉框的第一个,(缺省,不会拼,就是下拉框地最短的那一个)
GDB配置4.jpg
步骤五:就下来就是选使用的库了,有HAL库,还有固件库,还有FreeRTOS的,自己选吧,反正我是固件库
在下面是初始LED,根据自己开发板选GPIO和Pin,下面闪烁时间默认就好了(主要是用来看看链接成功不成功)
GDB配置5.jpg

步骤六:这里是选调试器的,如果使用烧录器下载,这里....emmmmmm,我也不知道了,反正后面是用ihex文件烧录的,梗调试器就没啥关系了.....
注意!:::::!!!!J-LINK的一定要选SWD(low-level)
注意!:::::!!!!J-LINK的一定要选SWD(low-level)
注意!:::::!!!!J-LINK的一定要选SWD(low-level)
三遍!!!!!!!!!!!!!!!!!!!!!!!!!
然后finish
GDB配置6.jpg
步骤七:安装Jlink的驱动了,交WinUSB(直接点图示的那个就可以开始了)
注意:一定要将调试器连上电脑
然后一直等他结束吧
GDB配置7.jpg
GDB配置8.jpg
GDB配置9.jpg


然后就好了嘛
点本地Windows调试器,如果灯闪了那就是配置好了
(自己排版一下文件,按着自己的喜好排,爱怎么着怎么着,排好之后到处模板就好了)
接下来,我尼玛,智能补全呢,高亮显示呢,恩?都打灰机去了吗!?
调试1.jpg
不急,接着看:选你的工程(注意不是第一行的解决方案,右击选Visual GDB Project......)
调试2.jpg
然后选IntelLisense Setting把IntelLisense engine下拉选择第二个(中间那个,如图)就能高亮加智能补全了,最好是加上AVssistX,会更好
如果AVssistX出现注释会有红 {MOD}波浪线的话
菜单栏选AVssistX->Visual Assist Options->underlines,里面两个全部取消勾选就行了
调试3.jpg
最后一个就是包含头文件目录的
上图(包含进来就好了)
调试4.jpg
好了接下来就开始编写你的程序吧(用cpp文件名就好了,不用改成.c)
如果还有一些问题,就在下面留言或者百度吧,我能回答的我尽量回答,回答不了的只能怪我无能咯。
好了全手打,俺要睡觉了,困
临走来几张调试的图片
盗图.jpg
好吧...这一张图示盗的.....下面一张是自己的
效果图.jpg
结束睡觉!嘻嘻

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
35条回答
1473421439
1楼-- · 2019-08-17 00:19
我想请问一下,gdb是不是不能查看io口实时状态啊
17602515236
2楼-- · 2019-08-17 00:39
 精彩回答 2  元偷偷看……
39035605
3楼-- · 2019-08-17 00:41
学习了 学习了。。。
1473421439
4楼-- · 2019-08-17 03:12
诶 原子的那个sys.c文件中最后有一段汇编的代码,vs显示错误,然后我在keil里看了一下,虽然旁边也有个叉号,但是编译的时候不会报出这个错误,不知道怎么搞,我还是用keil吧……
jh442755
5楼-- · 2019-08-17 07:10
我想问一下,我按照你的方法配置了vs2015,在加入原子的delay头文件和源文件后调用delay_init()函数之类的都会一直报错,可以帮我看下吗?谢谢你了
报错内容如下
严重性        代码        说明        项目        文件        行        禁止显示状态
错误                undefined reference to `delay_ms(unsigned short)'        EmbeddedProject1        D:桌面EmbeddedProject1EmbeddedProject1LEDBlink.cpp        35       
错误                undefined reference to `delay_ms(unsigned short)'        EmbeddedProject1        D:桌面EmbeddedProject1EmbeddedProject1LEDBlink.cpp        32       
错误                undefined reference to `delay_init()'                                EmbeddedProject1        D:桌面EmbeddedProject1EmbeddedProject1LEDBlink.cpp        18

我的工程目录如下       


我的代码如下:
[mw_shl_code=c,true]#include <stm32f10x_gpio.h>
#include <stm32f10x_rcc.h>
#include <delay.h>
#include <sys.h>
#include <usart.h>

void Delay()
{
        int i;
        for (i = 0; i < 1000000; i++)
                asm("nop");
}

int main()
{
        GPIO_InitTypeDef GPIO_InitStructure;

  delay_init();

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  for (;;)
  {
          GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_SET);
          //Delay();
          delay_ms(500);
          GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_RESET);
          //Delay();
          delay_ms(500);
  }
}
[/mw_shl_code]

我已经将头文件目录按照你的演示加入了头文件目录,但是还是报错,尝试将这几个文件加入系统的头文件目录,也就是官方库文件所在的目录来包含但是问题并没有解决,
17602515236
6楼-- · 2019-08-17 11:22
本帖最后由 17602515236 于 2017-8-21 12:04 编辑
jh442755 发表于 2017-8-21 11:45
我想问一下,我按照你的方法配置了vs2015,在加入原子的delay头文件和源文件后调用delay_init()函数之类的 ...

你的3个错误的意思就是没有定义函数,
你有没有在VisualGDB里包含头文件的文件夹(一定要最最底层的文件夹)或者进sys.h和sys.c看一下有没有错误,有可能是C语言标准不一样,导致有些出入,可能会稍微变动一点(VS是支持c11的,keil是支持c99,c11兼容c99,但略微有点不同,可以忽略)

一周热门 更多>