在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > STM32學(xué)習(xí)記錄7:定時器中斷

            STM32學(xué)習(xí)記錄7:定時器中斷

            作者: 時間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
            配置流程:
            1:系統(tǒng)時鐘初始化,包括系統(tǒng)時鐘和要開放的IO口或者功能的時鐘配置。
            2:IO口初始化,包括引腳,速率,輸入輸出模式等。
            3:NVIC 中斷向量配置 ,中斷向量基地址和優(yōu)先級的配置。
            4:TIM3初始化:包括自動重裝值,分頻值,計數(shù)模式,使能TIM中斷,使能TIM3外設(shè)
            5:中斷處理函數(shù):注意清除TIMx的中斷待處理位
            注意:
            1:RCC初始化要使能或者失能 APB1 外設(shè)時鐘。
            2:中斷處理函數(shù):注意清除TIMx的中斷待處理位TIMx_SR寄存器
            3:關(guān)于時鐘:初始化RCC時使用SystemInit()函數(shù)時默認(rèn)的是AHB不分頻,即HCLK等于SYSHCLK,APB2不分頻,APB1為HCLK 2分頻而定時器3時鐘使能在RCC_APB1ENR寄存器中定義,因此TIM3時鐘為36M

            在宏定義中設(shè)置為72MHz時:在system_stm32f10x.c中有以下定義:
            static void SetSysClockTo72(void)
            {
            __IO uint32_t StartUpCounter = 0, HSEStatus = 0;

            /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/
            /* Enable HSE */
            RCC->CR |= ((uint32_t)RCC_CR_HSEON);

            /* Wait till HSE is ready and if Time out is reached exit */
            do
            {
            HSEStatus = RCC->CR & RCC_CR_HSERDY;
            StartUpCounter++;
            } while((HSEStatus == 0) && (StartUpCounter != HSEStartUp_TimeOut));

            if ((RCC->CR & RCC_CR_HSERDY) != RESET)
            {
            HSEStatus = (uint32_t)0x01;
            }
            else
            {
            HSEStatus = (uint32_t)0x00;
            }

            if (HSEStatus == (uint32_t)0x01)
            {
            /* Enable Prefetch Buffer */
            FLASH->ACR |= FLASH_ACR_PRFTBE;

            /* Flash 2 wait state */
            FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
            FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;


            /* HCLK = SYSCLK */
            RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;///*!< SYSCLK not divided */HCLK = SYSCLK

            /* PCLK2 = HCLK */
            RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;// /*!< HCLK not divided */APB2為HCLK不分頻

            /* PCLK1 = HCLK */
            RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;///*!< HCLK divided by 2 */APB1為HCLK 2分頻


            原程序為:
            #include"stm32f10x.h"
            #include"stm32f10x_tim.h"

            #define LED0_OFF GPIO_SetBits(GPIOA,GPIO_Pin_8)// LED0關(guān)
            #define LED0_ON GPIO_ResetBits(GPIOA,GPIO_Pin_8)//LED0開

            u16 i=0;


            //初始化IO端口
            void IO_Configuart(void)
            {
            GPIO_InitTypeDef GPIO_InitStructure;//定義 GPIO_InitStructure為 GPIO_InitTypeDef結(jié)構(gòu)體類型
            //LED0
            GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//引腳選擇
            GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz速率
            GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽輸出
            GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化

            }

            //復(fù)位和系統(tǒng)時鐘控制
            void RCC_Configuare(void)
            {
            SystemInit();//頻率設(shè)定有system_stm32f10x.c文件中的宏定義 開放某個宏 當(dāng)調(diào)用SystemInit()時即可設(shè)置好頻率
            RCC_ClockSecuritySystemCmd(ENABLE);//使能或者失能時鐘安全系統(tǒng)

            //使能GPIOA,GPIOD端口時鐘
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
            RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//使能或者失能 APB1 外設(shè)時鐘
            // RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);//允許總線CLOCK,在使用GPIO之前必須允許相應(yīng)的端口時鐘
            /* 也可以寫為RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD,ENABLE); 更加簡潔*/
            }

            //NVIC設(shè)置 系統(tǒng)中斷管理
            void NVIC_Configuare(void)
            {
            NVIC_InitTypeDef NVIC_InitStructure;
            NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);//設(shè)定中斷向量表基址0x08000000
            NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);// 先占優(yōu)先級0位 從優(yōu)先級4位

            //使能TIM3中斷
            NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;//TIM3中斷
            NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x0F; //先占優(yōu)先級0位,從優(yōu)先級4位
            NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x0F; //
            NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
            NVIC_Init(&NVIC_InitStructure);
            }
            //初始化TIM3 1ms 定時
            void TIM3_Configuare(void)
            {
            TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
            //TOUT=ARR*(PSC+1)/Tclk ARR=10 PSC=3599 Tclk=36M TOUT=0.001s=1ms
            TIM_TimeBaseStructure.TIM_Period = 10; //設(shè)置在下一個更新事件裝入活動的自動重裝載寄存器周期的值 計數(shù)到10為1ms
            TIM_TimeBaseStructure.TIM_Prescaler =(7200-1); //設(shè)置用來作為TIMx時鐘頻率除數(shù)的預(yù)分頻值
            TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設(shè)置時鐘分割:TDTS = Tck_tim
            TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數(shù)模式
            TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時間基數(shù)單位

            TIM_ITConfig(TIM3,TIM_IT_Update|TIM_IT_Trigger,ENABLE); //使能或者失能指定的 TIM 中斷
            TIM_Cmd(TIM3, ENABLE); //使能TIMx外設(shè)

            }

            int main (void)
            {

            RCC_Configuare();
            IO_Configuart();
            NVIC_Configuare();
            TIM3_Configuare();
            LED0_OFF;
            while(1)
            {

            }

            }

            //TIM3中斷處理函數(shù)
            void TIM3_IRQHandler(void)
            {
            if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET) //檢查指定的 TIM 中斷發(fā)生與否
            {
            TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx的中斷待處理位:TIM 中斷源
            i++;
            if(i==1000)
            {
            LED0_ON;

            }
            if(i==2000)
            {
            LED0_OFF;

            i=0;
            }
            }
            }


            評論


            技術(shù)專區(qū)

            關(guān)閉