AiCube工具再学习 !
定时器T0 / T1 / T2 / T3 / T4, T11,1S, 500ms,10ms,200us,5us,2s718
////////////////////////////////////////
// 文件名称: main.c
// 文件描述:
// 文件版本: V1.0
// 修改记录:
// 1. (2025-03-29) 创建文件
////////////////////////////////////////
#include "config.h" //默认已包含stdio.h、intrins.h、ai_usb.h等头文件
////////////////////////////////////////
// 项目主函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void main(void)
{
SYS_Init();
while (1)
{
}
}
////////////////////////////////////////
// 系统初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void SYS_Init(void)
{
EnableAccessXFR(); //使能访问扩展XFR
AccessCodeFastest(); //设置最快速度访问程序代码
AccessIXramFastest(); //设置最快速度访问内部XDATA
IAP_SetTimeBase(); //设置IAP等待参数,产生1us时基
P0=0xFF;
P40=0;
P0M0 = 0xFF; P0M1 = 0x00; //初始化P0口为准双向口模式
P1M0 = 0x00; P1M1 = 0x00; //初始化P1口为准双向口模式
P2M0 = 0x00; P2M1 = 0x00; //初始化P2口为准双向口模式
P3M0 = 0x00; P3M1 = 0x00; //初始化P3口为准双向口模式
P4M0 = 0x01; P4M1 = 0x00; //初始化P4口为准双向口模式
P5M0 = 0x00; P5M1 = 0x00; //初始化P5口为准双向口模式
P6M0 = 0x00; P6M1 = 0x00; //初始化P6口为准双向口模式
P7M0 = 0x00; P7M1 = 0x00; //初始化P7口为准双向口模式
TIMER0_Init(); //定时器0初始化
TIMER1_Init(); //定时器1初始化
TIMER2_Init(); //定时器2初始化
TIMER3_Init(); //定时器3初始化
TIMER4_Init(); //定时器4初始化
TIMER11_Init(); //定时器11初始化
EnableGlobalInt(); //使能全局中断
}
////////////////////////////////////////
// 毫秒延时函数
// 入口参数: ms (设置延时的毫秒值)
// 函数返回: 无
////////////////////////////////////////
void delay_ms(uint16_t ms)
{
uint16_t i;
do
{
i = MAIN_Fosc / 6000;
while (--i);
} while (--ms);
}
////////////////////////////////////////
// 定时器0中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void TIMER0_ISR(void) interrupt TMR0_VECTOR
{
P00=!P00;
}
////////////////////////////////////////
// 定时器1中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void TIMER1_ISR(void) interrupt TMR1_VECTOR
{
P01=!P01;
}
////////////////////////////////////////
// 定时器2中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void TIMER2_ISR(void) interrupt TMR2_VECTOR
{
P02=!P02;
}
////////////////////////////////////////
// 定时器3中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void TIMER3_ISR(void) interrupt TMR3_VECTOR
{
P03=!P03;
}
////////////////////////////////////////
// 定时器4中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void TIMER4_ISR(void) interrupt TMR4_VECTOR
{
P04=!P04;
}
////////////////////////////////////////
// 定时器11中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void TIMER11_ISR(void) interrupt TMR11_VECTOR
{
P05=!P05;
}
////////////////////////////////////////
// 定时器0初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void TIMER0_Init(void)
{
#define T0_PSCR 102
#define T0_RELOAD (65536 - SYSCLK / 12 / (T0_PSCR + 1) * 2 / 1)
TIMER0_TimerMode(); //设置定时器0为定时模式
TIMER0_12TMode(); //设置定时器0为12T模式
TIMER0_Mode0(); //设置定时器0为模式0 (16位自动重载模式)
TIMER0_DisableGateINT0(); //禁止定时器0门控
TIMER0_SetIntPriority(0); //设置中断为最低优先级
TIMER0_EnableInt(); //使能定时器0中断
TIMER0_SetPrescale(T0_PSCR); //设置定时器0的8位预分频
TIMER0_SetReload16(T0_RELOAD); //设置定时器0的16位重载值
TIMER0_Run(); //定时器0开始运行
}
////////////////////////////////////////
// 定时器1初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void TIMER1_Init(void)
{
#define T1_PSCR 25
#define T1_RELOAD (65536 - SYSCLK / 12 / (T1_PSCR + 1) * 500 / 1000)
TIMER1_TimerMode(); //设置定时器1为定时模式
TIMER1_12TMode(); //设置定时器1为12T模式
TIMER1_Mode0(); //设置定时器1为模式0 (16位自动重载模式)
TIMER1_DisableGateINT1(); //禁止定时器1门控
TIMER1_SetIntPriority(0); //设置中断为最低优先级
TIMER1_EnableInt(); //使能定时器1中断
TIMER1_SetPrescale(T1_PSCR); //设置定时器1的8位预分频
TIMER1_SetReload16(T1_RELOAD); //设置定时器1的16位重载值
TIMER1_Run(); //定时器1开始运行
}
////////////////////////////////////////
// 定时器2初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void TIMER2_Init(void)
{
#define T2_PSCR 5
#define T2_RELOAD (65536 - SYSCLK / 12 / (T2_PSCR + 1) * 100 / 1000)
TIMER2_TimerMode(); //设置定时器2为定时模式
TIMER2_12TMode(); //设置定时器2为12T模式
TIMER2_EnableInt(); //使能定时器2中断
TIMER2_SetPrescale(T2_PSCR); //设置定时器2的8位预分频
TIMER2_SetReload16(T2_RELOAD); //设置定时器2的16位重载值
TIMER2_Run(); //定时器2开始运行
}
////////////////////////////////////////
// 定时器3初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void TIMER3_Init(void)
{
#define T3_PSCR 1
#define T3_RELOAD (65536 - SYSCLK / 12 / (T3_PSCR + 1) * 20 / 1000)
TIMER3_TimerMode(); //设置定时器3为定时模式
TIMER3_12TMode(); //设置定时器3为12T模式
TIMER3_EnableInt(); //使能定时器3中断
TIMER3_SetPrescale(T3_PSCR); //设置定时器3的8位预分频
TIMER3_SetReload16(T3_RELOAD); //设置定时器3的16位重载值
TIMER3_Run(); //定时器3开始运行
}
////////////////////////////////////////
// 定时器4初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void TIMER4_Init(void)
{
#define T4_PSCR 0
#define T4_RELOAD (65536 - SYSCLK / 12 / (T4_PSCR + 1) * 2 / 1000)
TIMER4_TimerMode(); //设置定时器4为定时模式
TIMER4_12TMode(); //设置定时器4为12T模式
TIMER4_EnableInt(); //使能定时器4中断
TIMER4_SetPrescale(T4_PSCR); //设置定时器4的8位预分频
TIMER4_SetReload16(T4_RELOAD); //设置定时器4的16位重载值
TIMER4_Run(); //定时器4开始运行
}
////////////////////////////////////////
// 定时器11初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void TIMER11_Init(void)
{
#define T11_PSCR 0
#define T11_RELOAD (65536 - SYSCLK / 12 / (T11_PSCR + 1) * 1 / 1000000)
TIMER11_TimerMode(); //设置定时器11为定时模式
TIMER11_12TMode(); //设置定时器11为12T模式
TIMER11_EnableInt(); //使能定时器11中断
TIMER11_SetPrescale(T11_PSCR); //设置定时器11的8位预分频
TIMER11_SetReload16(T11_RELOAD); //设置定时器11的16位重载值
TIMER11_Run(); //定时器11开始运行
}
AiCube工具再学习:定时器配置与应用
在嵌入式系统开发中,定时器(Timer)是至关重要的硬件资源,用于实现精确的时间控制、任务调度和事件触发。AiCube工具提供了多种定时器配置选项,包括T0、T1、T2、T3、T4以及T11,支持从微秒级到秒级的时间间隔。本文将详细介绍这些定时器的配置方法及其应用场景。
1. 定时器概述
定时器是嵌入式系统中用于计时的硬件模块,通常通过计数时钟周期来实现时间测量。AiCube工具支持的定时器包括:
T0 / T1 / T2 / T3 / T4:通用定时器,适用于大多数时间控制任务。
T11:高精度定时器,适用于需要更高时间分辨率的应用。
2. 定时器配置
AiCube工具允许用户根据需求配置定时器的时间间隔,常见的配置包括:
1秒(1S):适用于长时间间隔的任务调度。
500毫秒(500ms):适用于中等时间间隔的任务调度。
10毫秒(10ms):适用于较短时间间隔的任务调度。
200微秒(200us):适用于高频率事件触发。
5微秒(5us):适用于极高频率事件触发。
2秒(2s):适用于长时间间隔的任务调度。
3. 定时器应用场景
不同的定时器配置适用于不同的应用场景:
1秒(1S):适用于系统状态监控、数据采集等低频任务。
500毫秒(500ms):适用于中等频率的任务调度,如传感器数据读取。
10毫秒(10ms):适用于高频任务调度,如电机控制、PWM信号生成。
200微秒(200us):适用于高精度时间测量,如超声波测距。
5微秒(5us):适用于极高精度时间测量,如高速数据采集。
2秒(2s):适用于长时间间隔的任务调度,如系统自检。
4. 定时器配置示例
以下是一个使用AiCube工具配置定时器的示例代码:
c
include "AiCube.h"
void TimerInit(void) {
// 配置T0定时器为1秒
AiCubeTimerConfig(T0, 1000); // 1秒
// 配置T1定时器为500毫秒
AiCubeTimerConfig(T1, 500); // 500毫秒
// 配置T2定时器为10毫秒
AiCubeTimerConfig(T2, 10); // 10毫秒
// 配置T3定时器为200微秒
AiCubeTimerConfig(T3, 0.2); // 200微秒
// 配置T4定时器为5微秒
AiCubeTimerConfig(T4, 0.005); // 5微秒
// 配置T11定时器为2秒
AiCubeTimerConfig(T11, 2000); // 2秒
}
void TimerISR(void) {
// 定时器中断服务程序
// 根据定时器编号执行相应任务
switch (AiCubeTimerGetID()) {
case T0:
// 执行1秒任务
break;
case T1:
// 执行500毫秒任务
break;
case T2:
// 执行10毫秒任务
break;
case T3:
// 执行200微秒任务
break;
case T4:
// 执行5微秒任务
break;
case T11:
// 执行2秒任务
break;
default:
break;
}
}
5. 总结
AiCube工具提供了灵活的定时器配置选项,能够满足不同应用场景的需求。通过合理配置定时器,开发者可以实现精确的时间控制和任务调度,提高系统的可靠性和效率。在实际应用中,建议根据具体需求选择合适的定时器配置,并优化中断服务程序,以确保系统的稳定运行。
通过本文的介绍,相信读者对AiCube工具的定时器配置有了更深入的了解。在实际开发中,建议结合具体应用场景,灵活运用这些定时器,以实现最佳的系统性能。
[本文内容由国芯人工智能辅助生成,仅供参考] AiCube工具再学习:定时器T0 / T1 / T2 / T3 / T4,T11,1S, 500ms,10ms,200us,5us,2s
在嵌入式系统开发中,定时器(Timer)是至关重要的硬件资源,用于精确控制时间相关的任务。AiCube工具提供了多种定时器配置选项,包括T0、T1、T2、T3、T4以及T11,支持从微秒(us)到秒(s)级别的时间间隔设置。以下是对这些定时器的详细解析及其应用场景的探讨。
1. 定时器概述
定时器是嵌入式系统中用于计时和事件触发的硬件模块。通过配置定时器,开发者可以实现周期性任务调度、精确延时、PWM信号生成等功能。AiCube工具支持的定时器包括T0、T1、T2、T3、T4和T11,每个定时器具有不同的特性和应用场景。
2. 定时器配置
AiCube工具允许用户根据需求配置定时器的时间间隔,常见的配置包括1秒(1S)、500毫秒(500ms)、10毫秒(10ms)、200微秒(200us)、5微秒(5us)和2秒(2s)。这些时间间隔的选择取决于具体应用的需求。
1S(1秒):适用于需要长时间间隔的任务,如数据采集、状态监测等。
500ms(500毫秒):适用于中等时间间隔的任务,如传感器数据读取、LED闪烁控制等。
10ms(10毫秒):适用于需要较高频率的任务,如电机控制、按键扫描等。
200us(200微秒):适用于高频率任务,如PWM信号生成、高速数据采集等。
5us(5微秒):适用于极高频率任务,如高速通信、精确时间测量等。
2s(2秒):适用于需要较长周期但比1秒更灵活的任务,如定时器唤醒、周期性任务调度等。
3. 定时器应用场景
T0 / T1 / T2 / T3 / T4:这些定时器通常用于通用任务,如周期性任务调度、精确延时、PWM信号生成等。具体选择哪个定时器取决于系统资源的分配和任务的优先级。
T11:T11通常用于特殊任务,如高精度时间测量、高速通信等。由于其高精度和高频率特性,T11在需要极高时间精度的应用中表现出色。
4. 定时器配置示例
以下是一个使用AiCube工具配置定时器的示例代码:
c
include "AiCube.h"
void TimerInit(void) {
// 配置T0定时器,时间间隔为1秒
AiCubeTimerConfig(T0, 1000); // 1000ms = 1s
// 配置T1定时器,时间间隔为500毫秒
AiCubeTimerConfig(T1, 500); // 500ms
// 配置T2定时器,时间间隔为10毫秒
AiCubeTimerConfig(T2, 10); // 10ms
// 配置T3定时器,时间间隔为200微秒
AiCubeTimerConfig(T3, 0.2); // 200us
// 配置T4定时器,时间间隔为5微秒
AiCubeTimerConfig(T4, 0.005); // 5us
// 配置T11定时器,时间间隔为2秒
AiCubeTimerConfig(T11, 2000); // 2000ms = 2s
}
void TimerISR(void) {
// 定时器中断服务程序
// 根据定时器编号执行相应任务
switch (AiCubeTimerGetID()) {
case T0:
// 执行1秒任务
break;
case T1:
// 执行500毫秒任务
break;
case T2:
// 执行10毫秒任务
break;
case T3:
// 执行200微秒任务
break;
case T4:
// 执行5微秒任务
break;
case T11:
// 执行2秒任务
break;
default:
break;
}
}
5. 总结
AiCube工具提供了丰富的定时器配置选项,开发者可以根据具体应用需求选择合适的定时器和时间间隔。通过合理配置和使用定时器,可以实现精确的时间控制和任务调度,提升系统的性能和可靠性。在实际开发中,建议根据任务的特性和系统资源的分配,灵活选择和使用定时器,以达到最佳的系统效果。
90779907809078190782907839078490785718
[本文内容由国芯人工智能辅助生成,仅供参考] 传统外部中断,INT0 / INT1
719
// 文件名称: main.c
// 文件描述:
// 文件版本: V1.0
// 修改记录:
// 1. (2025-03-31) 创建文件
////////////////////////////////////////
#include "config.h" //默认已包含stdio.h、intrins.h、ai_usb.h等头文件
////////////////////////////////////////
// 项目主函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void main(void)
{
SYS_Init();
while (1)
{
USBLIB_OUT_Done(); //查询方式处理USB接收的数据
}
}
////////////////////////////////////////
// 系统初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void SYS_Init(void)
{
EnableAccessXFR(); //使能访问扩展XFR
AccessCodeFastest(); //设置最快速度访问程序代码
AccessIXramFastest(); //设置最快速度访问内部XDATA
IAP_SetTimeBase(); //设置IAP等待参数,产生1us时基
P0=0XFF;
P40=0;
P0M0 = 0x00; P0M1 = 0x00; //初始化P0口为准双向口模式
P1M0 = 0x00; P1M1 = 0x00; //初始化P1口为准双向口模式
P2M0 = 0x00; P2M1 = 0x00; //初始化P2口为准双向口模式
P3M0 = 0x00; P3M1 = 0x00; //初始化P3口为准双向口模式
P4M0 = 0x00; P4M1 = 0x00; //初始化P4口为准双向口模式
P5M0 = 0x00; P5M1 = 0x00; //初始化P5口为准双向口模式
P6M0 = 0x00; P6M1 = 0x00; //初始化P6口为准双向口模式
P7M0 = 0x00; P7M1 = 0x00; //初始化P7口为准双向口模式
CLK_Init(); //时钟模块初始化
EXTI0_Init(); //INT0初始化
EXTI1_Init(); //INT1初始化
USBLIB_Init(); //USB库初始化
EnableGlobalInt(); //使能全局中断
}
////////////////////////////////////////
// 毫秒延时函数
// 入口参数: ms (设置延时的毫秒值)
// 函数返回: 无
////////////////////////////////////////
void delay_ms(uint16_t ms)
{
uint16_t i;
do
{
i = MAIN_Fosc / 6000;
while (--i);
} while (--ms);
}
////////////////////////////////////////
// 外部中断INT0中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI0_ISR(void) interrupt INT0_VECTOR
{
P00=~P00;
}
////////////////////////////////////////
// 外部中断INT1中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI1_ISR(void) interrupt INT1_VECTOR
{
P01=~P01;
}
////////////////////////////////////////
// 时钟初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void CLK_Init(void)
{
CLK_SYSCLK_Divider(10); //切换主时钟前先将系统时钟降频
HIRC_40M(); //选择内部预置的频率
CLK_MCLK_HIRC(); //选择内部高精度HIRC作为主时钟
CLK_MCLK2_BYPASS(); //旁路MCLK2,直接使用MCLK选择
CLK_SYSCLK_Divider(1); //设置系统时钟分频系数
CLK_HSIOCK_MCLK(); //选择MCLK主时钟作为高速外设时钟源
CLK_HSIOCK_Divider(1); //设置高速外设时钟预分频系数
CLK_SPICLK_Divider(1); //设置SPI时钟预分频系数
CLK_I2SCLK_Divider(1); //设置I2S时钟预分频系数
CLK_PWMACLK_Divider(1); //设置PWMA时钟预分频系数
CLK_PWMBCLK_Divider(1); //设置PWMB时钟预分频系数
CLK_TFPUCLK_Divider(1); //设置TFPU时钟预分频系数
}
////////////////////////////////////////
// 外部中断INT0初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI0_Init(void)
{
INT0_FallingInt(); //设置外部中断为下降沿中断
INT0_SetIntPriority(0); //设置中断为最低优先级
INT0_EnableInt(); //使能外部中断
}
////////////////////////////////////////
// 外部中断INT1初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI1_Init(void)
{
INT1_FallingInt(); //设置外部中断为下降沿中断
INT1_SetIntPriority(0); //设置中断为最低优先级
INT1_EnableInt(); //使能外部中断
}
////////////////////////////////////////
// USB库初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void USBLIB_Init(void)
{
usb_init(); //初始化USB模块
USB_SetIntPriority(0); //设置中断为最低优先级
set_usb_ispcmd("@STCISP#"); //设置USB不停电下载命令
}
////////////////////////////////////////
// 等待USB配置完成函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void USBLIB_WaitConfiged(void)
{
while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
}
////////////////////////////////////////
// USB设备接收数据处理程序
// 入口参数: 无
// 函数返回: 无
// bUsbOutReady:USB设备接收数据标志位
// OutNumber:USB设备接收到的数据长度
// UsbOutBuffer:保存USB设备接收到的数据
////////////////////////////////////////
void USBLIB_OUT_Done(void)
{
if (bUsbOutReady) //查询是否有接收到数据
{
USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试
usb_OUT_done(); //当前包的数据处理完成
}
}
所有普通I/O口都支持的外部中断(做4个按键,P3.2,P3.3,P3.4,P3.5按键中断)
720
// 文件名称: main.c
// 文件描述:
// 文件版本: V1.0
// 修改记录:
// 1. (2025-03-31) 创建文件
////////////////////////////////////////
#include "config.h" //默认已包含stdio.h、intrins.h、ai_usb.h等头文件
////////////////////////////////////////
// 项目主函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void main(void)
{
SYS_Init();
while (1)
{
USBLIB_OUT_Done(); //查询方式处理USB接收的数据
}
}
////////////////////////////////////////
// 系统初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void SYS_Init(void)
{
EnableAccessXFR(); //使能访问扩展XFR
AccessCodeFastest(); //设置最快速度访问程序代码
AccessIXramFastest(); //设置最快速度访问内部XDATA
IAP_SetTimeBase(); //设置IAP等待参数,产生1us时基
P0=0XFF;
P40=0;
P0M0 = 0x00; P0M1 = 0x00; //初始化P0口为准双向口模式
P1M0 = 0x00; P1M1 = 0x00; //初始化P1口为准双向口模式
P2M0 = 0x00; P2M1 = 0x00; //初始化P2口为准双向口模式
P3M0 = 0x00; P3M1 = 0x00; //初始化P3口为准双向口模式
P4M0 = 0x00; P4M1 = 0x00; //初始化P4口为准双向口模式
P5M0 = 0x00; P5M1 = 0x00; //初始化P5口为准双向口模式
P6M0 = 0x00; P6M1 = 0x00; //初始化P6口为准双向口模式
P7M0 = 0x00; P7M1 = 0x00; //初始化P7口为准双向口模式
CLK_Init(); //时钟模块初始化
EXTI0_Init(); //INT0初始化
EXTI1_Init(); //INT1初始化
USBLIB_Init(); //USB库初始化
EnableGlobalInt(); //使能全局中断
}
////////////////////////////////////////
// 毫秒延时函数
// 入口参数: ms (设置延时的毫秒值)
// 函数返回: 无
////////////////////////////////////////
void delay_ms(uint16_t ms)
{
uint16_t i;
do
{
i = MAIN_Fosc / 6000;
while (--i);
} while (--ms);
}
////////////////////////////////////////
// 外部中断INT0中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI0_ISR(void) interrupt INT0_VECTOR
{
P00=~P00;
}
////////////////////////////////////////
// 外部中断INT1中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI1_ISR(void) interrupt INT1_VECTOR
{
P01=~P01;
}
////////////////////////////////////////
// 时钟初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void CLK_Init(void)
{
CLK_SYSCLK_Divider(10); //切换主时钟前先将系统时钟降频
HIRC_40M(); //选择内部预置的频率
CLK_MCLK_HIRC(); //选择内部高精度HIRC作为主时钟
CLK_MCLK2_BYPASS(); //旁路MCLK2,直接使用MCLK选择
CLK_SYSCLK_Divider(1); //设置系统时钟分频系数
CLK_HSIOCK_MCLK(); //选择MCLK主时钟作为高速外设时钟源
CLK_HSIOCK_Divider(1); //设置高速外设时钟预分频系数
CLK_SPICLK_Divider(1); //设置SPI时钟预分频系数
CLK_I2SCLK_Divider(1); //设置I2S时钟预分频系数
CLK_PWMACLK_Divider(1); //设置PWMA时钟预分频系数
CLK_PWMBCLK_Divider(1); //设置PWMB时钟预分频系数
CLK_TFPUCLK_Divider(1); //设置TFPU时钟预分频系数
}
////////////////////////////////////////
// 外部中断INT0初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI0_Init(void)
{
INT0_FallingInt(); //设置外部中断为下降沿中断
INT0_SetIntPriority(0); //设置中断为最低优先级
INT0_EnableInt(); //使能外部中断
}
////////////////////////////////////////
// 外部中断INT1初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void EXTI1_Init(void)
{
INT1_FallingInt(); //设置外部中断为下降沿中断
INT1_SetIntPriority(0); //设置中断为最低优先级
INT1_EnableInt(); //使能外部中断
}
////////////////////////////////////////
// USB库初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void USBLIB_Init(void)
{
usb_init(); //初始化USB模块
USB_SetIntPriority(0); //设置中断为最低优先级
set_usb_ispcmd("@STCISP#"); //设置USB不停电下载命令
}
////////////////////////////////////////
// 等待USB配置完成函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void USBLIB_WaitConfiged(void)
{
while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
}
////////////////////////////////////////
// USB设备接收数据处理程序
// 入口参数: 无
// 函数返回: 无
// bUsbOutReady:USB设备接收数据标志位
// OutNumber:USB设备接收到的数据长度
// UsbOutBuffer:保存USB设备接收到的数据
////////////////////////////////////////
void USBLIB_OUT_Done(void)
{
if (bUsbOutReady) //查询是否有接收到数据
{
USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试
usb_OUT_done(); //当前包的数据处理完成
}
}
工具体验了一把,功能让人眼前一亮,但建议加个项目保存功能,因为如果生成软件,后面测试如果不合适,需要重新生成(工具关了再开工具),此时需要把所有的设置要重新设置一遍,比较麻烦,建议在“创建项目”的功能上,再加一个“项目保存”,这样下次再生成类似的项目时,就不需要一个个的设置了。
页:
[1]