代码功能:每隔1毫秒进入一次定时器中断。
每隔1秒串口打印一次数据。
time.c
#include "time.h"
#include "ch32v10x.h"
#include
int w = 0;
void TIM3_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
/*******************************************************************************
* Function Name : TIM3_Int_Init
* Description : 定时器3初始化,因为赫兹是频率的单位,周期=1÷频率,从单位看:秒=1÷赫兹。
* 7199:10khz,1÷10000hz(秒)=1÷10000hz(秒)* 1000000us = 100us 进行一次计数。
* arr = 10,表示计数10次产生一次定时器中断,10个100us,即1ms进一次中断函数。
* Input : None
* Return : None
*******************************************************************************/
void TIM3_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
/\*使能TIM3时钟\*/
RCC\_APB1PeriphClockCmd(RCC\_APB1Periph\_TIM3, ENABLE);
/\*指定下次更新事件时要加载到活动自动重新加载寄存器中的周期值。\*/
TIM\_TimeBaseStructure.TIM\_Period = arr;
/\*指定用于划分TIM时钟的预分频器值。\*/
TIM\_TimeBaseStructure.TIM\_Prescaler =psc;
/\*时钟分频因子\*/
TIM\_TimeBaseStructure.TIM\_ClockDivision = TIM\_CKD\_DIV1;
/\*TIM计数模式,向上计数模式\*/
TIM\_TimeBaseStructure.TIM\_CounterMode = TIM\_CounterMode\_Up;
/\*根据指定的参数初始化TIMx的时间基数单位\*/
TIM\_TimeBaseInit(TIM3, &TIM\_TimeBaseStructure);
/\*使能TIM3中断,允许更新中断\*/
TIM\_ITConfig(TIM3,TIM\_IT\_Update,ENABLE );
/\*初始化TIM NVIC,设置中断优先级分组\*/
/\*TIM3中断\*/
NVIC\_InitStructure.NVIC\_IRQChannel = TIM3\_IRQn;
/\*设置抢占优先级0\*/
NVIC\_InitStructure.NVIC\_IRQChannelPreemptionPriority = 0;
/\*设置响应优先级3\*/
NVIC\_InitStructure.NVIC\_IRQChannelSubPriority = 3;
/\*使能通道1中断\*/
NVIC\_InitStructure.NVIC\_IRQChannelCmd = ENABLE;
NVIC\_Init(&NVIC\_InitStructure);
TIM\_Cmd(TIM3, ENABLE);
}
void TIM3_IRQHandler(void)
{
if(TIM\_GetITStatus(TIM3, TIM\_IT\_Update) != RESET) //检查TIM3中断是否发生。
{
TIM\_ClearITPendingBit(TIM3,TIM\_IT\_Update); //清除TIM3的中断挂起位。
w++;
if(w> 1000)
{
w= 0;
printf("Enter interrupt\\n");
}
}
}
main.c初始化
#include "time.h"
/*******************************************************************************
* Function Name : main
* Description : Main program.
* Input : None
* Return : None
*******************************************************************************/
int main(void)
{
u8 j=0;
NVIC\_PriorityGroupConfig(NVIC\_PriorityGroup\_2);
Delay\_Init();
USART\_Printf\_Init(115200);
TIM3\_Int\_Init(4999,7199);
printf("SystemClk:%d\\r\\n",SystemCoreClock);
while(1);
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章