Keil C51工程转VSCode Keil Assistant开发全过程
创始人
2024-05-15 11:57:22
0

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


  • ✨这里以stc15W408AS为例。
  • 📌相关篇《【开源分享】自制STC15W408AS开发板》
  • 📺编译-烧录演示:
    在这里插入图片描述

📋转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/stcgalpositional 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 RESETCMDshell 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 HANDSHAKEhandshake baud rate (default: 2400)-o OPTION, --option OPTIONset 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 
#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.7void 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);
}

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...