【南京中科微CSM32RV20开发板试用体验】+2.Timer基本功能

描述

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

前言

大家好。
首先,感谢南京中科微提供的CSM32RV20开发板,同时也感谢发烧友提供的试用平台。
这次测试的是定时器,测试目标:使用定时器,周期性的控制LED灯。

代码编程
还是一样的,按照官方的教程,建立DEMO程序,查看main.c文件。
南京中科微

基本上定时器的相关代码就在这里的,但是定时器的中断函数呢?函数入口呢?
这里可以直接查看启动文件。
南京中科微

按照这个函数名称,查找:ctrl+f(基本上绝大多说的查找命令都是这个快捷键组合)
南京中科微

这样你就能找到中断函数:
南京中科微

在中断函数里,交替改变的是PA12引脚的电平变化。

到了这里,我基本上有了编程的思路的,这还在没有看数据手册的情况下:
具体代码如下:


  1. int main(void)
  2. {
  3.     ///----System Init ---------------------------------------------------------------------------------------------
  4.     CLIC_Init();//系统中断配置
  5.     System_Clock_Init();//系统时钟初始化
  6.  
  7.     GPIO_MODE_Init(GPIOA,PIN12,GPIO_MODE_OUTPUT); //GPIO 模式
  8.  
  9.     //外设配置
  10.     timer1_UpCounting_Mode_Init();//向上计数
  11.  
  12.     Interrupt_Enable(TIMER1_updata_int_ID);//CLIC使能中断
  13.  
  14.     //使能系统总中断
  15.     SYS_Interrupt_Enable();//CLIC开总中断
  16.  
  17.     while(1)
  18.     {
  19.  
  20.  
  21.     }
  22.   return 0;
  23. }
复制代码



程序编译下载:
结果灯好像没有什么变化?就一个红灯常亮?
南京中科微

不要着急,使用示波器,或者逻辑分析仪看一下,PA12引脚的电平,你就明白了。
南京中科微

频率都达到了500HZ了,肉眼能看到,才是怪事。

到了这里,实验目的是达到了。但是通常,我们是需要改变定时的周期/频率的,所以,这里就需要仔细的研究下定时器初始化了。
南京中科微

PSC-预分频,值为31ARR-自动重装寄存器,值为1000
结合系统时钟是32MHZ,所以定时器的频率分频应该是31+1,所以计时时钟为1MHZ
在这个频率下,计数1000个,也就是1KHZ1MS,所以,定时器的中断周期是1MSLED的频率就是500HZ了。
如果是这样的话,ARR的值应该是1000-1=999才是更精确的1MS定时中断啊。不过都是小问题。

调整验证一下:
将定时器中断周期改为500MS,使得LED1S闪烁一次。更改Timer1_UpCounting_Mode_Init();
南京中科微

可以看到预分频的值范围是0-65535
定时器为16位定时器,计数范围也是0-65535
所以修改定时器初始化值为:
南京中科微

在抓PA12波形:
南京中科微




试用感受
CSM32整体用起来,感觉还是不错基本上不用看手册就可以了,把单个功能实现。但是,如果在仔细的看官方的源代码,其实还是能找到一些小问题。
就比如,定时器ARR应该要减1才对,
南京中科微

虽然,这些小问题,不会影响到代码功能,但是还是少了一份严谨。
总体来说,我还是要为我们国产的单片机点个赞,希望再接再厉!

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

全部0条评论

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

×
20
完善资料,
赚取积分