找回密码
 立即注册
楼主: 神***

STC32库函数20240111版及权威使用指南更新,及视频讲解回放

  [复制链接]
  • TA的每日心情
    奋斗
    18 小时前
  • 签到天数: 135 天

    [LV.7]常住居民III

    15

    主题

    531

    回帖

    1928

    积分

    金牌会员

    打工人

    积分
    1928
    发表于 2023-3-27 07:58:05 | 显示全部楼层
    希望有越来越多的库
    打工人
  • TA的每日心情
    奋斗
    2023-12-13 11:59
  • 签到天数: 1 天

    [LV.1]初来乍到

    3

    主题

    335

    回帖

    1631

    积分

    版主

    积分
    1631
    发表于 2023-4-4 11:48:19 | 显示全部楼层
    今天用

    STC-USB Link1D: 【STC专业仿真器, 全自动在线下载器/自动停电上电, 脱机烧录器, USB转双串口工具】
    来仿真库函数中I/O口-跑马灯程序,测试结果如下:
    1.png
    2.jpg


    QQ:2269694595     微信:18106296594
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9235

    回帖

    1万

    积分

    管理员

    积分
    13946
     楼主| 发表于 2023-4-4 19:55:58 | 显示全部楼层
    好,刚看到本版块也有一篇验证 库函数的 文章

    STC32库函数简单应用 - I/O口流水灯

    通过简单的例程来介绍库函数的使用方法。
    首先在项目里面添加需要用到的库函数文件:



    然后在主程序文件里面添加IO口初始化程序和主循环程序:

    void GPIO_config(void)
    {
        P2_MODE_IO_PU(GPIO_Pin_All);       //P2 设置为准双向口
    }

    void main(void)
    {
        WTST = 0;       //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
        EAXSFR();        //扩展SFR(XFR)访问使能
        CKCON = 0;      //提高访问XRAM速度

        GPIO_config();

        while(1)
        {
            P20 = 0;                //LED On
            delay_ms(250);
            P20 = 1;                //LED Off
            P21 = 0;                //LED On
            delay_ms(250);
            P21 = 1;                //LED Off
            P22 = 0;                //LED On
            delay_ms(250);
            P22 = 1;                //LED Off
            P23 = 0;                //LED On
            delay_ms(250);
            P23 = 1;                //LED Off
            P24 = 0;                //LED On
            delay_ms(250);
            P24 = 1;                //LED Off
            P25 = 0;                //LED On
            delay_ms(250);
            P25 = 1;                //LED Off
            P26 = 0;                //LED On
            delay_ms(250);
            P26 = 1;                //LED Off
            P27 = 0;                //LED On
            delay_ms(250);
            P27 = 1;                //LED Off
        }
    }

    STC32库函数简单应用 - I/O口流水灯 - 软件库函数/原理图库/PCB库 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
    程序在这个链接的 附件中

    1.png
    回复 支持 1 反对 0 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-12-13 11:59
  • 签到天数: 1 天

    [LV.1]初来乍到

    3

    主题

    335

    回帖

    1631

    积分

    版主

    积分
    1631
    发表于 2023-4-6 14:09:53 | 显示全部楼层
    今天用
    STC-USB Link1D: 【STC专业仿真器, 全自动在线下载器/自动停电上电, 脱机烧录器, USB转双串口工具】
    来仿真库函数中Timer0-Timer1-Timer2-Timer3-Timer4测试程序,测试结果如下:
    1.png

    2.png

    3.png

    4.png

    5.png

    6.png

    7.png

    8.png

    9.png

    10.png

    11.png



    QQ:2269694595     微信:18106296594
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-12-13 11:59
  • 签到天数: 1 天

    [LV.1]初来乍到

    3

    主题

    335

    回帖

    1631

    积分

    版主

    积分
    1631
    发表于 2023-4-7 16:31:25 | 显示全部楼层
    今天用
    STC-USB Link1D: 【STC专业仿真器, 全自动在线下载器/自动停电上电, 脱机烧录器, USB转双串口工具】
    来仿真库函数中外中断INT0-INT1-INT2-INT3- INT4测试程序,测试结果如下:

    #include        "config.h"
    #include        "STC32G_Exti.h"
    #include        "STC32G_GPIO.h"
    #include        "STC32G_UART.h"
    #include        "STC32G_NVIC.h"
    #include        "STC32G_Delay.h"
    #include        "STC32G_Switch.h"

    /*************        功能说明        **************

    演示INT0~INT4 5个唤醒源将MCU从休眠唤醒.

    从串口输出唤醒源跟唤醒次数,115200,N,8,1.

    下载时, 选择时钟 22.1184MHz (用户可在"config.h"修改频率).

    ******************************************/

    /*************        本地常量声明        **************/

    sbit INT0 = P3^2;
    sbit INT1 = P3^3;
    sbit INT2 = P3^6;
    sbit INT3 = P3^7;
    sbit INT4 = P3^0;

    /*************        本地变量声明        **************/

    u8 WakeUpCnt;

    /*************        本地函数声明        **************/



    /*************  外部函数和变量声明 *****************/



    /******************** IO口配置 ********************/
    void GPIO_config(void)
    {
            P3_MODE_IO_PU(GPIO_Pin_All);                //P3.0~P3.7 设置为准双向口
            P3_PULL_UP_ENABLE(GPIO_Pin_All);//P3 口内部上拉电阻使能
            P4_MODE_IO_PU(GPIO_Pin_6 | GPIO_Pin_7);        //P4.6,P4.7 设置为准双向口
    }

    /******************** INT配置 ********************/
    void Exti_config(void)
    {
            EXTI_InitTypeDef        Exti_InitStructure;                                                        //结构定义

            Exti_InitStructure.EXTI_Mode      = EXT_MODE_Fall;//中断模式,   EXT_MODE_RiseFall,EXT_MODE_Fall
            Ext_Inilize(EXT_INT0,&Exti_InitStructure);                                //初始化
            NVIC_INT0_Init(ENABLE,Priority_0);                //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3

            Exti_InitStructure.EXTI_Mode      = EXT_MODE_Fall;//中断模式,   EXT_MODE_RiseFall,EXT_MODE_Fall
            Ext_Inilize(EXT_INT1,&Exti_InitStructure);                                //初始化
            NVIC_INT1_Init(ENABLE,Priority_0);                //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3

            NVIC_INT2_Init(ENABLE,NULL);                //中断使能, ENABLE/DISABLE; 无优先级
            NVIC_INT3_Init(ENABLE,NULL);                //中断使能, ENABLE/DISABLE; 无优先级
    //        NVIC_INT4_Init(ENABLE,NULL);                //中断使能, ENABLE/DISABLE; 无优先级
    }

    /****************  串口初始化函数 *****************/
    void UART_config(void)
    {
            COMx_InitDefine                COMx_InitStructure;                                        //结构定义
            COMx_InitStructure.UART_Mode      = UART_8bit_BRTx;                //模式,   UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
            COMx_InitStructure.UART_BRT_Use   = BRT_Timer2;                        //选择波特率发生器, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)
            COMx_InitStructure.UART_BaudRate  = 115200ul;                        //波特率,     110 ~ 115200
            COMx_InitStructure.UART_RxEnable  = ENABLE;                                //接收允许,   ENABLE或DISABLE
            UART_Configuration(UART2, &COMx_InitStructure);                //初始化串口 UART1,UART2,UART3,UART4
            NVIC_UART2_Init(ENABLE,Priority_1);                //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3

            UART2_SW(UART2_SW_P46_P47);                //UART2_SW_P10_P11,UART2_SW_P46_P47
    }

    /******************** 主函数***********************/
    void main(void)
    {
            WTST = 0;                //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
            EAXSFR();                //扩展SFR(XFR)访问使能
            CKCON = 0;      //提高访问XRAM速度

            GPIO_config();
            UART_config();
            Exti_config();
            EA  = 1;                //Enable all interrupt

            PrintString2("STC32G EXINT Wakeup Test Programme!\r\n");        //UART发送一个字符串

            while(1)
            {
                    while(!INT0);        //等待外中断为高电平
                    while(!INT1);        //等待外中断为高电平
                    while(!INT2);        //等待外中断为高电平
                    while(!INT3);        //等待外中断为高电平
    //                while(!INT4);        //等待外中断为高电平
                    delay_ms(10);        //delay 10ms

                    while(!INT0);        //等待外中断为高电平
                    while(!INT1);        //等待外中断为高电平
                    while(!INT2);        //等待外中断为高电平
                    while(!INT3);        //等待外中断为高电平
    //                while(!INT4);        //等待外中断为高电平

                    WakeUpSource = 0;
                    PrintString2("MCU进入休眠状态!\r\n");
                    delay_ms(10);        //delay 10ms,等待串口数据发送完成

                    PD = 1;                //Sleep
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();

                    if(WakeUpSource == 1)        PrintString2("外中断INT0唤醒  ");
                    if(WakeUpSource == 2)        PrintString2("外中断INT1唤醒  ");
                    if(WakeUpSource == 3)        PrintString2("外中断INT2唤醒  ");
                    if(WakeUpSource == 4)        PrintString2("外中断INT3唤醒  ");
                    if(WakeUpSource == 5)        PrintString2("外中断INT4唤醒  ");

                    WakeUpCnt++;
                    TX2_write2buff((u8)(WakeUpCnt/100+'0'));
                    TX2_write2buff((u8)(WakeUpCnt%100/10+'0'));
                    TX2_write2buff((u8)(WakeUpCnt%10+'0'));
                    PrintString2("次唤醒\r\n");
            }

    }

    QQ:2269694595     微信:18106296594
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    7

    主题

    35

    回帖

    211

    积分

    中级会员

    积分
    211
    发表于 2023-4-18 16:34:34 | 显示全部楼层
    TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T;        //指定时钟源,     TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
            TIM_InitStructure.TIM_ClkOut    = DISABLE;                                        //是否输出高速脉冲, ENABLE或DISABLE
            TIM_InitStructure.TIM_Value     = (u16)(65536UL - (MAIN_Fosc / (50*12)));                //初值
            TIM_InitStructure.TIM_Run       = ENABLE;                                        //是否初始化后启动定时器, ENABLE或DISABLE
            Timer_Inilize(Timer4,&TIM_InitStructure);                                        //初始化Timer4          Timer0,Timer1,Timer2,Timer3,Timer4
            NVIC_Timer4_Init(ENABLE,NULL);                //中断使能, ENABLE/DISABLE; 无优先级

    请问用寄存器去设置的定时器4,库函数给的系统评率是24M,为了与串口公用,想改为22.11的,请问怎么更改。改为1MS延时。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    15 小时前
  • 签到天数: 127 天

    [LV.7]常住居民III

    26

    主题

    1281

    回帖

    3985

    积分

    论坛元老

    积分
    3985
    发表于 2023-4-18 17:18:08 | 显示全部楼层
    zackwu 发表于 2023-4-18 16:34
    TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T;        //指定时钟源,     TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CL ...

    1. 在配置文件"config.h"中修改MAIN_Fosc定义值为:22118400L
    2. 将TIM_Value初值设置里面的 50*12 改成 1000*12 ,1秒钟中断1000次就是1ms中断一次。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    7

    主题

    35

    回帖

    211

    积分

    中级会员

    积分
    211
    发表于 2023-4-18 21:22:29 | 显示全部楼层
    乘风飞扬 发表于 2023-4-18 17:18
    1. 在配置文件"config.h"中修改MAIN_Fosc定义值为:22118400L
    2. 将TIM_Value初值设置里面的 50*12 改成  ...

    感谢,感谢!!!!
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    7

    主题

    35

    回帖

    211

    积分

    中级会员

    积分
    211
    发表于 2023-4-19 16:46:43 | 显示全部楼层
    您好,版主,我在库函数手册里面搜索了计数器,没得到想要的结果,就是我现在用定时器4中断,定时器3做计数器,
    去做100个定时器,用比较计数的方式,遇到问题就是,溢出中断事件怎么操作的。这个在手册里面没有发现,请指点一二,谢谢!!

    点评

    "STC32G_Timer_Isr.c"文件是存放定时器中断函数的,中断事件可在对应的函数里面处理。  详情 回复 发表于 2023-4-20 08:36
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-12-13 11:59
  • 签到天数: 1 天

    [LV.1]初来乍到

    3

    主题

    335

    回帖

    1631

    积分

    版主

    积分
    1631
    发表于 2023-4-20 08:36:16 | 显示全部楼层
    zackwu 发表于 2023-4-19 16:46
    您好,版主,我在库函数手册里面搜索了计数器,没得到想要的结果,就是我现在用定时器4中断,定时器3做计数 ...

    "STC32G_Timer_Isr.c"文件是存放定时器中断函数的,中断事件可在对应的函数里面处理。
    QQ:2269694595     微信:18106296594
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-4-29 23:57 , Processed in 0.071549 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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