【单片机】CH32V103C8T6定时器3程序实验
阅读原文时间:2023年07月10日阅读:2

代码功能:每隔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);  

}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章