zhudean11
发表于 2023-3-27 07:58:05
希望有越来越多的库
清风予我
发表于 2023-4-4 11:48:19
今天用
STC-USB Link1D: 【STC专业仿真器, 全自动在线下载器/自动停电上电, 脱机烧录器, USB转双串口工具】
来仿真库函数中I/O口-跑马灯程序,测试结果如下:
神农鼎
发表于 2023-4-4 19:55:58
好,刚看到本版块也有一篇验证 库函数的 文章
STC32库函数简单应用 - I/O口流水灯
通过简单的例程来介绍库函数的使用方法。
首先在项目里面添加需要用到的库函数文件:
https://www.stcaimcu.com/data/attachment/forum/202304/04/192927zcwkllc46lk4lxe6.png
然后在主程序文件里面添加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库函数简单应用 - I/O口流水灯 - 软件库函数/原理图库/PCB库 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
程序在这个链接的 附件中
清风予我
发表于 2023-4-6 14:09:53
今天用
STC-USB Link1D: 【STC专业仿真器, 全自动在线下载器/自动停电上电, 脱机烧录器, USB转双串口工具】
来仿真库函数中Timer0-Timer1-Timer2-Timer3-Timer4测试程序,测试结果如下:
清风予我
发表于 2023-4-7 16:31:25
今天用
STC-USB Link1D: 【STC专业仿真器, 全自动在线下载器/自动停电上电, 脱机烧录器, USB转双串口工具】
来仿真库函数中外中断INT0-INT1-INT2-INT3- INT4测试程序,测试结果如下:https://bbs.21ic.com/data/attachment/forum/202304/07/151702vst9sgusyy828qmg.jpg.thumb.jpg
#include "config.h"
#include "STC32G_Exti.h"
#include "STC32G_GPIO.h"
#include "STC32G_UART.h"
#include "STC32G_NVIC.h"
#include "STC32G_Delay.h"
#include "STC32G_Switch.h"
/************* 功能说明 **************
演示INT0~INT4 5个唤醒源将MCU从休眠唤醒.
从串口输出唤醒源跟唤醒次数,115200,N,8,1.
下载时, 选择时钟 22.1184MHz (用户可在"config.h"修改频率).
******************************************/
/************* 本地常量声明 **************/
sbit INT0 = P3^2;
sbit INT1 = P3^3;
sbit INT2 = P3^6;
sbit INT3 = P3^7;
sbit INT4 = P3^0;
/************* 本地变量声明 **************/
u8 WakeUpCnt;
/************* 本地函数声明 **************/
/*************外部函数和变量声明 *****************/
/******************** IO口配置 ********************/
void GPIO_config(void)
{
P3_MODE_IO_PU(GPIO_Pin_All); //P3.0~P3.7 设置为准双向口
P3_PULL_UP_ENABLE(GPIO_Pin_All);//P3 口内部上拉电阻使能
P4_MODE_IO_PU(GPIO_Pin_6 | GPIO_Pin_7); //P4.6,P4.7 设置为准双向口
}
/******************** INT配置 ********************/
void Exti_config(void)
{
EXTI_InitTypeDef Exti_InitStructure; //结构定义
Exti_InitStructure.EXTI_Mode = EXT_MODE_Fall;//中断模式, EXT_MODE_RiseFall,EXT_MODE_Fall
Ext_Inilize(EXT_INT0,&Exti_InitStructure); //初始化
NVIC_INT0_Init(ENABLE,Priority_0); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
Exti_InitStructure.EXTI_Mode = EXT_MODE_Fall;//中断模式, EXT_MODE_RiseFall,EXT_MODE_Fall
Ext_Inilize(EXT_INT1,&Exti_InitStructure); //初始化
NVIC_INT1_Init(ENABLE,Priority_0); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
NVIC_INT2_Init(ENABLE,NULL); //中断使能, ENABLE/DISABLE; 无优先级
NVIC_INT3_Init(ENABLE,NULL); //中断使能, ENABLE/DISABLE; 无优先级
// NVIC_INT4_Init(ENABLE,NULL); //中断使能, ENABLE/DISABLE; 无优先级
}
/****************串口初始化函数 *****************/
void UART_config(void)
{
COMx_InitDefine COMx_InitStructure; //结构定义
COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
COMx_InitStructure.UART_BRT_Use = BRT_Timer2; //选择波特率发生器, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)
COMx_InitStructure.UART_BaudRate= 115200ul; //波特率, 110 ~ 115200
COMx_InitStructure.UART_RxEnable= ENABLE; //接收允许, ENABLE或DISABLE
UART_Configuration(UART2, &COMx_InitStructure); //初始化串口 UART1,UART2,UART3,UART4
NVIC_UART2_Init(ENABLE,Priority_1); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
UART2_SW(UART2_SW_P46_P47); //UART2_SW_P10_P11,UART2_SW_P46_P47
}
/******************** 主函数***********************/
void main(void)
{
WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXSFR(); //扩展SFR(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
GPIO_config();
UART_config();
Exti_config();
EA= 1; //Enable all interrupt
PrintString2("STC32G EXINT Wakeup Test Programme!\r\n"); //UART发送一个字符串
while(1)
{
while(!INT0); //等待外中断为高电平
while(!INT1); //等待外中断为高电平
while(!INT2); //等待外中断为高电平
while(!INT3); //等待外中断为高电平
// while(!INT4); //等待外中断为高电平
delay_ms(10); //delay 10ms
while(!INT0); //等待外中断为高电平
while(!INT1); //等待外中断为高电平
while(!INT2); //等待外中断为高电平
while(!INT3); //等待外中断为高电平
// while(!INT4); //等待外中断为高电平
WakeUpSource = 0;
PrintString2("MCU进入休眠状态!\r\n");
delay_ms(10); //delay 10ms,等待串口数据发送完成
PD = 1; //Sleep
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
if(WakeUpSource == 1) PrintString2("外中断INT0唤醒");
if(WakeUpSource == 2) PrintString2("外中断INT1唤醒");
if(WakeUpSource == 3) PrintString2("外中断INT2唤醒");
if(WakeUpSource == 4) PrintString2("外中断INT3唤醒");
if(WakeUpSource == 5) PrintString2("外中断INT4唤醒");
WakeUpCnt++;
TX2_write2buff((u8)(WakeUpCnt/100+'0'));
TX2_write2buff((u8)(WakeUpCnt%100/10+'0'));
TX2_write2buff((u8)(WakeUpCnt%10+'0'));
PrintString2("次唤醒\r\n");
}
}
zackwu
发表于 2023-4-18 16:34:34
TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T; //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
TIM_InitStructure.TIM_ClkOut = DISABLE; //是否输出高速脉冲, 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; 无优先级
请问用寄存器去设置的定时器4,库函数给的系统评率是24M,为了与串口公用,想改为22.11的,请问怎么更改。改为1MS延时。
乘风飞扬
发表于 2023-4-18 17:18:08
zackwu 发表于 2023-4-18 16:34
TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T; //指定时钟源, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CL ...
1. 在配置文件"config.h"中修改MAIN_Fosc定义值为:22118400L
2. 将TIM_Value初值设置里面的 50*12 改成 1000*12 ,1秒钟中断1000次就是1ms中断一次。
zackwu
发表于 2023-4-18 21:22:29
乘风飞扬 发表于 2023-4-18 17:18
1. 在配置文件"config.h"中修改MAIN_Fosc定义值为:22118400L
2. 将TIM_Value初值设置里面的 50*12 改成...
感谢,感谢!!!!{:handshake:}
zackwu
发表于 2023-4-19 16:46:43
您好,版主,我在库函数手册里面搜索了计数器,没得到想要的结果,就是我现在用定时器4中断,定时器3做计数器,
去做100个定时器,用比较计数的方式,遇到问题就是,溢出中断事件怎么操作的。这个在手册里面没有发现,请指点一二,谢谢!!
清风予我
发表于 2023-4-20 08:36:16
zackwu 发表于 2023-4-19 16:46
您好,版主,我在库函数手册里面搜索了计数器,没得到想要的结果,就是我现在用定时器4中断,定时器3做计数 ...
"STC32G_Timer_Isr.c"文件是存放定时器中断函数的,中断事件可在对应的函数里面处理。