移動(dòng)網(wǎng)站建站視頻網(wǎng)絡(luò)推廣的基本方法有哪些
目錄
背景
程序
第一步、使能PCLK1外設(shè)時(shí)鐘?編輯
第二步、時(shí)基單元配置
第三步、配置NVIC(設(shè)置定時(shí)中斷優(yōu)先級(jí))?編輯
第四步、使能溢出中斷
第五步、使能定時(shí)器
第六步、填寫中斷處理函數(shù)(ISR)
背景
在單片機(jī)開發(fā)當(dāng)中,我們可以經(jīng)??吹蕉ㄖ芷诤瘮?shù)。這些定周期函數(shù)都是通過定時(shí)器最基本定時(shí)中斷功能。如果學(xué)習(xí)前面的PWM。會(huì)更快的了解相關(guān)概念。
時(shí)基單元
可編程通用定時(shí)器的主要部分是一個(gè) 16 位計(jì)數(shù)器和與其相關(guān)的自動(dòng)裝載寄存器。這個(gè)計(jì)數(shù)器可
以向上計(jì)數(shù)、向下計(jì)數(shù)或者向上向下雙向計(jì)數(shù)。此計(jì)數(shù)器時(shí)鐘由預(yù)分頻器分頻得到。
計(jì)數(shù)器、自動(dòng)裝載寄存器和預(yù)分頻器寄存器可以由軟件讀寫,在計(jì)數(shù)器運(yùn)行時(shí)仍可以讀寫。
時(shí)基單元包含:
● 計(jì)數(shù)器寄存器 (TIMx_CNT)
● 預(yù)分頻器寄存器 (TIMx_PSC)
● 自動(dòng)裝載寄存器 (TIMx_ARR)
自動(dòng)裝載寄存器是預(yù)先裝載的,寫或讀自動(dòng)重裝載寄存器將訪問預(yù)裝載寄存器。根據(jù)在
TIMx_CR1 寄存器中的自動(dòng)裝載預(yù)裝載使能位 (ARPE) 的設(shè)置,預(yù)裝載寄存器的內(nèi)容被立即或在
每次的更新事件 UEV 時(shí)傳送到影子寄存器。當(dāng)計(jì)數(shù)器達(dá)到溢出條件 ( 向下計(jì)數(shù)時(shí)的下溢條件 ) 并當(dāng)
TIMx_CR1 寄存器中的 UDIS 位等于 ’0’ 時(shí),產(chǎn)生更新事件。更新事件也可以由軟件產(chǎn)生。隨后會(huì)
詳細(xì)描述每一種配置下更新事件的產(chǎn)生。
程序
//定時(shí)器時(shí)間計(jì)算公式Tout = ((重裝載值+1)*(預(yù)分頻系數(shù)+1))/時(shí)鐘頻率;
//例如:1秒定時(shí),重裝載值=9999,預(yù)分頻系數(shù)=7199void TIM3_Init(u16 arr,u16 psc){ //TIM3 初始化 arr重裝載值 psc預(yù)分頻系數(shù)TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStrue;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能TIM3TIM_TimeBaseInitStrue.TIM_Period=arr; //設(shè)置自動(dòng)重裝載值TIM_TimeBaseInitStrue.TIM_Prescaler=psc; //預(yù)分頻系數(shù)TIM_TimeBaseInitStrue.TIM_CounterMode=TIM_CounterMode_Up; //計(jì)數(shù)器向上溢出TIM_TimeBaseInitStrue.TIM_ClockDivision=TIM_CKD_DIV1; //時(shí)鐘的分頻因子,起到了一點(diǎn)點(diǎn)的延時(shí)作用,一般設(shè)為TIM_CKD_DIV1TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStrue); //TIM3初始化設(shè)置TIM3_NVIC_Init (); //開啟TIM3中斷向量TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);//使能TIM3中斷 TIM_Cmd(TIM3,ENABLE); //使能TIM3
}void TIM3_NVIC_Init (void){ //開啟TIM3中斷向量NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x3; //設(shè)置搶占和子優(yōu)先級(jí)NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x3;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}
第一步、使能PCLK1外設(shè)時(shí)鐘
第二步、時(shí)基單元配置
輸入到計(jì)數(shù)器的時(shí)鐘為? ? ? 72 000 000 /(7199 +1) = 1 000HZ
計(jì)數(shù)器溢出時(shí)長生Update中斷頻率: 10000HZ /(9999+1) =1HZ
為何+1有在PWM中介紹。
第三步、配置NVIC(設(shè)置定時(shí)中斷優(yōu)先級(jí))

第四步、使能溢出中斷
計(jì)數(shù)器溢出的中斷就是update中斷
第五步、使能定時(shí)器
第六步、填寫中斷處理函數(shù)(ISR)
void TIM3_IRQHandler(void){ //TIM3中斷處理函數(shù)if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET){ //判斷是否是TIM3中斷TIM_ClearITPendingBit(TIM3, TIM_IT_Update);//此處寫入用戶自己的處理程序GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED1))); //取反LED1}
}