Keil C51工程转VSCode Keil Assistant开发全过程

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Keil C51工程转VSCode Keil Assistant开发全过程相关的知识,希望对你有一定的参考价值。

Keil C51工程转VSCode Keil Assistant开发全过程


  • 📺编译-烧录演示:

📋转VSCODE开发环境主要原因可能代码提示以及代码跳转功能,或者其他。

  • 🌿代码提示功能:
  • 🌿代码跳转功能

✅Keil C51工程转VSCode准备实施条件

  1. 电脑端已经实现了Keil C51开发。
  2. 电脑端已经安装了VSCODE软件。
  3. 电脑端已经安装了python。

🚩VSCode配置过程

  1. 在VSCode里面安装Keil Assistant插件。
  2. 给Keil Assistant插件配置Keil软件安装绝对路径。

  • 🔧stcgal烧录工具安装:(依赖python pip): pip install stcgal

🌻Keil工程转VSCODE

  1. 在转入到VSCODE前,先在Keil软件中将工程创建起来,并勾选生成HEX选项。

  2. 编译一遍,让其生成HEX的路径:creating hex file from ".\\Objects\\STC_Printf"...

  3. 在工程文件夹内,右键,选择通过VSCODE打开

  4. 添加头文件路径。

  • 🔰如果是第一次打开,显示波浪线,点击小灯泡,选择编辑includePath设置。

  • 🔨编译工程

  • 🛠命令行烧录

stcgal -p COM10 -P stc15 .\\Objects\\STC_Printf.hex
或者
stcgal -a -p COM10 -P stc15 .\\Objects\\STC_Printf.hex
//-a 用来控制串口芯片DTR 引脚让目标芯片复位,如果目标芯片启用了外部复位引脚P54时,可以手动按复位按键后,即可进入下载阶段。

  • -p COM10:串口端口号;
  • -P stc15:烧录目标芯片型号;
  • .\\Objects\\STC_Printf.hex:烧录文件路径。
    • 🗝烧录命令:stcgal -p COM10 -P stc15 .\\Objects\\STC_Printf.hex

⚡如果你的目标板没有实现UART DTR 流控制(不带免冷启动电路),看到 Wait for mcu, please cycle power: 之后,这是在提示你:请手动复位 mcu,让单片机进入 isp 模式

    • 🔑烧录命令:stcgal -a -p COM10 -P stc15 .\\Objects\\STC_Printf.hex

⚡如果你的目标板实现了UART DTR 流控制(带免冷启动电路),就不要添加带-a的参数,不然还需要去复位一次单片机,看到 Waiting for MCU: 之后,这是在提示你:请手动复位 mcu,让单片机进入 isp 模式;需要手动去复位或者重启目标板。(可参考前面的相关开源开发板电路,了解STC免冷启动电路设计)

  • 📓stcgal命令行使用帮助
C:\\Users\\Administrator>stcgal -h
usage: stcgal [-h] [-a] [-r RESETCMD] [-P stc89,stc12a,stc12b,stc12,stc15a,stc15,stc8,usb15,auto] [-p PORT]
              [-b BAUD] [-l HANDSHAKE] [-o OPTION] [-t TRIM] [-D] [-V]
              [code_image] [eeprom_image]

stcgal 1.6 - an STC MCU ISP flash tool
(C) 2014-2018 Grigori Goronzy and others
https://github.com/grigorig/stcgal

positional arguments:
  code_image            code segment file to flash (BIN/HEX)
  eeprom_image          eeprom segment file to flash (BIN/HEX)

options:
  -h, --help            show this help message and exit
  -a, --autoreset       cycle power automatically by asserting DTR
  -r RESETCMD, --resetcmd RESETCMD
                        shell command for board power-cycling (instead of DTR assertion)
  -P stc89,stc12a,stc12b,stc12,stc15a,stc15,stc8,usb15,auto, --protocol stc89,stc12a,stc12b,stc12,stc15a,stc15,stc8,usb15,auto
                        protocol version (default: auto)
  -p PORT, --port PORT  serial port device
  -b BAUD, --baud BAUD  transfer baud rate (default: 19200)
  -l HANDSHAKE, --handshake HANDSHAKE
                        handshake baud rate (default: 2400)
  -o OPTION, --option OPTION
                        set option (can be used multiple times, see documentation)
  -t TRIM, --trim TRIM  RC oscillator frequency in kHz (STC15+ series only)
  -D, --debug           enable debug output
  -V, --version         print version info and exit

⛳注意事项

  • 🍁在Keil工程中,设置里面如果没有勾选生成HEX文件选项,那么在VSCODE里面,编译时也不会生成Hex文件的,本质上,在VSCODE里面,编译还是调用的Keil软件本身。

🌼测试工程

  • 🔖基于stc15w408as单片机。
//STC15W408AS,512字节的RAM,8K FLASH
//晶振频率:11.0592MHz
//波特率:115200
//stcgal -p COM10 -P stc15 .\\Objects\\STC_Printf.hex
#include <STC15F2K60S2.H>
#include "intrins.h"
#include "stdio.h"

bit busy;
//#define     FOSC    11059200UL
//#define     BAUD    115200

//sfr P_SW1   = 0xA2;             //外设功能切换寄存器1

#define S1_S0 0x40              //P_SW1.6
#define S1_S1 0x80              //P_SW1.7


void Delay500ms();
void UartInit(void);        //115200bps@11.0592MHz
void SendData(unsigned char dat);
void SendString(char *s);

void main()

    P1M0 = 0x00;
    P1M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    UartInit();
    Delay500ms();
    SendString("STC15F2K60S2\\r\\nUart Test !\\r\\n");

    while (1)
    
        P17 = 0x01;
        Delay500ms();
        printf("stcgal Tool Programmer \\n\\r");
        P17 = 0x00;
        Delay500ms();
        printf("Hello World \\r\\n");
//  SendString("STC15F2K60S2\\r\\nUart Test !\\r\\n");
 Delay500ms();
 printf("perseverance51 \\n\\r");
    



void UartInit(void)     //115200bps@11.0592MHz

    SCON = 0x50;        //8位数据,可变波特率
    AUXR |= 0x01;       //串口1选择定时器2为波特率发生器
    AUXR &= 0xFB;       //定时器时钟12T模式
    T2L = 0xFE;         //设置定时初始值
    T2H = 0xFF;         //设置定时初始值
    AUXR |= 0x10;       //定时器2开始计时


/*----------------------------
发送串口数据
----------------------------*/
void SendData(unsigned char dat)

     SBUF = dat;
    while (!TI); //等待前一个数据发送完成
    TI = 0;//清除发送标志


char putchar(char dat)

    SendData(dat);
    return dat;

/*----------------------------
发送字符串
----------------------------*/
void SendString(char *s)

    while (*s)                  //检测字符串结束标志
    
        SendData(*s++);         //发送当前字符
    


void Delay500ms()       //@11.0592MHz

    unsigned char i, j, k;
    _nop_();
    _nop_();
    i = 22;
    j = 36;
    k = 227;
    do
    
        do
        
            while (--k);
        
        while (--j);
    
    while (--i);





以上是关于Keil C51工程转VSCode Keil Assistant开发全过程的主要内容,如果未能解决你的问题,请参考以下文章

我安的keil中找不到想要的芯片,啥原因?如何设置keil中的芯片类型?KEIL MDK 与keil c51有啥区别?

在keil环境中遍了一段C51的程序后怎么编译?

keil c51为啥按f12时不能跟踪函数

KEIL C51程序中如何嵌入汇编

求助,安装Keil for ARM 后Keil C51用不成了,如何兼容

KEIL、uVision、RealView、MDK、KEIL C51有啥区别?