神农鼎 发表于 2025-7-5 12:17:41

图形化程序自动生成, STC15F2K60S2系列各功能模块, AiCube-ISP-V6.95Z,7/18




图形化程序自动生成, STC15F2K60S2系列各功能模块,
AiCube@ISP-V6.95Z,7/18

图形化程序自动生成,先下载 强大的 AiCube-ISP-V6.95Z,
ISP烧录及图形化各功能模块程序自动生成器

深圳国芯人工智能有限公司-工具软件

最新 STC15F2K60S2 系列 数据手册,可从此下载

建议用强大的 AiCube-ISP-V6.95Z,ISP烧录及图形化各功能模块程序自动生成器,

在学习完《单片机原理及应用》的相应原理部分后,来图形化程序自动生成加速应用
STC15F2K60S2系列各功能模块之AiCube程序自动生成@AiCube-ISP-V6.95Z
AiCube-ISP-V6.95Z 软件发布,又名 STC-ISP-V6.95Z
AiCube工具 已支持STC89C52RC系列的各功能模块自动配置及程序框架自动生成
AiCube工具 已支持STC15F2K60S2系列的各功能模块自动配置及程序框架自动生成
AiCube工具 已支持STC15W4K32S4系列的各功能模块自动配置及程序框架自动生成
AiCube工具 已支持Ai8051U系列的各功能模块自动配置及程序框架自动生成
AiCube工具 已支持STC8H8K64U系列的各功能模块自动配置及程序框架自动生成
AiCube工具 已支持STC32G12K128系列的各功能模块自动配置及程序框架自动生成
===管脚少的型号,可以用 同系列 管脚多的 型号 来配置,图形化自动生成程序

点击 【AiCube 菜单】,选择MCU型号,需要 自动生成各功能模块程序的 MCU型号:
1, STC15F2K60S2@AiCube-选择要自动配置生成程序的MCU型号STC15F2K60S2系列


如上点击【确定按钮】自动配置好 后续 KEIL C51编译器 的编译及链接选项:
并设置自动配置完成后,是否用 KEIL 自动打开 本项目
2, STC15F2K60S2@AiCube-设置KEIL编译器连接器的配置项, 用默认是最优


通知 AiCube,MCU的系统时钟 是跑的内部高速IRC时钟 24MHz:
根据实际情况输入:
24MHz, 22.1184MHz,12MHz, 11.0592MHz等
后续才好 自动计算生成【定时器,串行口,软件延时】的程序
ISP 烧录程序时,也要选择对应的 时钟源和时钟频率
3, STC15F2K60S2@AiCube-通知MCU的工作时钟频率,方便定时器串行口软件延时自动计算


设置 外部中断 0:
4, STC15F2K60S2@AiCube-配置外部中断0


设置 外部中断 1:
5, STC15F2K60S2@AiCube-配置外部中断0-1


设置 外部中断 2:
6, STC15F2K60S2@AiCube-配置外部中断0-1-2


设置 外部中断 3:
7, STC15F2K60S2@AiCube-配置外部中断0-1-2-3


设置可16位自动重载的定时器 0:
8, STC15F2K60S2@AiCube-配置定时器0-16位自动重装载


9, 在图形化 I/O 配置中,设置 串口1/串口2 分别在哪些I/O上


设置 串口 1,可用 T2或T1 做波特率发生器
串口 1,使用 16位自动重载 的定时器 1做波特率发生器
A, 波特率 = 系统时钟 / 4 /
B, 波特率 = 系统时钟 / 4 / / 12
10, STC15F2K60S2@AiCube-配置-串行口1-定时器1做波特率发生器


设置 串口 2,只能用 T2 做波特率发生器
串口 2,使用 16位自动重载 的定时器 2做波特率发生器
A, 波特率 = 系统时钟 / 4 /
B, 波特率 = 系统时钟 / 4 / / 12
11, STC15F2K60S2@AiCube-配置-串行口2-定时器2做波特率发生器


一路 设置下来,最后点击 那个 播放键,
自动产生 需要的 Keil C51 项目
12, STC15F2K60S2@AiCube-点击那个播放的按键-是产生KEIL-C51项目

点击 【确定按钮】后,KEIL C51 会 自动打开 这次自动生成的工程项目

下面这个截图,展示了 INT0/INT1 部分:
13, STC15F2K60S2@AiCube-查看产生的KEIL-C51项目-外部中断0-1, 中断服务程序


14, STC15F2K60S2@AiCube-查看产生的KEIL-C51项目-外部中断2-3, 中断服务程序


15, STC15F2K60S2@AiCube-查看产生的KEIL-C51项目-定时器0, 中断服务程序


16, STC15F2K60S2@AiCube-查看产生的KEIL-C51项目-串口1, 中断服务程序


17, STC15F2K60S2@AiCube-查看产生的KEIL-C51项目-串口2, 中断服务程序


STC15F2K60S2系列各功能模块之AiCube 操作步骤图片, 从附件下载, 2025/7/18

STC15F2K60S2系列各功能模块之AiCube程序自动生成@AiCube-ISP-V6.95Z



神农鼎 发表于 2025-7-8 23:36:34




神农鼎 发表于 2025-7-8 23:36:44

//<<AICUBE_USER_HEADER_REMARK_BEGIN>>
////////////////////////////////////////
// 在此添加用户文件头说明信息
// 文件名称: main.c
// 文件描述:
// 文件版本: V1.0
// 修改记录:
//   1. (2025-07-08) 创建文件
////////////////////////////////////////
//<<AICUBE_USER_HEADER_REMARK_END>>


#include "config.h"//默认已包含stdio.h、intrins.h、ai_usb.h等头文件


//<<AICUBE_USER_INCLUDE_BEGIN>>
// 在此添加用户头文件包含
//<<AICUBE_USER_INCLUDE_END>>


//<<AICUBE_USER_GLOBAL_DEFINE_BEGIN>>
// 在此添加用户全局变量定义、用户宏定义以及函数声明
//<<AICUBE_USER_GLOBAL_DEFINE_END>>




////////////////////////////////////////
// 项目主函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void main(void)
{
    //<<AICUBE_USER_MAIN_INITIAL_BEGIN>>
    // 在此添加用户主函数初始化代码
    //<<AICUBE_USER_MAIN_INITIAL_END>>

    SYS_Init();

    //<<AICUBE_USER_MAIN_CODE_BEGIN>>
    // 在此添加主函数中运行一次的用户代码
    //<<AICUBE_USER_MAIN_CODE_END>>

    while (1)
    {
      //<<AICUBE_USER_MAIN_LOOP_BEGIN>>
      // 在此添加主函数中用户主循环代码
      //<<AICUBE_USER_MAIN_LOOP_END>>
    }
}

////////////////////////////////////////
// 系统初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void SYS_Init(void)
{
    P0M0 = 0x00; P0M1 = 0x00;         //初始化P0口为准双向口模式
    P1M0 = 0x00; P1M1 = 0x00;         //初始化P1口为准双向口模式
    P2M0 = 0x00; P2M1 = 0x00;         //初始化P2口为准双向口模式
    P3M0 = 0x00; P3M1 = 0x00;         //初始化P3口为准双向口模式
    P4M0 = 0x00; P4M1 = 0x00;         //初始化P4口为准双向口模式
    P5M0 = 0x00; P5M1 = 0x00;         //初始化P5口为准双向口模式
    P6M0 = 0x00; P6M1 = 0x00;         //初始化P6口为准双向口模式
    P7M0 = 0x00; P7M1 = 0x00;         //初始化P7口为准双向口模式

    CLK_Init();                         //时钟模块初始化
    TIMER0_Init();                      //定时器0初始化
    UART1_Init();                     //串口1初始化
    UART2_Init();                     //串口2初始化
    EXTI0_Init();                     //INT0初始化
    EXTI1_Init();                     //INT1初始化
    EXTI2_Init();                     //INT2初始化
    EXTI3_Init();                     //INT3初始化

    //<<AICUBE_USER_INITIAL_CODE_BEGIN>>
    // 在此添加用户初始化代码
    //<<AICUBE_USER_INITIAL_CODE_END>>

    EnableGlobalInt();                  //使能全局中断
}

////////////////////////////////////////
// 微秒延时函数
// 入口参数: us (设置延时的微秒值)
// 函数返回: 无
////////////////////////////////////////
void delay_us(uint16_t us)
{
    do
    {
      NOP(14);                        //(MAIN_Fosc + 500000) / 1000000 - 10
    } while (--us);
}


////////////////////////////////////////
// 毫秒延时函数
// 入口参数: ms (设置延时的毫秒值)
// 函数返回: 无
////////////////////////////////////////
void delay_ms(uint16_t ms)
{
    uint16_t i;

    do
    {
      i = MAIN_Fosc / 10000;
      while (--i);
    } while (--ms);
}

////////////////////////////////////////
// 时钟初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void CLK_Init(void)
{

    //<<AICUBE_USER_CLOCK_INITIAL_BEGIN>>
    // 在此添加用户初始化代码
    //<<AICUBE_USER_CLOCK_INITIAL_END>>
}

////////////////////////////////////////
// 定时器0初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void TIMER0_Init(void)
{
#define T0_RELOAD               (65536 - (float)SYSCLK / 12 * 5 / 1000)

    TIMER0_TimerMode();               //设置定时器0为定时模式
    TIMER0_12TMode();                   //设置定时器0为12T模式
    TIMER0_Mode0();                     //设置定时器0为模式0 (16位自动重载模式)
    TIMER0_DisableGateINT0();         //禁止定时器0门控
    TIMER0_SetIntPriority(1);         //设置中断为高优先级
    TIMER0_EnableInt();               //使能定时器0中断
    TIMER0_SetReload16(T0_RELOAD);      //设置定时器0的16位重载值
    TIMER0_Run();                     //定时器0开始运行

    //<<AICUBE_USER_TIMER0_INITIAL_BEGIN>>
    // 在此添加用户初始化代码
    //<<AICUBE_USER_TIMER0_INITIAL_END>>
}

////////////////////////////////////////
// 串口1初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void UART1_Init(void)
{
#ifdef BAUDRATE
#undef BAUDRATE
#endif
#define BAUDRATE                (9600)
#define T2_RELOAD               (65536 - (SYSCLK / BAUDRATE + 2) / 4)

    UART1_SwitchP3637();                //设置串口数据端口: RxD (P3.6), TxD (P3.7)

    UART1_Timer2BRT();                  //选择定时器2作为串口1波特率发生器
    TIMER2_TimerMode();               //设置定时器2为定时模式
    TIMER2_1TMode();                  //设置定时器2为1T模式
    TIMER2_SetReload16(T2_RELOAD);      //设置定时器2的16位重载值
    TIMER2_Run();                     //定时器2开始运行

    UART1_EnableRx();                   //使能串口1接收数据
    UART1_Mode1();                      //设置串口1为模式1 (8位数据可变波特率)
    UART1_SetIntPriority(1);            //设置中断为高优先级
    UART1_EnableInt();                  //使能串口1中断

    //<<AICUBE_USER_UART1_INITIAL_BEGIN>>
    // 在此添加用户初始化代码
    //<<AICUBE_USER_UART1_INITIAL_END>>
}

////////////////////////////////////////
// 串口2初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void UART2_Init(void)
{
#ifdef BAUDRATE
#undef BAUDRATE
#endif
#define BAUDRATE                (9600)
#define T2_RELOAD               (65536 - (SYSCLK / BAUDRATE + 2) / 4)

    UART2_SwitchP1011();                //设置串口数据端口: RxD2 (P1.0), TxD2 (P1.1)

//UART2_Timer2BRT();                  //串口2固定选择定时器2作为波特率发生器
    TIMER2_TimerMode();               //设置定时器2为定时模式
    TIMER2_1TMode();                  //设置定时器2为1T模式
    TIMER2_SetReload16(T2_RELOAD);      //设置定时器2的16位重载值
    TIMER2_Run();                     //定时器2开始运行

    UART2_EnableRx();                   //使能串口2接收数据
    UART2_Mode1();                      //设置串口2为模式1 (8位数据可变波特率)
    UART2_SetIntPriority(0);            //设置中断为低优先级
    UART2_EnableInt();                  //使能串口2中断

    //<<AICUBE_USER_UART2_INITIAL_BEGIN>>
    // 在此添加用户初始化代码
    //<<AICUBE_USER_UART2_INITIAL_END>>
}

////////////////////////////////////////
// 外部中断INT0初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI0_Init(void)
{
    INT0_FallingInt();                  //设置外部中断为下降沿中断
    INT0_SetIntPriority(1);             //设置中断为高优先级
    INT0_EnableInt();                   //使能外部中断

    //<<AICUBE_USER_EXTI0_INITIAL_BEGIN>>
    // 在此添加用户初始化代码
    //<<AICUBE_USER_EXTI0_INITIAL_END>>
}

////////////////////////////////////////
// 外部中断INT1初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI1_Init(void)
{
    INT1_FallingInt();                  //设置外部中断为下降沿中断
    INT1_SetIntPriority(0);             //设置中断为低优先级
    INT1_EnableInt();                   //使能外部中断

    //<<AICUBE_USER_EXTI1_INITIAL_BEGIN>>
    // 在此添加用户初始化代码
    //<<AICUBE_USER_EXTI1_INITIAL_END>>
}

////////////////////////////////////////
// 外部中断INT2初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI2_Init(void)
{
    INT2_EnableInt();                   //使能外部中断

    //<<AICUBE_USER_EXTI2_INITIAL_BEGIN>>
    // 在此添加用户初始化代码
    //<<AICUBE_USER_EXTI2_INITIAL_END>>
}

////////////////////////////////////////
// 外部中断INT3初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI3_Init(void)
{
    INT3_EnableInt();                   //使能外部中断

    //<<AICUBE_USER_EXTI3_INITIAL_BEGIN>>
    // 在此添加用户初始化代码
    //<<AICUBE_USER_EXTI3_INITIAL_END>>
}


////////////////////////////////////////
// 定时器0中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void TIMER0_ISR(void) interrupt TMR0_VECTOR
{
    //<<AICUBE_USER_TIMER0_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码
    //<<AICUBE_USER_TIMER0_ISR_CODE1_END>>
}

////////////////////////////////////////
// 串口1中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void UART1_ISR(void) interrupt UART1_VECTOR
{
    //<<AICUBE_USER_UART1_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码
    if (UART1_CheckTxFlag())            //判断串口发送中断
    {
      UART1_ClearTxFlag();            //清除串口发送中断标志
    }

    if (UART1_CheckRxFlag())            //判断串口接收中断
    {
      UART1_ClearRxFlag();            //清除串口接收中断标志
    }
    //<<AICUBE_USER_UART1_ISR_CODE1_END>>
}

////////////////////////////////////////
// 串口2中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void UART2_ISR(void) interrupt UART2_VECTOR
{
    //<<AICUBE_USER_UART2_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码
    if (UART2_CheckTxFlag())            //判断串口发送中断
    {
      UART2_ClearTxFlag();            //清除串口发送中断标志
    }

    if (UART2_CheckRxFlag())            //判断串口接收中断
    {
      UART2_ClearRxFlag();            //清除串口接收中断标志
    }
    //<<AICUBE_USER_UART2_ISR_CODE1_END>>
}

////////////////////////////////////////
// 外部中断INT0中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI0_ISR(void) interrupt INT0_VECTOR
{
    //<<AICUBE_USER_EXTI0_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码
    //<<AICUBE_USER_EXTI0_ISR_CODE1_END>>
}

////////////////////////////////////////
// 外部中断INT1中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI1_ISR(void) interrupt INT1_VECTOR
{
    //<<AICUBE_USER_EXTI1_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码
    //<<AICUBE_USER_EXTI1_ISR_CODE1_END>>
}

////////////////////////////////////////
// 外部中断INT2中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI2_ISR(void) interrupt INT2_VECTOR
{
    //<<AICUBE_USER_EXTI2_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码
    //<<AICUBE_USER_EXTI2_ISR_CODE1_END>>
}

////////////////////////////////////////
// 外部中断INT3中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI3_ISR(void) interrupt INT3_VECTOR
{
    //<<AICUBE_USER_EXTI3_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码
    //<<AICUBE_USER_EXTI3_ISR_CODE1_END>>
}


//<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
// 在此添加用户函数实现代码
//<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>

summerrain19 发表于 2025-7-9 10:25:22

又有更新了啊,这么快的!{:4_167:}

神农鼎 发表于 2025-7-10 16:42:08



【新提醒】程序自动生成, STC89C52RC系列各功能模块, AiCube-ISP V6.95Y, 7/7 - AiCube-ISP , 程序自动生成工具, 支持STC89/15/8H/32/AI8051U 国芯技术交流网站 - AI32位8051交流社区

神农鼎 发表于 2025-7-10 20:36:11


最新ISP软件中, 范例程序, 实验箱4演示程序, 是STC15F2K60S2系列演示程序

神农鼎 发表于 2025-7-11 08:47:00

最新ISP烧录, 图形化程序自动生成 AiCube-ISP 软件,
从STC官网 www.STCAI.com 下载


cjtdz 发表于 2025-7-20 20:00:12

建议增加不同管脚选择图形功能,这样比较直观方便。脚少的参考脚多的配置,有可能搞错,再一个,也不方便,还得另外看别的封装。

神农鼎 发表于 2025-7-20 21:44:23

cjtdz 发表于 2025-7-20 20:00
建议增加不同管脚选择图形功能,这样比较直观方便。脚少的参考脚多的配置,有可能搞错,再一个,也不方便, ...

先用着,在忙更重要的事


使用帮助

1、在“图形化I/O配置”界面中配置完成I/O口模式后,
必须还需要在软件左侧的外设列表中勾选相应的
I/O口模块,AiCube才会生成I/O配置代码
 
2、在“图形化时钟配置”界面中配置完成时钟后,
必须还需要在软件左侧的外设列表中勾选时钟模块,
AiCube才会生成时钟配置代码
 
3、AiCube的“图形化时钟配置”界面中,蓝色字体部分
为可配置项,包括时钟源的使能位、多路选择器的选择
控制以及分频器的设置
 
4、关于相同系列单片机不同管脚的配置说明
目前版本的AiCube所支持的型号只支持最大管脚的封装
相同系列单片机的小管脚封装也可使用大管脚封装进行配置
如:Ai8051U-PDIP40、Ai8051U-LQFP44可使用
    Ai8051U-LQP48进行配置
如:STC8H8K64U-TSSOP20、STC8H8K64U-LQFP32、
    STC8H8K64U-PDIP40、STC8H8K64U-LQFP44、
    STC8H8K64U-LQFP48均可使用STC8H8K64U-LQFP64进行配置
如:STC32G12K128-LQFP32、STC32G12K128-PDIP40、
    STC32G12K128均可-LQFP48使用STC32G12K128-LQFP64进行配置
如:STC15W4K32S4-LQFP32、STC15W4K32S4-PDIP40、
    STC15W4K32S4-LQFP44、STC15W4K32S4-LQFP48
    均可使用STC15W4K32S4-LQFP64进行配置
如:STC89C52RC-PDIP40、STC89C52RC-PLCC44
    均可使用STC89C52RC-LQFP44进行配置
 
5、关于兼容系列单片机的配置说明
目前版本的AiCube只支持了几个主流型号的配置
其他单片机系列也可以使用兼容型号进行配置
如:STC8H4K64TLCD系列、STC8H4K64TL系列、
    STC8H1K08T系列、Ai8H2K32U系列、Ai8H2K12U系列、
    STC8H3K64S4系列、STC8G1K08系列、STC8G2K64S4系列
    等STC8H/Ai8系列均可以使用STC8H8K64U型号进行配置
如:STC32G12K64型号可以使用STC32G12K128型号进行配置
如:STC15W408AS系列、STC15W204S系列可以使用
    STC15W4K32S4型号进行配置
如:STC15F408AD系列可以使用STC15F2K60S2型号进行配置
如:STC89C51RC系列、STC89C54RD+系列、STC89C58RD+系列
    STC90C51RC系列、STC90C52RC系列、STC90C54RD+系列
    STC90C58RD+系列均可以使用STC89C52RC型号进行配置


hfofcfcb 发表于 2025-7-21 09:44:22

{:4_250:}
页: [1] 2
查看完整版本: 图形化程序自动生成, STC15F2K60S2系列各功能模块, AiCube-ISP-V6.95Z,7/18