新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32通用定時器TIM25基本用法

        STM32通用定時器TIM25基本用法

        作者: 時間:2016-11-19 來源:網絡 收藏
        STM32的定時器是個強大的模塊,定時器使用的頻率也是很高的,定時器可以做一些基本的定時,還可以做PWM輸出或者輸入捕獲功能。從系統框架圖下看,名為TIMx的有八個,其中TIM1和TIM8掛在APB2總線上,而TIM2-TIM7則掛在APB1總線上。其中TIM1&TIM8稱為高級控制定時器(advancedcontroltimer).他們所在的APB2總線也比APB1總線要好。APB2可以工作在72MHz下,而APB1最大是36MHz。


        本文引用地址:http://www.104case.com/article/201611/318499.htm


        由上圖可知,當APB1的預分頻系數為1 時,這個倍頻器不起作用,定時器的時鐘頻率等于APB1的頻率;當APB1的預分頻系數為其它數值(即預分頻系數為2、4、8 或16)時,這個倍頻器起作用,定時器的時鐘頻率等于APB1的頻率兩倍。也就是,當APB1不分頻,TIM3的時鐘速度為36MHz,當2分頻是,APB1變成18MHz,但是TIM又會倍頻,即TIM時鐘等于18*2=36MHz。這里我們用向上計數的方式,即TIMx_CNT中的計數值達到TIMx_ARR中的值時,產生中斷,TIMx_CNT又從0開始計。

        按以下步驟編程:
        1.系統初始化,主要初始化時鐘等。

        2.GPIO初始化,用于LED,有了燈就便于觀察了。

        3.TIM3的配置。

        4.NVIC的配置。

        5.編寫中斷服務函數。

        void GPIO_PA_Init(){//PA8管腳配置GPIO_InitTypeDef GPIO_InitStructure;GPIO_DeInit(GPIOA);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽輸出RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//使能端口時鐘AGPIO_Init(GPIOA,&GPIO_InitStructure);}void TIMER3_Init(){TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;TIM_DeInit(TIM3);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);TIM_TimeBaseStructure.TIM_Period=10000;//ARR的值TIM_TimeBaseStructure.TIM_Prescaler=7200-1;TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上計數模式TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);TIM_Cmd(TIM3, ENABLE); //開啟時鐘}void NVIC_Configuration(){  NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);  // 搶占式優先級別 NVIC_InitStructure.NVIC_IRQChannel =TIM3_IRQChannel;//指定中斷源NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;// 指定響應優先級別1NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;NVIC_Init(&NVIC_InitStructure);}int main(void){     Stm32_Clock_Init(9); //系統時鐘設置delay_init(72);     //延時初始化GPIO_PA_Init();TIMER3_Init();NVIC_Configuration();while(1); }void TIM3_IRQHandler(){if(TIM_GetITStatus(TIM3 , TIM_IT_Update) ==SET){TIM_ClearITPendingBit(TIM3 ,TIM_FLAG_Update);if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_8))GPIO_ResetBits(GPIOA, GPIO_Pin_8);else GPIO_SetBits(GPIOA,GPIO_Pin_8);}}


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 报价| 泽州县| 建水县| 中宁县| 会理县| 化州市| 甘孜| 新丰县| 深泽县| 临清市| 兰州市| 讷河市| 屯昌县| 竹溪县| 罗定市| 运城市| 通辽市| 襄汾县| 湘西| 九龙城区| 珲春市| 普陀区| 温泉县| 类乌齐县| 合江县| 平江县| 方正县| 大埔区| 肇庆市| 枞阳县| 芒康县| 赣州市| 简阳市| 呼伦贝尔市| 合肥市| 江津市| 敦煌市| 五原县| 商河县| 长寿区| 米脂县|