×
嵌入式 > 技术百科 > 详情

STM8L学习笔记一 TIM2定时器设定系统工作计时

发布时间:2020-12-22 发布时间:
|

//定时器2配置,1毫秒产生一次中断,用于系统计时


void TIM2_Init(void)   


CLK_PeripheralClockConfig(CLK_Peripheral_TIM2,ENABLE);//将主时钟信号送给定时器4(L系列单片机必需)

TIM2_TimeBaseInit(TIM2_Prescaler_16,TIM2_CounterMode_Up,0x7D);            //定时器4,将主时钟16分频.自动装载FA=125

TIM2_SetCounter(0xFA);                                //设定计数值FA=125

TIM2_ITConfig(TIM2_IT_Update,ENABLE);

TIM2_ARRPreloadConfig(ENABLE);

TIM2_Cmd(ENABLE);                                    //计数器使能,开始计数   

}




/*

****************************************************************************

* INTERRUPT_HANDLER(TIM2_UPD_OVF_TRG_BRK_IRQHandler, 19)

* 功能描述: TIM2中断处理函数,产生1毫秒中断,用于计时

* 返 回 值:无

****************************************************************************

*/


//中断处理函数,在中断中累加数据

INTERRUPT_HANDLER(TIM2_UPD_OVF_TRG_BRK_IRQHandler, 19)//TIM2中断处理函数,产生1毫秒中断,用于计时

{

  TIM2_ClearFlag(TIM2_FLAG_Update); //清中断标志位


ms2_cnt++;

ms10_cnt++;

ms100_cnt++;

UsartTime++;

if( Second_cnt >= 999 )

{

Second_cnt = 0;

SecondFlag = 1;

}

else

{

Second_cnt++;

}

}




/*

****************************************************************************

* void Init(void)

* 功能描述: 初始化各个功能模块状态

* 返 回 值:无

****************************************************************************

*/

void Init(void)

{

asm("sim"); //关全局中断

CLK_Init( ); //时钟初始化

SPI_Initial( ); //SPI初始化sht10

GPIO_Initial( );//端口初始化

USART_Initial( );//用于485通讯

IIC_Init(); //用于传感器通讯

Init_BH1750( ); //初始化BH1750

TIM2_Init( ); //时钟2用于1毫秒计时

FLASH_DeInit(); //eeprom初始化

InitEeprom( );

InitAWU( ); //使能自动唤醒功能

asm("rim"); //开全局中断 


}




/*

****************************************************************************

* main()

* 功能描述: 主函数

* 返 回 值:无

****************************************************************************

*/

#define CC1101Tx  0 //0:接收模式,1:发送模式



void main (void)

unsigned char i=0;

unsigned char timecnt=0;

Init();

//485设为接收模式//

//M485_Para.ReceivePoint = 0;

//M485_Para.ReadPoint = 0;


//s_connectionreset();

//Single_Write_BH1750(0x01);   //传感器上电power on

//Single_Write_BH1750(0x10);   //设定传感器工作模式 H- resolution mode

delay_ms(180);               //延时180ms,用于等待传感器初始化


//GS_CC1101SetTRMode( RX_MODE );


while(1)

if( ms2_cnt > 2 )

{

ms2_cnt = 0;

//M485DataPro();//485数据处理

}


if( ms10_cnt >=10 )

{

ms10_cnt = 0;

ms10_Work();//10毫秒执行的任务

}


if( ms100_cnt >= 100 )

{

ms100_cnt = 0;

ms100_Work();//100毫秒执行的任务

}


if( SecondFlag == 1 )

{

timecnt++;

SecondFlag = 0;

Second_Work();//每秒执行的任务 


#if CC1101Tx //数据发送


CC1101SendData(0x03,0x00,0x0E);

//GS_CC1101SendPacket( M485_Send_Buffer,9, ADDRESS_CHECK );

#else //数据接收 

i = CC1101DataPro();


if( i== 0 )

GPIO_ToggleBits( GPIOD, GPIO_Pin_0); //反转灯的状态


for(i=0;i<27;i++)

{

putchar(M485_Para.Uart_Buffer[i]);

}


if(timecnt > 20)

{

timecnt = 0;

halt(); //进入待机模式

}

#endif

}

}

}


说明:TIM2用于产生1毫秒中断,作为系统工作节拍。main函数到10ms,100ms  ,1s执行不同的任务

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
NS推出采用第二代PowerWise技术的能源管理单元及先进电源控制器