打印
[RISC-V MCU 应用开发]

【RISC-V MCU CH32V103测评6】+ 定时器闪烁LED做运行指示

[复制链接]
621|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xyz549040622|  楼主 | 2020-12-7 10:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有时候程序下载进去会出现跑不起来的情况,这个时候我们就不知道到底是芯片死机了还是程序不对,因此通用的做法是定时器中使一个LED闪烁,用作状态运行指示。这样我们就知道程序可以安稳的运行起来了。
这个闪烁时间通常是500ms一次。
我们把高级定时器1用作其他用途,使用通用定时器2做LED的闪烁定时器。代码如下所示:

定时器的初始化:
void TIM2_Int_Init(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //使能TIM2时钟

    TIM_TimeBaseStructure.TIM_Period = 4999;   //100us*5000=500ms
    TIM_TimeBaseStructure.TIM_Prescaler =7199; //TIM时钟的预分频器值,72M/(7199+1)=100us
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;     //时钟分频因子
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM计数模式,向上计数模式
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位

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

    //初始化TIM NVIC,设置中断优先级分组
    NVIC_InitStructure.NVIC_IRQChannel = TIM2_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(TIM2, ENABLE); //TIM3使能
}
定时器的中断函数:
void TIM2_IRQHandler(void)
{
    if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //检查TIM3中断是否发生。
      {
        TIM_ClearITPendingBit(TIM2,TIM_IT_Update);    //清除TIM3的中断挂起位。
        Toggle_User_Led(User_LED2);
      }
}
整个工程打包如下:

CH32V103-TIMER.rar (603.33 KB)

使用特权

评论回复

相关帖子

沙发
dtsayhi| | 2020-12-8 17:37 | 只看该作者
能进后台中断 不能进大循环前台 你这就有点缺陷

使用特权

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

本版积分规则

个人签名:qq群: 嵌入式系统arm初学者 224636155←← +→→点击-->小 i 精品课全集,21ic公开课~~←←→→点击-->小 i 精品课全集,给你全方位的技能策划~~←←

2782

主题

19266

帖子

104

粉丝