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

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

[复制链接]
已绑定手机

51

主题

2742

回帖

9541

积分

论坛元老

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

回复

使用道具 举报 送花

865

主题

1万

回帖

2万

积分

管理员

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






回复

使用道具 举报 送花

865

主题

1万

回帖

2万

积分

管理员

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

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

2.png

3.png

4.png

5.png

6.png

7.png

8.png



回复

使用道具 举报 送花

865

主题

1万

回帖

2万

积分

管理员

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

2.png

3.png

4.png

5.png

回复

使用道具 举报 送花

已绑定手机

25

主题

594

回帖

3108

积分

论坛元老

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

使用道具 举报 送花

已绑定手机

25

主题

594

回帖

3108

积分

论坛元老

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

使用道具 举报 送花

已绑定手机

25

主题

594

回帖

3108

积分

论坛元老

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

使用道具 举报 送花

865

主题

1万

回帖

2万

积分

管理员

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

使用道具 举报 送花

865

主题

1万

回帖

2万

积分

管理员

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








回复

使用道具 举报 送花

39

主题

590

回帖

3512

积分

超级版主

积分
3512
发表于 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, 2026-9-22 10:01 , Processed in 0.080085 second(s), 82 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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