免費(fèi)畫(huà)圖網(wǎng)站東莞seo網(wǎng)絡(luò)推廣專(zhuān)
1.STM32的通用定時(shí)器是可編程預(yù)分頻驅(qū)動(dòng)的16位自動(dòng)裝載計(jì)數(shù)器。
STM32 的通用定時(shí)器可以被用于:測(cè)量輸入信號(hào)的脈沖長(zhǎng)度 ( 輸入捕獲 ) 或者產(chǎn)生輸出波
形 ( 輸出比較和 PWM) 等。
使用定時(shí)器預(yù)分頻器和 RCC 時(shí)鐘控制器預(yù)分頻器,脈沖長(zhǎng)度和波形
周期可以在幾個(gè)微秒到幾個(gè)毫秒間調(diào)整。 STM32 的每個(gè)通用定時(shí)器都是完全獨(dú)立的,沒(méi)有互相
共享的任何資源。
2.相關(guān)寄存器:
(1)控制寄存器TIMx_CR1:本次實(shí)驗(yàn)中只使用到了最低位,即計(jì)數(shù)器使能位。

(2) DMA/ 中斷使能寄存器( TIMx_DIER ):本次實(shí)驗(yàn)中只使用到了最低位,允許更新中斷。
?(3)預(yù)分頻寄存器(TIMx_PSC):該寄存器用來(lái)設(shè)置對(duì)時(shí)鐘的分頻。
?(4)自動(dòng)重裝載寄存器(TIMx_ARR):
(5) 狀態(tài)寄存器(TIMx_SR):
3.設(shè)計(jì)思路:通過(guò)設(shè)置設(shè)置通用定時(shí)器的中斷,并在定時(shí)器中斷服務(wù)函數(shù)中反轉(zhuǎn)LED燈。首先,使能定時(shí)器的時(shí)鐘。然后,配置定時(shí)器的相關(guān)信息 和中斷管理的相關(guān)信息。最后,編寫(xiě)定時(shí)器中斷的中斷服務(wù)函數(shù)。
4.代碼:
(1)LED:
#ifndef __LED_H
#define __LED_H#include "stm32f10x.h"void LED_Init(void);#endif
#include "led.h"void LED_Init(void)
{//?¨ò????úμ??á11ì?:GPIO_InitTypeDef GPIO_InitStruct;//1.ê1?üê±?ó£oRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOA,ENABLE);//2.???????ú?á11ì?μ??à1?D??¢£o£¨LED1£?GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOD,&GPIO_InitStruct);//????LED0£oGPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;GPIO_Init(GPIOA,&GPIO_InitStruct);//3?ê?ê±??LEDμ????ú?????a1£??′?¨?eGPIO_SetBits(GPIOA,GPIO_Pin_8);GPIO_SetBits(GPIOD,GPIO_Pin_2);
}
(2)TIME:
#ifndef __TIME_H
#define __TIME_H#include "stm32f10x.h"void TIME_Init(u16 arr,u16 psc);#endif
#include "time.h"void TIME_Init(u16 arr,u16 psc)
{//?¨ò??¨ê±?÷oí?D???á11ì?£oTIM_TimeBaseInitTypeDef TIM_TimBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;//1.ê1?ü?¨ê±?÷ê±?ó;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//2.3?ê??ˉtime3£oTIM_TimBaseStructure.TIM_Period = arr; //éè??×??ˉ??×°????′??÷μ??μTIM_TimBaseStructure.TIM_Prescaler = psc;TIM_TimBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimBaseStructure.TIM_CounterMode = TIM_CounterMode_Down;TIM_TimeBaseInit(TIM3,&TIM_TimBaseStructure);TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //?êDí?üD??D??//3.?D??????£oNVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_InitStructure);//4.ê1?ü?¨ê±?÷£oTIM_Cmd(TIM3,ENABLE);
}
//??D′time3μ??D??·t??oˉêy£o
void TIM3_IRQHandler(void)
{static int i = 0;//?ì2éê?·?·¢éú?D??£oif(TIM_GetITStatus(TIM3,TIM_IT_Update) != RESET){//??3ytimeμ??üD??D??±ê????TIM_ClearITPendingBit(TIM3,TIM_IT_Update);if(i){GPIO_SetBits(GPIOA,GPIO_Pin_8);i = !i;}else{GPIO_ResetBits(GPIOA,GPIO_Pin_8);i = !i;}}
}
(3)main:
#include "stm32f10x.h"
#include "delay.h"
#include "led.h"
#include "time.h"int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);LED_Init();TIME_Init(4999,7199);while(1){delay_ms(1000);}}
5.運(yùn)行結(jié)果:
?
?6.總結(jié):本次實(shí)驗(yàn)是通過(guò)STM32的通用定時(shí)器反轉(zhuǎn)LED燈。在實(shí)驗(yàn)庫(kù)函數(shù)編程的時(shí)候,是比較方便的。但是,為了打好基礎(chǔ),應(yīng)該去大概的了解一下相關(guān)寄存器的功能。