小白求助,謝謝大家
- #include "stdio.h"
- #include "stm32f10x.h"
- #include "stm32f10x_gpio.h"
- #include "sys.h"
- #include "misc.h"
- uint32_t i;
- void delay_ms(uint32_t ms)
- {
- uint32_t i_cnt,j_cnt;
- for(i_cnt=0;i_cnt<3000;i_cnt++);
- for(j_cnt=0;j_cnt<ms;j_cnt++);
-
- }
-
- void led_cfg( )
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- 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);
-
- GPIOC->BSRR=0xff;
- }
- void key_cfg( )
- {
-
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, 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_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIOC->BSRR=0xff;
-
- }
- void EXTI_cfg( )
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- EXTI_InitTypeDef EXTI_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
- GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //選擇中斷分組2
-
-
-
- NVIC_InitStructure.NVIC_IRQChannel= EXTI0_IRQn; //選擇中斷通道
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //搶占式中斷優先級設置為0
- NVIC_InitStructure.NVIC_IRQChannelSubPriority= 0x02; //響應式中斷優先級設置為0
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能中斷
- NVIC_Init(&NVIC_InitStructure);
-
-
- NVIC_InitStructure.NVIC_IRQChannel= EXTI1_IRQn; //選擇中斷通道
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //搶占式中斷優先級設置
- NVIC_InitStructure.NVIC_IRQChannelSubPriority= 0x02; //響應式中斷優先級設置
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能中斷
- NVIC_Init(&NVIC_InitStructure);
-
-
-
- NVIC_InitStructure.NVIC_IRQChannel= EXTI2_IRQn; //選擇中斷通道
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //搶占式中斷優先級設置
- NVIC_InitStructure.NVIC_IRQChannelSubPriority= 0x02; //響應式中斷優先級設置
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能中斷
- NVIC_Init(&NVIC_InitStructure);
-
-
- NVIC_InitStructure.NVIC_IRQChannel= EXTI3_IRQn; //選擇中斷通道
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //搶占式中斷優先級設置
- NVIC_InitStructure.NVIC_IRQChannelSubPriority= 0x02; //響應式中斷優先級設置
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能中斷
- NVIC_Init(&NVIC_InitStructure);
-
-
- NVIC_InitStructure.NVIC_IRQChannel=EXTI4_IRQn; //選擇中斷通道
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //搶占式中斷優先級設置
- NVIC_InitStructure.NVIC_IRQChannelSubPriority= 0x02; //響應式中斷優先級設置為
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能中斷
- NVIC_Init(&NVIC_InitStructure);
-
-
- NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01; //搶占式中斷優先級設置
- NVIC_InitStructure.NVIC_IRQChannelSubPriority= 0; //響應式中斷優先級設置
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能中斷
- NVIC_Init(&NVIC_InitStructure);
- EXTI_InitStructure.EXTI_Line=EXTI_Line0;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure);
-
-
-
- }
- int main(void)
- {
- delay_ms (1);
- led_cfg( );
- key_cfg( ) ;
- EXTI_cfg( );
-
- GPIO_ResetBits(GPIOC,GPIO_Pin_2);
- while (1)//測試程序是否運行
- {
- delay_ms (100);
- GPIO_ResetBits(GPIOC,GPIO_Pin_2);
- delay_ms (100);
- GPIO_SetBits(GPIOC,GPIO_Pin_2);
- }
- }
- void EXTI0_IRQHandler(void)
- {
-
-
- GPIO_ResetBits(GPIOC,GPIO_Pin_1);
- EXTI_ClearITPendingBit(EXTI_Line2); //清除 LINE 上的中斷標志位
- }
-
-
-
復制代碼
|