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

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

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 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, 下载次数: 194

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15611
发表于 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;
                }
        }
}






回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

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

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

2.png

3.png

4.png

5.png

6.png

7.png

8.png



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

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

2.png

3.png

4.png

5.png

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:484
  • 最近打卡:2025-05-01 08:52:01
已绑定手机

23

主题

589

回帖

2813

积分

金牌会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:484
  • 最近打卡:2025-05-01 08:52:01
已绑定手机

23

主题

589

回帖

2813

积分

金牌会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:484
  • 最近打卡:2025-05-01 08:52:01
已绑定手机

23

主题

589

回帖

2813

积分

金牌会员

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15611
发表于 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








回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:20
  • 最近打卡:2025-04-28 16:56:43

21

主题

376

回帖

2345

积分

超级版主

积分
2345
发表于 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, 2025-5-1 23:55 , Processed in 0.138131 second(s), 105 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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