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)
原版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;
}
}
}
STC32的库函数压缩包解压后有库如何使用的超级详细的说明,保姆式上手无障碍服务
学习了感谢! 把P40口改为P52口后下载进去成功点亮
好,让STC32的库函数飞起来 STC32库函数简单应用 - 定时器
只做指路人,修行在个人:
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