这是一个STM32的定时器/计数器的简单应用例子,其功能是用定时/计数器2控制与PC10,PC11引脚连接的两个发光二极管交替发光。通过设置时钟分频和ARR寄存器使定时时间约为0.2秒钟,在中断服务程序中对LED连接的引脚进行操作。 使用的软件是IAR5.2,调试下载用H-JTAG V8.1和Wiggler。程序在下载到板上硬件仿真和运行都没有问题,而在软件仿真时寄存器窗口却没有显示TIM2_CNT寄存器变化,一直为0x0000,无论全速运行多久都没有变化,从i的数值可以看到运行多久就都是这样,把TIM2_PSC寄存器改成1也一样,也不会进入中断,就好像定时器2根本就没有开启,不知道这是为什么???!!! 难道说IAR的软件仿真功能不行??
下面是程序的主要部分 --------------------------------------------------------------------- u16 ReadData =555; u32 i =0;
int main() { RCC_Configuration( ); GPIO_Configuration( ); NVIC_Configuration( ); TIM2_Configuration( ); while(1) { ReadData = TIM_GetCounter(TIM2); i++; /* 记录循环的次数 */ } }
/*************************************************************/ void RCC_Configuration(void) { ErrorStatus HSEStartUpStatus; /* RCC system reset(for debug purpose) */ RCC_DeInit(); /* Enable HSE */ RCC_HSEConfig(RCC_HSE_ON); /* Wait till HSE is ready */ HSEStartUpStatus = RCC_WaitForHSEStartUp(); if (HSEStartUpStatus == SUCCESS) { 此处省略.... } /* GPIOC clock enable */ RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC , ENABLE); /* TIM2 时钟使能 */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE ); }
/*****************************************************************/ void TIM2_Configuration( void){ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure ; TIM_DeInit(TIM2); /* TIM2时基设置 */ TIM_TimeBaseStructure.TIM_Period = 0x4fff; TIM_TimeBaseStructure.TIM_Prescaler =0x6e; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /*TIM_TimeBaseStructure.TIM_RepetitionConuter = ; 这个设置仅用于TIM1和TIM8。*/ TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); /* Enables the TIM1 Preload on ARR Register */ //TIM_ARRPreloadConfig(TIM2, ENABLE); 这句有用没有用呢??? /* 清除中断标志位 */ TIM_ClearITPendingBit(TIM2, TIM_IT_Update); /* 使能定时/计数器2更新中断 */ TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); /* 使能定时/计数器2 */ TIM_Cmd(TIM2,ENABLE); } ---------------------------------------------------------------------
相关链接:https://bbs.21ic.com/upfiles/img/20092/2009211102050522.rar |