打印
[RISC-V MCU 创新应用比赛]

请教如何做一个精准的1MS定时器中断?

[复制链接]
1797|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#include "time.h"
#include "led.h"

void TIM3_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));

void TIM3_Int_Init(u16 arr,u16 psc)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能TIM3时钟

    TIM_TimeBaseStructure.TIM_Period = arr;   //指定下次更新事件时要加载到活动自动重新加载寄存器中的周期值。
    TIM_TimeBaseStructure.TIM_Prescaler =psc; //指定用于划分TIM时钟的预分频器值。
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;     //时钟分频因子
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM计数模式,向上计数模式
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位

    TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能TIM3中断,允许更新中断

    //初始化TIM NVIC,设置中断优先级分组
    NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;           //TIM3中断
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //设置抢占优先级0
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;        //设置响应优先级3
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;           //使能通道1中断
    NVIC_Init(&NVIC_InitStructure); //初始化NVIC

    TIM_Cmd(TIM3, ENABLE); //TIM3使能
}

void TIM3_IRQHandler(void)
{
    static u8 i=0;

    if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3中断是否发生。
      {
        TIM_ClearITPendingBit(TIM3,TIM_IT_Update);    //清除TIM3的中断挂起位。
        printf("Enter interrupt\n");
        GPIO_WriteBit(GPIOA, GPIO_Pin_1, (i==0) ? (i=Bit_SET):(i=Bit_RESET));
      }
}
我这个代码中的参数该怎么设置?

使用特权

评论回复

相关帖子

沙发
xdqfc| | 2022-8-10 11:16 | 只看该作者
本帖最后由 xdqfc 于 2022-8-10 11:18 编辑

arr是周期,psc是分频器,假如系统时钟是48M,分频器设定47,定时器计数时钟就是1M,假如设定arr是1000,没有错误的话,就是1ms定时。(分频器不知道是48还是47了,要看一下文档)。

使用特权

评论回复
板凳
LIzs6| | 2022-8-10 20:44 | 只看该作者
可按照下图计算公式进行计算

使用特权

评论回复
地板
skyred| | 2022-8-15 20:49 | 只看该作者
定时器

使用特权

评论回复
5
chenci2013| | 2022-8-20 12:22 | 只看该作者
谢谢楼主分享的资料。   

使用特权

评论回复
6
mmbs| | 2022-8-20 13:45 | 只看该作者
定时器还不精确吗   

使用特权

评论回复
7
ingramward| | 2022-8-20 20:29 | 只看该作者
ch32v103提供了这个代码的。  

使用特权

评论回复
8
phoenixwhite| | 2022-8-21 20:27 | 只看该作者
这个直接中断产生  

使用特权

评论回复
9
sdlls| | 2022-8-21 21:24 | 只看该作者
使用systick可以。   

使用特权

评论回复
10
cehuafan| | 2022-9-5 16:46 | 只看该作者
定好初值后要延迟一秒就定一个延时参数

使用特权

评论回复
11
louliana| | 2022-9-5 17:20 | 只看该作者
:配置一个1ms定时器,并设置为自动清零模式

使用特权

评论回复
12
jstgotodo| | 2022-9-8 09:02 | 只看该作者
这个bsp没有吗?               

使用特权

评论回复
13
suzhanhua| | 2022-9-8 10:01 | 只看该作者
如何编写代码?

使用特权

评论回复
14
xdqfc| | 2022-9-8 11:16 | 只看该作者

就是几个寄存器配置一下的事情,看一下文档就搞定了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

453

帖子

2

粉丝