STM32学习笔记---外部中断(EXTI8) |
回复数:6,点击数:311 |
【楼主位】 weif40423p 积分:45 派别: 等级:------ 来自:
|
在使用EXTI的时候,因为没有开启时钟没有开启RCC_APB2Periph_AFIO时钟,让我调试吃了不少苦头,看来还要好好看看stm32的时钟啊 现在给出我的exti8的配置
首先一定要记得配置
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // 使能AFIO时钟 GPIOB8作为中断脚,配置为浮空输入 void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Configure PB8 as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB,&GPIO_InitStructure); } 继续配置NVIC /** * @brief Configures NVIC and Vector Table base location. * @param None * @retval : None */ void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /* Configure the NVIC Preemption Priority Bits*/ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); /* Set the Vector Table base location at 0x08000000 */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); } 然后配置EXTI ,把PB8连接到EXTI /******************************************************************************* * Function Name : EXTI_Configuration * Description : * Input : None * Output : None * Return : None *******************************************************************************/ void EXTI_Configuration(void) { EXTI_InitTypeDef EXTI_InitStructure; /*connect PB8 to EXTI*/ GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource8); /*Config EXTI8*/ EXTI_InitStructure.EXTI_Line = EXTI_Line8; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); //EXTI_GenerateSWInterrupt(EXTI_Line8); } 这样就可以中断了, 在中断函数里面记得清除标志位 /** * @brief This function handles EXTI9_5 global interrupt request. * @param None * @retval : None */ void EXTI9_5_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line8)!= RESET) { EXTI_ClearITPendingBit(EXTI_Line8); } }
|
|
2010-03-16,17:44:17 |
|
【1楼】 FPGARM 积分:89 派别: 等级:------ 来自:广州
|
太巧了,今天晚上我就打算搞介个,谢谢LZ! |
|
2010-03-16,18:15:29 |
|
【2楼】 linfeng286 积分:1086 派别: 等级:------ 来自:
|
mark 一会试试 |
|
2010-03-16,18:51:59 |
|
【3楼】 Grant 积分:2116 派别: 等级:------ 来自:
|
STM32也还,STM8也好,都是以时钟为驱动的,记得使用STM32的任何外设都要先操作RCC。
STM8默认外设时钟都是打开的,要省电就要记得关外设时钟。 |
|
2010-03-16,20:51:11 |
|
【4楼】 ddljdd 积分:35 派别: 等级:------ 来自:
|
不错,~~~ |
|
2010-03-17,11:30:15 |
|
【5楼】 rube 永丰庵 积分:1561 派别: 等级:------ 来自:深圳
|
我试过了,这个很好用。 谢谢楼主 |
|
2010-05-25,15:20:58 |
|
|