【南京中科微CSM32RV20开发板试用体验】+定时器时钟试验暂未成功

描述

本文来源电子发烧友社区,作者:II, 帖子地址:https://bbs.elecfans.com/jishu_2293222_1_1.html

试用CSM32RV20开发板时,想做个计时器显示时分秒,看了手册和论坛里前辈的帖子,rtc似乎不太适用,便想采用timer,可是折腾半天也没成功。

首先main中设置timer1计数方式,使能中断:

Timer1_UpCounting_Mode_Init();//向上计数Interrupt_Enable(TIMER1_updata_int_ID);//CLIC使能中断
SYS_Interrupt_Enable();//CLIC开总中断

修改timer.c中的Timer1_Update_IRQhandler函数:

volatile uint8_t timer_fg = 0;
volatile uint16_t irq_cnt = 0;

void Timer1_Update_IRQhandler(void)
{
	if(TIMER1->SR&0x1)
    {
        TIMER1->SR &= ~0x1;
    }

    irq_cnt ++;
    //ee_printf("in Timer1_Update_IRQhandlerrn");
    
    if(irq_cnt == 1000) {
        Interrupt_Disable(TIMER1_updata_int_ID);
        //ee_printf("timer cnt 1000rn");
        irq_cnt = 0;
        timer_fg = 1;
    }
}

这里的irq_cnt++到5次应用就停止了,打印了一堆乱码。需要注意的是,不要在中断函数中打印debug信息,一方面打印频率会非常高,并且printf过程中会被中断打断,导致乱码。CSM32RV20开发板如果串口打印非常频繁,会影响新程序的下载,下载时按复位没反应。刚开始出现无法下载现象时我很慌乱,意为这板子被我玩坏了,后来按其他板子的经验,按住复位重新加电,待出现下载串口时立刻点下载,才又下载成功了。:(

中断函数中的Interrupt_Disable(TIMER1_updata_int_ID)似乎没有起作用,中断没有停下来。

修改分频和预装载值,也没有达到预期效果。分频数改大后,索性没有中断了。我曾在Timer1_UpCounting_Mode_Init中试了几个值。
南京中科微

而且使能中断后,串口打印信息总是出现乱码。

看来timer方式暂时不行了,用笨办法简单实现一个试用demo吧。代码如下,献丑了。待有空时好好研究CSM32RV20的timer和rtc。

南京中科微

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分