[STM32F1] Stm32定时器中断使LED灯闪烁

[复制链接]
1758|8
 楼主| wahahaheihei 发表于 2016-10-10 12:58 | 显示全部楼层 |阅读模式

知识点:

Stm32共有11个定时器:

1.两个高级定时器:TIM1、TIM8-------------------------APB2

2.四个通用定时器:TIM2~TIM5-------------------------APB1

3.两个基本定时器:TIM6、TIM7-------------------------APB1

4.两个看门狗

5.一个系统嘀嗒定时器(SysTick)


 楼主| wahahaheihei 发表于 2016-10-10 12:59 | 显示全部楼层
  1. /*
  2. *说明:
  3. *PA0:KEY1;PA1:KEY2;
  4. *PA2:LED1;PA3:LED2;
  5. *PA9:USART1_TX;PA10:USART1_RX
  6. */
  7. #include "stm32f10x.h"
  8. #include "stm32f10x_rcc.h"
  9. #include "stm32f10x_gpio.h"
  10. #include "stm32f10x_tim.h"
  11. #include "stm32f10x_exti.h"
  12. #include "system_stm32f10x.h"
  13. #include "misc.h"

  14. void RCC_Configuration(void);
  15. void GPIO_Configuration(void);
  16. void TIM3_Configuration(void);
  17. void NVIC_Configuration(void);

  18. int main()
  19. {
  20.     SystemInit();
  21.    
  22.     RCC_Configuration();
  23.     GPIO_Configuration();
  24.     TIM3_Configuration();
  25.     NVIC_Configuration();
  26.                                                             
  27.     while(1);
  28. }

  29. void RCC_Configuration(void)  
  30. {   
  31.   ////USART2和USART3都在在APB1上而USART1是在APB2上的
  32.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);   
  33.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);   
  34. }

  35. void GPIO_Configuration(void)  
  36. {  
  37.   GPIO_InitTypeDef GPIO_InitStructure;  
  38.   
  39.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3;  
  40.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  41.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  42.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  43. }

  44. void TIM3_Configuration(void)  
  45. {
  46.   TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  47.   
  48.   TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
  49.   
  50.   TIM_TimeBaseStructure.TIM_Period = 2000;//频率:72MHz  72000000/36000=2000
  51.   TIM_TimeBaseStructure.TIM_Prescaler = 35999;//36000-1=35999
  52.   TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
  53.   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  54.   TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
  55.   
  56.   TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE );
  57.   TIM_Cmd(TIM3,ENABLE);
  58. }

  59. void NVIC_Configuration(void)//配置中断优先级  
  60. {  
  61.   NVIC_InitTypeDef NVIC_InitStructure;  
  62.    
  63.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);  
  64.    
  65.   NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  
  66.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  
  67.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  
  68.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
  69.   NVIC_Init(&NVIC_InitStructure);  
  70. }  


 楼主| wahahaheihei 发表于 2016-10-10 13:00 | 显示全部楼层
中断函数stm32f10x_it.c
  1. #include "..\include\stm32f10x.h"
  2. #include "..\include\stm32f10x_it.h"
  3. #include "..\include\stm32f10x_gpio.h"
  4. #include "..\include\stm32f10x_tim.h"

  5. void TIM3_IRQHandler(void)
  6. {
  7.   TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
  8.   
  9.   if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==Bit_RESET)
  10.   {
  11.     GPIO_SetBits(GPIOA,GPIO_Pin_2);
  12.   }else{
  13.     GPIO_ResetBits(GPIOA,GPIO_Pin_2);
  14.   }
  15. }


 楼主| wahahaheihei 发表于 2016-10-10 13:01 | 显示全部楼层
中断函数声明头文件stm32f10x_it.h:
  1. #ifndef __STM32F10x_IT_H
  2. #define __STM32F10x_IT_H

  3. /* Includes ------------------------------------------------------------------*/
  4. /* Exported types ------------------------------------------------------------*/
  5. /* Exported constants --------------------------------------------------------*/
  6. /* Exported macro ------------------------------------------------------------*/
  7. /* Exported functions ------------------------------------------------------- */  
  8. void NMIException(void);
  9. void HardFaultException(void);
  10. void MemManageException(void);
  11. void BusFaultException(void);
  12. void UsageFaultException(void);
  13. void DebugMonitor(void);
  14. void SVCHandler(void);
  15. void PendSVC(void);
  16. void SysTickHandler(void);
  17. void WWDG_IRQHandler(void);
  18. void PVD_IRQHandler(void);
  19. void TAMPER_IRQHandler(void);
  20. void RTC_IRQHandler(void);
  21. void FLASH_IRQHandler(void);
  22. void RCC_IRQHandler(void);
  23. void EXTI0_IRQHandler(void);
  24. void EXTI1_IRQHandler(void);
  25. void EXTI2_IRQHandler(void);
  26. void EXTI3_IRQHandler(void);
  27. void EXTI4_IRQHandler(void);
  28. void DMA1_Channel1_IRQHandler(void);
  29. void DMA1_Channel2_IRQHandler(void);
  30. void DMA1_Channel3_IRQHandler(void);
  31. void DMA1_Channel4_IRQHandler(void);
  32. void DMA1_Channel5_IRQHandler(void);
  33. void DMA1_Channel6_IRQHandler(void);
  34. void DMA1_Channel7_IRQHandler(void);
  35. void ADC1_2_IRQHandler(void);
  36. void USB_HP_CAN_TX_IRQHandler(void);
  37. void USB_LP_CAN_RX0_IRQHandler(void);
  38. void CAN_RX1_IRQHandler(void);
  39. void CAN_SCE_IRQHandler(void);
  40. void EXTI9_5_IRQHandler(void);
  41. void TIM1_BRK_IRQHandler(void);
  42. void TIM1_UP_IRQHandler(void);
  43. void TIM1_TRG_COM_IRQHandler(void);
  44. void TIM1_CC_IRQHandler(void);
  45. void TIM2_IRQHandler(void);
  46. void TIM3_IRQHandler(void);
  47. void TIM4_IRQHandler(void);
  48. void I2C1_EV_IRQHandler(void);
  49. void I2C1_ER_IRQHandler(void);
  50. void I2C2_EV_IRQHandler(void);
  51. void I2C2_ER_IRQHandler(void);
  52. void SPI1_IRQHandler(void);
  53. void SPI2_IRQHandler(void);
  54. void USART1_IRQHandler(void);
  55. void USART2_IRQHandler(void);
  56. void USART3_IRQHandler(void);
  57. void EXTI15_10_IRQHandler(void);
  58. void RTCAlarm_IRQHandler(void);
  59. void USBWakeUp_IRQHandler(void);
  60. void TIM8_BRK_IRQHandler(void);
  61. void TIM8_UP_IRQHandler(void);
  62. void TIM8_TRG_COM_IRQHandler(void);
  63. void TIM8_CC_IRQHandler(void);
  64. void ADC3_IRQHandler(void);
  65. void FSMC_IRQHandler(void);
  66. void SDIO_IRQHandler(void);
  67. void TIM5_IRQHandler(void);
  68. void SPI3_IRQHandler(void);
  69. void UART4_IRQHandler(void);
  70. void UART5_IRQHandler(void);
  71. void TIM6_IRQHandler(void);
  72. void TIM7_IRQHandler(void);
  73. void DMA2_Channel1_IRQHandler(void);
  74. void DMA2_Channel2_IRQHandler(void);
  75. void DMA2_Channel3_IRQHandler(void);
  76. void DMA2_Channel4_5_IRQHandler(void);
  77.                                          
  78. #endif /* __STM32F10x_IT_H */

  79. /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/


mmuuss586 发表于 2016-10-10 19:27 | 显示全部楼层

谢谢分享;
cowboy2014 发表于 2016-10-10 19:45 | 显示全部楼层

定时器还是很有必要学学的
dongnanxibei 发表于 2016-10-10 20:48 | 显示全部楼层
定时器还是很有必要学学的
 楼主| wahahaheihei 发表于 2016-10-11 14:18 | 显示全部楼层
定时器是单片机的基础时钟模块,在系统设计中好多要基于时间概念的东西。
Brand2 发表于 2016-10-13 22:03 | 显示全部楼层
这几个定时器的优先级是什么
您需要登录后才可以回帖 登录 | 注册

本版积分规则

234

主题

3227

帖子

12

粉丝
快速回复 在线客服 返回列表 返回顶部