乘风飞扬 发表于 2023-4-4 19:29:26

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

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

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库函数20230323版及权威使用指南更新】 主贴看下
STC32库函数20230323版及权威使用指南更新 - 软件库函数/原理图库/PCB库 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)


神农鼎 发表于 2023-4-5 08:18:15

原版STC32最新软件库函数,可从下面最新的 STC-ISP V6.91M 版软件 或以后的版本 获得

下载下来后,解压缩如下https://www.stcaimcu.com/data/attachment/forum/202304/05/081816rm72irlddx7kwiia.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++;
                if(ledIndex > 7)
                {
                        ledIndex = 0;
                }
      }
}






神农鼎 发表于 2023-4-5 09:52:27


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


















神农鼎 发表于 2023-4-5 09:56:48











WHX 发表于 2023-4-5 13:57:41

学习了感谢!

WHX 发表于 2023-4-5 14:10:50

把P40口改为P52口后下载进去成功点亮

WHX 发表于 2023-4-5 14:17:08

神农鼎 发表于 2023-4-5 14:40:33

好,让STC32的库函数飞起来

神农鼎 发表于 2023-4-8 08:53:10

STC32库函数简单应用 - 定时器































32G12K128 发表于 2023-4-8 09:36:24

只做指路人,修行在个人:
1,STC32G12K128库函数下载路径:


2,范例程序文件夹如下:

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中仿真成功:


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





页: [1] 2
查看完整版本: STC32库函数应用实践,步步深入,还是点灯开始