新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32通用定時器(TIM2-5)基本用法

        STM32通用定時器(TIM2-5)基本用法

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

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


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

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

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

        3.TIM3的配置。

        4.NVIC的配置。

        5.編寫中斷服務函數(shù)。

        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);//使能端口時鐘A
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        }

        void TIMER3_Init()
        {
        TIM_TimeBaseInitTypeDef TIM_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; //向上計數(shù)模
        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);// 搶占式優(yōu)先級別
        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel;//指定中斷源
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;// 指定響應優(yōu)先級別1
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        }

        int main(void)
        {
        Stm32_Clock_Init(9); //系統(tǒng)時鐘設置
        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);
        }
        }



        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 滨海县| 黄大仙区| 沅江市| 密山市| 延长县| 南部县| 类乌齐县| 盐亭县| 武宁县| 余庆县| 托里县| 嘉黎县| 宜宾县| 阳西县| 平江县| 黄冈市| 泰兴市| 社会| 沁水县| 湾仔区| 色达县| 石景山区| 永福县| 灌南县| 区。| 金寨县| 高淳县| 黄山市| 安新县| 金川县| 赤城县| 方城县| 南充市| 九龙城区| 盖州市| 松溪县| 黄梅县| 平乐县| 丹寨县| 从江县| 桂林市|