通過TIM2定時器中斷控制LED流水燈的閃爍時間,并且增加兩個按鍵PA1、PA2,其中PA1控制LED流水燈的啟動,8個燈先依次閃爍,時間間隔1s,然后8個燈同時閃爍且時間間隔1s,PA2控制停止,使定時器不工作,將燈保持現(xiàn)在狀態(tài),過程非常簡單,只需幾分鐘搞懂。
電路原理圖如下:
LEDandButtonandInterrupt1.png (15.99 MB, 下載次數(shù): 23)
下載附件
2022-6-25 10:42 上傳
圖片1.png (534.01 KB, 下載次數(shù): 17)
下載附件
2022-6-25 10:43 上傳
單片機源程序如下:
- #include "stm32f10x.h"
- GPIO_InitTypeDef GPIO_InitStructure;
- EXTI_InitTypeDef EXTI_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- void TIM2_Config(void);//定時器TIM2配置函數(shù)
- void EXTI1_EXTI2_Config(void);//按鍵PA1、PA2中斷配置函數(shù)
- int main(void)
- {
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1|GPIO_Pin_2| GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- TIM2_Config();
- EXTI1_EXTI2_Config();
- GPIOC->ODR=0x00ff;
- while (1)
- {
- }
- }
- void TIM2_Config(void)
- {
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);//proteus中的bug,用其他定時器,必須先使能TIM1。
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
-
- TIM_TimeBaseStructure.TIM_Period = 1000;//基準為0.1ms,所以設(shè)置10000,剛好0.1ms乘以10000為1s。
- TIM_TimeBaseStructure.TIM_Prescaler = 799;//我們設(shè)置的proteus中系統(tǒng)時鐘為8M,所以這里設(shè)置799,我們時間間隔為1s。
- TIM_TimeBaseStructure.TIM_ClockDivision = 0;
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
- // TIM_Cmd(TIM2, ENABLE);不是使能TIM2,因為用中斷,所以在PA1、PA2中斷函數(shù)中分別使能和不使能。
-
- TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);//定時器中斷使能。
- NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- }
- void EXTI1_EXTI2_Config(void)
- {
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1);
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource2);
-
- EXTI_InitStructure.EXTI_Line = EXTI_Line1|EXTI_Line2;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure);
-
- NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-
- NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- }
復制代碼
所有資料51hei附件下載:
Keil代碼工程.7z
(3.64 MB, 下載次數(shù): 20)
2022-6-25 15:24 上傳
點擊文件名下載附件
|