网站导航: 首页 > 设计参考 > 正文 文章搜索
STM32学习笔记之 外部中断
 
文章编号:
100808161255
文章分类: 单片机 STM8/STM32
点 击:
...
关 键 词: 外部中断
文章来源:
http://www.stmcu.org
摘 要:
实现功能:通过按按键PB的selection按钮即PB0脚,按一次LD2点亮再按一次熄灭,用外中断方式实现读按键

注:本程序基于三合一开发板

实现功能:通过按按键PB的selection按钮即PB0脚,按一次LD2点亮再按一次熄灭,用外中断方式实现读按键。

完整程序如下:EXTI.rar

 
  1. /* Includes ------------------------------------------------------------------*/  
  2. #include "stm32f10x_lib.h"   
  3. #include "platform_config.h"   
  4.   
  5. /* Private typedef -----------------------------------------------------------*/  
  6. /* Private define ------------------------------------------------------------*/  
  7. /* Private macro -------------------------------------------------------------*/  
  8. /* Private variables ---------------------------------------------------------*/  
  9. EXTI_InitTypeDef EXTI_InitStructure;   
  10. ErrorStatus HSEStartUpStatus;   
  11.   
  12. /* Private function prototypes -----------------------------------------------*/  
  13. void RCC_Configuration(void);   
  14. void GPIO_Configuration(void);   
  15. void NVIC_Configuration(void);   
  16.   
  17. /* Private functions ---------------------------------------------------------*/  
  18. /*******************************************************************************  
  19. * Function Name  : main  
  20. * Description    : Main program.  
  21. * Input          : None  
  22. * Output         : None  
  23. * Return         : None  
  24. *******************************************************************************/  
  25. int main(void)   
  26. {   
  27. #ifdef DEBUG   
  28.   debug();   
  29. #endif   
  30.     
  31.   /* System Clocks Configuration */  
  32.   RCC_Configuration();   
  33.          
  34.   /* NVIC configuration */  
  35.   NVIC_Configuration();   
  36.       
  37.   /* Configure the GPIO ports */  
  38.   GPIO_Configuration();             //配置IO口   
  39.      
  40.   /* Connect Key Button EXTI Line to Key Button GPIO Pin */  
  41.   GPIO_EXTILineConfig(GPIO_PORT_SOURCE_KEY_BUTTON, GPIO_PIN_SOURCE_KEY_BUTTON);//配置PB0外部中断口   
  42.   
  43.   /* Configure Key Button EXTI Line to generate an interrupt on falling edge */     
  44.   
  45. //外中断设置   
  46.   EXTI_InitStructure.EXTI_Line = EXTI_LINE_KEY_BUTTON;   
  47.   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;   
  48.   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;   
  49.   EXTI_InitStructure.EXTI_LineCmd = ENABLE;   
  50.   EXTI_Init(&EXTI_InitStructure);   
  51.   
  52.   /* Generate software interrupt: simulate a falling edge applied on Key Button EXTI line */  
  53.   EXTI_GenerateSWInterrupt(EXTI_LINE_KEY_BUTTON);   
  54.           
  55.   while (1)   
  56.   {   
  57.   }   
  58. }   
  59.   
  60. /*******************************************************************************  
  61. * Function Name  : RCC_Configuration  
  62. * Description    : Configures the different system clocks.  
  63. * Input          : None  
  64. * Output         : None  
  65. * Return         : None  
  66. *******************************************************************************/  
  67. void RCC_Configuration(void)   
  68. {   
  69.   /* RCC system reset(for debug purpose) */  
  70.   RCC_DeInit();   
  71.   
  72.   /* Enable HSE */  
  73.   RCC_HSEConfig(RCC_HSE_ON);   
  74.   
  75.   /* Wait till HSE is ready */  
  76.   HSEStartUpStatus = RCC_WaitForHSEStartUp();   
  77.   
  78.   if(HSEStartUpStatus == SUCCESS)   
  79.   {   
  80.     /* Enable Prefetch Buffer */  
  81.     FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);   
  82.   
  83.     /* Flash 2 wait state */  
  84.     FLASH_SetLatency(FLASH_Latency_2);   
  85.     
  86.     /* HCLK = SYSCLK */  
  87.     RCC_HCLKConfig(RCC_SYSCLK_Div1);   
  88.     
  89.     /* PCLK2 = HCLK */  
  90.     RCC_PCLK2Config(RCC_HCLK_Div1);   
  91.   
  92.     /* PCLK1 = HCLK/2 */  
  93.     RCC_PCLK1Config(RCC_HCLK_Div2);   
  94.   
  95.     /* PLLCLK = 8MHz * 9 = 72 MHz */  
  96.     RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);   
  97.   
  98.     /* Enable PLL */  
  99.     RCC_PLLCmd(ENABLE);   
  100.   
  101.     /* Wait till PLL is ready */  
  102.     while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)   
  103.     {   
  104.     }   
  105.   
  106.     /* Select PLL as system clock source */  
  107.     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);   
  108.   
  109.     /* Wait till PLL is used as system clock source */  
  110.     while(RCC_GetSYSCLKSource() != 0x08)   
  111.     {   
  112.     }   
  113.   }   
  114.      
  115.   /* Enable Key Button GPIO Port, GPIO_LED and AFIO clock */  
  116.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_KEY_BUTTON | RCC_APB2Periph_GPIO_LED   
  117.                          | RCC_APB2Periph_AFIO, ENABLE);   
  118. }   
  119.   
  120. /*******************************************************************************  
  121. * Function Name  : GPIO_Configuration  
  122. * Description    : Configures the different GPIO ports.  
  123. * Input          : None  
  124. * Output         : None  
  125. * Return         : None  
  126. *******************************************************************************/  
  127. void GPIO_Configuration(void)   
  128. {   
  129.   GPIO_InitTypeDef GPIO_InitStructure;   
  130.     
  131.   /* Configure GPIO Led pin 6 as Output push-pull */  
  132.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;   
  133.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
  134.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
  135.   GPIO_Init(GPIO_LED, &GPIO_InitStructure);   
  136.       
  137.   /* Configure Key Button GPIO Pin as input floating (Key Button EXTI Line) */  
  138.   GPIO_InitStructure.GPIO_Pin = GPIO_PIN_KEY_BUTTON;   
  139.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   
  140.   GPIO_Init(GPIO_KEY_BUTTON, &GPIO_InitStructure);   
  141. }   
  142.   
  143. /*******************************************************************************  
  144. * Function Name  : NVIC_Configuration  
  145. * Description    : Configure the nested vectored interrupt controller.  
  146. * Input          : None  
  147. * Output         : None  
  148. * Return         : None  
  149. *******************************************************************************/  
  150. void NVIC_Configuration(void)   
  151. {   
  152.   NVIC_InitTypeDef NVIC_InitStructure;   
  153.     
  154. #ifdef  VECT_TAB_RAM    
  155.   /* Set the Vector Table base location at 0x20000000 */  
  156.   NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);   
  157. #else  /* VECT_TAB_FLASH  */   
  158.   /* Set the Vector Table base location at 0x08000000 */  
  159.   NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);     
  160. #endif   
  161.   /* Configure one bit for preemption priority */  
  162.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);   
  163.                  
  164.   NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;//设置中断通道为exti0   
  165.   /* Enable the EXTI9_5 Interrupt */  
  166.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;   
  167.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;   
  168.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   
  169.   NVIC_Init(&NVIC_InitStructure);   
  170. }   
  171.   
  172. #ifdef  DEBUG   
  173. /*******************************************************************************  
  174. * Function Name  : assert_failed  
  175. * Description    : Reports the name of the source file and the source line number  
  176. *                  where the assert_param error has occurred.  
  177. * Input          : - file: pointer to the source file name  
  178. *                  - line: assert_param error line source number  
  179. * Output         : None  
  180. * Return         : None  
  181. *******************************************************************************/  
  182. void assert_failed(u8* file, u32 line)   
  183. {   
  184.   /* User can add his own implementation to report the file name and line number,  
  185.      ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */  
  186.   
  187.   /* Infinite loop */  
  188.   while (1)   
  189.   {   
  190.   }   
  191. }   
  192. #endif   
  193.   
  194. /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/  
  195.   

 

 
相关文章:

 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4