找回密码
 立即注册
楼主: 乘风飞扬

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

[复制链接]

39

主题

600

回帖

3586

积分

超级版主

积分
3586
发表于 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
回复

使用道具 举报 送花

33

主题

526

回帖

2634

积分

版主

积分
2634
发表于 2023-4-11 16:58:03 | 显示全部楼层
今日用:STC-USB Link1D: 【STC专业仿真器, 全自动在线下载器/自动停电上电, 脱机烧录器, USB转双串口工具】
来测试库函数的串口中断模式和收发测试程序,测试结果如下:
1.png

2.jpg

3.jpg

4.jpg

5.jpg

6.jpg

7.png

8.png

9.png


QQ:2269694595     微信:18106296594
回复

使用道具 举报 送花

1

主题

15

回帖

79

积分

注册会员

积分
79
发表于 2023-9-18 08:19:34 | 显示全部楼层
请教下库函数不能编译是那里出问题了
截图202309180816389036.jpg
回复

使用道具 举报 送花

1

主题

15

回帖

79

积分

注册会员

积分
79
发表于 2023-9-18 08:25:36 | 显示全部楼层
测试了库例子1跑马灯可以编译,例子2定时器就不可以编译。
截图202309180823053678.jpg
回复

使用道具 举报 送花

已绑定手机

51

主题

2750

回帖

9613

积分

论坛元老

积分
9613
 楼主| 发表于 2023-9-18 09:04:13 | 显示全部楼层
26614*** 发表于 2023-9-18 08:19
请教下库函数不能编译是那里出问题了

你的编译器没有注册,或者注册码过期。
没有正常注册的keil试用版有2K(0800H)的代码限制,代码量超过2K编译时就会报错。
回复

使用道具 举报 送花

已绑定手机

4

主题

44

回帖

205

积分

中级会员

积分
205
发表于 2023-11-17 23:12:29 | 显示全部楼层
点赞
回复

使用道具 举报 送花

已绑定手机
已实名认证

45

主题

163

回帖

1210

积分

金牌会员

积分
1210
发表于 2023-11-19 16:04:23 | 显示全部楼层
可以可以,学到了,顺便把我的板子也焊上排针
MCU开发者和爱好者
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-11-7 14:41 , Processed in 0.075178 second(s), 76 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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