欢迎来到天天文库
浏览记录
ID:48740374
大小:183.00 KB
页数:16页
时间:2020-01-21
《定时器模块测试.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、定时器模块测试定时器模块基本原理1定时器模块主要函数2测试方法3添加代码4定时器模块基本原理定时器模块可以用来初始化时间计数器以及获取当前系统时间为协议栈后续流程使用。在这里用Timer1作为计数器。它是一个独立的16位的定时/计数器,支撑5条独立捕获/比较通道,每个通道独立使用一个通用I/O口。定时器模块主要函数voidSymbolTimerInit(void)符号时间计数器初始化函数:将Timer1设定为128分频,定时器模式为自动重装,从0x0000到0xFFFF。并进行清除中断标志,开中断以及设定初值操作。TICKTickGet(void)获取计数
2、器值,得知当前系统时间。函数返回值为一个结构体包含四个无符号字符型的值b0、b1、b2、b3,得知系统滴答为(b3*oxFF+b2)*0xFFFF+b1b0。在Timer1中断标志为1并且Timer1状态寄存器的溢出中断标志为1的条件下,如果Timer1计数器低8位的值小于10,那么将中断的次数加1。(当一处发生在关闭Timer1和读取计数器低8位的值之间时,那么读取的中断次数值不正确,人为修改timerextension1中的值,用计数器低8位的值小于10的方法表示刚刚溢出即读值有误)。HAL_ISR_FUNCTION(Timer1Isr,T1_VECT
3、OR),发生中断时调用该函数,用于计算中断的次数。#defineTickGetDiff(a,b)((a.Val>b.Val)?(a.Val-b.Val):(0xFFFFFFFF-b.Val+a.Val+1))这个宏定义用来算出前后两次获取时钟滴答之间的时间差。#defineSYMBOLS_TO_TICKS(a)(DWORD)(a*MAC_RADIO_TIMER_TICKS_PER_SYMBOL())用于将symbol转变成tick.一个symbol是16um测试方法利用TickGetDiff(a,b)函数测出前后两次获取时钟滴答的时间差,然后与100ms进
4、行对比,若小于则继续TickGet(),知道大于为止,若大于则n值减1(n初值为10),直到n减为0红灯亮。应该是一秒的时间,利用时钟滴答计算出具体的系统时间进行比较。添加代码hal_symboltime.c下面添加的内容包括//初始化LED灯voidInitLed(void){P1DIR=0x03;//P10,P11为输出;RLED=0;GLED=0;}voidSymbolTimerInit(void){//.............................................................InitLed();//将
5、LED灯进行初始化...}hal_symboltime.h下面添加的内容包括#defineRLEDP1_0//用灯的亮灭测试时间准不准#defineGLEDP1_1main_COORD.c下面添加内容//.................添加。。。。。。。。。。。。TICKtemp1,temp2;//存放TickGet()返回值//.........................................../*temp1=TickGet();//每隔一秒亮灭。。。。。。。。。。while(1){//RLED=!RLED;temp2=TickGet
6、();if(TickGetDiff(temp2,temp1)>ONE_SECOND){RLED=!RLED;temp1=TickGet();}//else//GLED=!GLED;}*///用10个100毫秒代替temp1=TickGet();intn=10;while(1){temp2=TickGet();if(TickGetDiff(temp2,temp1)>0x61A8)//0X61A8是100毫秒的长度{n--;temp1=temp2;if(n==0){n=10;RLED=!RLED;}}}temp3=SYMBOLS_TO_TICKS(2);Tha
7、nkYou!That’sall
此文档下载收益归作者所有