找回密码
 立即注册
查看: 3308|回复: 15

STC32库函数应用实践,步步深入,还是点灯开始

[复制链接]
  • TA的每日心情
    奋斗
    8 分钟前
  • 签到天数: 278 天

    [LV.8]以坛为家I

    30

    主题

    1755

    回帖

    5744

    积分

    论坛元老

    积分
    5744
    发表于 2023-4-4 19:29:26 | 显示全部楼层 |阅读模式
    STC32库函数应用实践,步步深入,还是点灯开始

    STC32库函数简单应用 - I/O口流水灯
    通过简单的例程来介绍库函数的使用方法。
    首先在项目里面添加需要用到的库函数文件:
    库函数简单应用-IO口流水灯-1.png
    然后在主程序文件里面添加IO口初始化程序和主循环程序:
    1. void GPIO_config(void)
    2. {
    3.     P2_MODE_IO_PU(GPIO_Pin_All);       //P2 设置为准双向口
    4. }
    5. void main(void)
    6. {
    7.     WTST = 0;       //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    8.     EAXSFR();        //扩展SFR(XFR)访问使能
    9.     CKCON = 0;      //提高访问XRAM速度
    10.     GPIO_config();
    11.     while(1)
    12.     {
    13.         P20 = 0;                //LED On
    14.         delay_ms(250);
    15.         P20 = 1;                //LED Off
    16.         P21 = 0;                //LED On
    17.         delay_ms(250);
    18.         P21 = 1;                //LED Off
    19.         P22 = 0;                //LED On
    20.         delay_ms(250);
    21.         P22 = 1;                //LED Off
    22.         P23 = 0;                //LED On
    23.         delay_ms(250);
    24.         P23 = 1;                //LED Off
    25.         P24 = 0;                //LED On
    26.         delay_ms(250);
    27.         P24 = 1;                //LED Off
    28.         P25 = 0;                //LED On
    29.         delay_ms(250);
    30.         P25 = 1;                //LED Off
    31.         P26 = 0;                //LED On
    32.         delay_ms(250);
    33.         P26 = 1;                //LED Off
    34.         P27 = 0;                //LED On
    35.         delay_ms(250);
    36.         P27 = 1;                //LED Off
    37.     }
    38. }
    复制代码
    大家都去 【STC32库函数20230323版及权威使用指南更新】 主贴看下
    STC32库函数20230323版及权威使用指南更新 - 软件库函数/原理图库/PCB库 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)


    跑马灯.zip

    19.27 KB, 下载次数: 123

    回复 送花

    使用道具 举报

    该用户从未签到

    640

    主题

    1万

    回帖

    1万

    积分

    管理员

    积分
    15687
    发表于 2023-4-5 08:18:15 | 显示全部楼层
    原版STC32最新软件库函数,  可从下面最新的 STC-ISP V6.91M 版软件 或以后的版本 获得
    1.png
    下载下来后,解压缩如下
    1.png

    2.png

    3.png
    //大家直接打开完整的项目文件就可以实战了,编译完全正确
    //下面是 main.c文件中的程序程序

    #include        "config.h"
    #include        "STC32G_GPIO.h"
    #include        "STC32G_Delay.h"

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

    程序使用P6口来演示跑马灯。

    下载时, 选择时钟 24MHz (可以在配置文件"config.h"中修改).

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

    //========================================================================
    //                               本地常量声明        
    //========================================================================

    u8 code ledNum[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

    //========================================================================
    //                               本地变量声明
    //========================================================================

    u8 ledIndex;

    //========================================================================
    // 函数: GPIO_config
    // 描述: 用户初始化程序.
    // 参数: None.
    // 返回: None.
    // 版本: V1.0, 2020-09-28
    //========================================================================
    void GPIO_config(void)
    {
            P4_MODE_IO_PU(GPIO_Pin_0);                        //P4.0设置为准双向口
            P6_MODE_IO_PU(GPIO_Pin_All);                //P6 设置为准双向口
    }

    //========================================================================
    // 函数: main
    // 描述: 用户应用程序.
    // 参数: None.
    // 返回: None.
    // 版本: V1.0, 2020-09-23
    //========================================================================
    void main(void)
    {
            WTST = 0;                //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
            EAXSFR();                //扩展SFR(XFR)访问使能
            CKCON = 0;      //提高访问XRAM速度

            GPIO_config();
            P40 = 0;                //打开实验板LED电源
            
            while(1)
            {
                    delay_ms(250);
                    P6 = ~ledNum[ledIndex];        //输出低驱动
                    ledIndex++;
                    if(ledIndex > 7)
                    {
                            ledIndex = 0;
                    }
            }
    }






    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    640

    主题

    1万

    回帖

    1万

    积分

    管理员

    积分
    15687
    发表于 2023-4-5 09:52:27 | 显示全部楼层

    STC32的库函数压缩包解压后有库如何使用的超级详细的说明,保姆式上手无障碍服务
    1.png

    2.png

    3.png

    4.png

    5.png

    6.png

    7.png

    8.png



    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    640

    主题

    1万

    回帖

    1万

    积分

    管理员

    积分
    15687
    发表于 2023-4-5 09:56:48 | 显示全部楼层
    1.png

    2.png

    3.png

    4.png

    5.png

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    无聊
    半小时前
  • 签到天数: 308 天

    [LV.8]以坛为家I

    20

    主题

    553

    回帖

    1978

    积分

    金牌会员

    积分
    1978
    发表于 2023-4-5 13:57:41 | 显示全部楼层
    学习了感谢!
    不停地学习
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    无聊
    半小时前
  • 签到天数: 308 天

    [LV.8]以坛为家I

    20

    主题

    553

    回帖

    1978

    积分

    金牌会员

    积分
    1978
    发表于 2023-4-5 14:10:50 | 显示全部楼层
    把P40口改为P52口后下载进去成功点亮
    0.png
    不停地学习
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    无聊
    半小时前
  • 签到天数: 308 天

    [LV.8]以坛为家I

    20

    主题

    553

    回帖

    1978

    积分

    金牌会员

    积分
    1978
    发表于 2023-4-5 14:17:08 | 显示全部楼层
    不停地学习
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    640

    主题

    1万

    回帖

    1万

    积分

    管理员

    积分
    15687
    发表于 2023-4-5 14:40:33 | 显示全部楼层
    好,让STC32的库函数飞起来
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    640

    主题

    1万

    回帖

    1万

    积分

    管理员

    积分
    15687
    发表于 2023-4-8 08:53:10 | 显示全部楼层
    STC32库函数简单应用 - 定时器




    1.png

    2.png

    3.png

    1.png
    2.png
    3.png
    4.png
    5.png
    1.png
    2.png
    3.png
    4.png
    5.png
    6.png

    7.png








    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-12-5 13:56
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    12

    主题

    300

    回帖

    1865

    积分

    超级版主

    积分
    1865
    发表于 2023-4-8 09:36:24 | 显示全部楼层
    只做指路人,修行在个人:
    1,STC32G12K128库函数下载路径:
    下载路径.png

    2,范例程序文件夹如下:
    范例位置.png
    3.Timer0-Timer1-Timer2-Timer3-Timer4测试程序

    #include        "config.h"
    #include        "STC32G_Timer.h"
    #include        "STC32G_GPIO.h"
    #include        "STC32G_NVIC.h"

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

    程序演示5个定时器的使用, 均使用16位自动重装.

    定时器0做16位自动重装, 中断频率为100000Hz,中断函数从P6.7取反输出50KHz方波信号.

    定时器1做16位自动重装, 中断频率为10000Hz,中断函数从P6.6取反输出5KHz方波信号.

    定时器2做16位自动重装, 中断频率为1000Hz,中断函数从P6.5取反输出500Hz方波信号.

    定时器3做16位自动重装, 中断频率为100Hz,中断函数从P6.4取反输出50Hz方波信号.

    定时器4做16位自动重装, 中断频率为50Hz,中断函数从P6.3取反输出25Hz方波信号.

    下载时, 选择时钟 24MHz (可以在配置文件"config.h"中修改).

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

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


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


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



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



    /************************ IO口配置 ****************************/
    void        GPIO_config(void)
    {
            GPIO_InitTypeDef        GPIO_InitStructure;                                //结构定义

            GPIO_InitStructure.Pin  = GPIO_Pin_HIGH | GPIO_Pin_3;                        //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7, 或操作
            GPIO_InitStructure.Mode = GPIO_PullUp;                        //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
            GPIO_Inilize(GPIO_P6,&GPIO_InitStructure);        //初始化

            GPIO_InitStructure.Pin  = GPIO_Pin_0;                                //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7, 或操作
            GPIO_InitStructure.Mode = GPIO_PullUp;                        //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
            GPIO_Inilize(GPIO_P4,&GPIO_InitStructure);        //初始化
    }

    /************************ 定时器配置 ****************************/
    void        Timer_config(void)
    {
            TIM_InitTypeDef                TIM_InitStructure;                                                //结构定义
            TIM_InitStructure.TIM_Mode      = TIM_16BitAutoReload;        //指定工作模式,   TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
            TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T;                //指定时钟源,     TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
            TIM_InitStructure.TIM_ClkOut    = DISABLE;                                //是否输出高速脉冲, ENABLE或DISABLE
            TIM_InitStructure.TIM_Value     = (u16)(65536UL - (MAIN_Fosc / 100000UL));                //初值,
            TIM_InitStructure.TIM_Run       = ENABLE;                                        //是否初始化后启动定时器, ENABLE或DISABLE
            Timer_Inilize(Timer0,&TIM_InitStructure);                                        //初始化Timer0          Timer0,Timer1,Timer2,Timer3,Timer4
            NVIC_Timer0_Init(ENABLE,Priority_0);                //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3

            TIM_InitStructure.TIM_Mode      = TIM_16BitAutoReload;        //指定工作模式,   TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
            TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T;                //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
            TIM_InitStructure.TIM_ClkOut    = DISABLE;                                //是否输出高速脉冲, ENABLE或DISABLE
            TIM_InitStructure.TIM_Value     = (u16)(65536UL - (MAIN_Fosc / 10000));                        //初值,
            TIM_InitStructure.TIM_Run       = ENABLE;                                        //是否初始化后启动定时器, ENABLE或DISABLE
            Timer_Inilize(Timer1,&TIM_InitStructure);                                        //初始化Timer1          Timer0,Timer1,Timer2,Timer3,Timer4
            NVIC_Timer1_Init(ENABLE,Priority_0);                //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3

            TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T;                //指定时钟源,     TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
            TIM_InitStructure.TIM_ClkOut    = DISABLE;                                //是否输出高速脉冲, ENABLE或DISABLE
            TIM_InitStructure.TIM_Value     = (u16)(65536UL - (MAIN_Fosc / 1000));                                //初值
            TIM_InitStructure.TIM_Run       = ENABLE;                                        //是否初始化后启动定时器, ENABLE或DISABLE
            Timer_Inilize(Timer2,&TIM_InitStructure);                                        //初始化Timer2          Timer0,Timer1,Timer2,Timer3,Timer4
            NVIC_Timer2_Init(ENABLE,NULL);                //中断使能, ENABLE/DISABLE; 无优先级

            TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T;        //指定时钟源,     TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
            TIM_InitStructure.TIM_ClkOut    = ENABLE;                                        //是否输出高速脉冲, ENABLE或DISABLE
            TIM_InitStructure.TIM_Value     = (u16)(65536UL - (MAIN_Fosc / (100*12)));                //初值
            TIM_InitStructure.TIM_Run       = ENABLE;                                        //是否初始化后启动定时器, ENABLE或DISABLE
            Timer_Inilize(Timer3,&TIM_InitStructure);                                        //初始化Timer3          Timer0,Timer1,Timer2,Timer3,Timer4
            NVIC_Timer3_Init(ENABLE,NULL);                //中断使能, ENABLE/DISABLE; 无优先级

            TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T;        //指定时钟源,     TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
            TIM_InitStructure.TIM_ClkOut    = ENABLE;                                        //是否输出高速脉冲, 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; 无优先级
    }


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

            GPIO_config();
            Timer_config();
            EA = 1;
            P40 = 0;                //打开实验箱LED电源

            while (1);
    }
    4.范例程序在KEIL中仿真成功:
    10.png

    5. STC-USB Link1D + 实验箱V9.6的硬件效果如下:

    BEEE47F70E5AA8A499F34781D9B924FA.jpg



    电话:0513-55012946 QQ:2195591714  微信:  19952583740
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-11-1 09:04 , Processed in 0.113500 second(s), 79 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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