tim3.c 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. #include "main.h"
  2. u16 CCR1_Val = 10000;
  3. u16 CCR2_Val = 1000;
  4. u16 CCR3_Val = 100;
  5. u16 CCR4_Val = 10;
  6. void TIM2_Configuration(void)
  7. {
  8. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  9. TIM_OCInitTypeDef TIM_OCInitStructure;
  10. //TIM2 RCC
  11. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
  12. TIM_TimeBaseStructure.TIM_Prescaler = 71;//分频71,
  13. //72M/(719+1)/2=0.1MHz ,1uS中断溢出一次
  14. TIM_TimeBaseStructure.TIM_Period = 65535;//计数值10000
  15. //((1+TIM_Prescaler )/72M)*(1+TIM_Period)=((1+719)/72M)*(1+50000)=500ms*/
  16. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  17. TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
  18. //TIM_PrescalerConfig(TIM2,7199,TIM_PSCReloadMode_Immediate);
  19. TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
  20. TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  21. TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
  22. TIM_OC1Init(TIM2,&TIM_OCInitStructure);
  23. TIM_OCInitStructure.TIM_Pulse = CCR2_Val;
  24. TIM_OC2Init(TIM2,&TIM_OCInitStructure);
  25. TIM_OCInitStructure.TIM_Pulse = CCR3_Val;
  26. TIM_OC3Init(TIM2,&TIM_OCInitStructure);
  27. TIM_OCInitStructure.TIM_Pulse = CCR4_Val;
  28. TIM_OC4Init(TIM2,&TIM_OCInitStructure);
  29. TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Disable);
  30. TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Disable);
  31. TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Disable);
  32. TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Disable);
  33. TIM_ITConfig(TIM2,TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4,ENABLE);
  34. TIM_Cmd(TIM2,ENABLE);
  35. }
  36. void TIM2_NVIC_Configuration(void)
  37. {
  38. NVIC_InitTypeDef NVIC_InitStructure;
  39. #ifdef VECT_TAB_RAM
  40. NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);
  41. #else
  42. NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);
  43. #endif
  44. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  45. NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
  46. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  47. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  48. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  49. NVIC_Init(&NVIC_InitStructure);
  50. }
  51. void LED_GPIO_Configuration(void)
  52. {
  53. GPIO_InitTypeDef GPIO_InitStructure;
  54. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
  55. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
  56. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  57. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  58. GPIO_Init(GPIOA , &GPIO_InitStructure);
  59. }
  60. void RCC_Configuration(void)
  61. {
  62. /* 定义枚举类型变量 HSEStartUpStatus */
  63. ErrorStatus HSEStartUpStatus;
  64. /* 复位系统时钟设置*/
  65. RCC_DeInit();
  66. /* 开启HSE*/
  67. RCC_HSEConfig(RCC_HSE_ON);
  68. /* 等待HSE起振并稳定*/
  69. HSEStartUpStatus = RCC_WaitForHSEStartUp();
  70. /* 判断HSE起是否振成功,是则进入if()内部 */
  71. if(HSEStartUpStatus == SUCCESS)
  72. {
  73. /* 选择HCLK(AHB)时钟源为SYSCLK 1分频 */
  74. RCC_HCLKConfig(RCC_SYSCLK_Div1);
  75. /* 选择PCLK2时钟源为 HCLK(AHB) 1分频 */
  76. RCC_PCLK2Config(RCC_HCLK_Div1);
  77. /* 选择PCLK1时钟源为 HCLK(AHB) 2分频 */
  78. RCC_PCLK1Config(RCC_HCLK_Div2);
  79. /* 设置FLASH延时周期数为2 */
  80. FLASH_SetLatency(FLASH_Latency_2);
  81. /* 使能FLASH预取缓存 */
  82. FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  83. /* 选择锁相环(PLL)时钟源为HSE 1分频,倍频数为9,则PLL输出频率为 8MHz * 9 = 72MHz */
  84. RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
  85. /* 使能PLL */
  86. RCC_PLLCmd(ENABLE);
  87. /* 等待PLL输出稳定 */
  88. while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
  89. /* 选择SYSCLK时钟源为PLL */
  90. RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  91. /* 等待PLL成为SYSCLK时钟源 */
  92. while(RCC_GetSYSCLKSource() != 0x08);
  93. }
  94. }
  95. /*
  96. #include "stm32f10x_it.h"
  97. extern vu16 CCR1_Val;
  98. extern vu16 CCR2_Val;
  99. extern vu16 CCR3_Val;
  100. extern vu16 CCR4_Val;
  101. void TIM2_IRQHandler(void)
  102. {
  103. vu16 capture=0;
  104. if(TIM_GetITStatus(TIM2,TIM_IT_CC1) != RESET)
  105. {
  106. GPIO_WriteBit(GPIOA , GPIO_Pin_4,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_4)));
  107. capture = TIM_GetCapture1(TIM2);
  108. TIM_SetCompare1(TIM2,capture + CCR1_Val);
  109. TIM_ClearITPendingBit(TIM2,TIM_IT_CC1);
  110. }
  111. else if(TIM_GetITStatus(TIM2,TIM_IT_CC2) != RESET)
  112. {
  113. GPIO_WriteBit(GPIOA , GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_5)));
  114. capture = TIM_GetCapture2(TIM2);
  115. TIM_SetCompare2(TIM2,capture + CCR2_Val);
  116. TIM_ClearITPendingBit(TIM2,TIM_IT_CC2);
  117. }
  118. else if(TIM_GetITStatus(TIM2,TIM_IT_CC3) != RESET)
  119. {
  120. GPIO_WriteBit(GPIOA , GPIO_Pin_6,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_6)));
  121. capture = TIM_GetCapture3(TIM2);
  122. TIM_SetCompare3(TIM2,capture + CCR3_Val);
  123. TIM_ClearITPendingBit(TIM2,TIM_IT_CC3);
  124. }
  125. else
  126. {
  127. GPIO_WriteBit(GPIOA , GPIO_Pin_7,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_7)));
  128. capture = TIM_GetCapture4(TIM2);
  129. TIM_SetCompare4(TIM2,capture + CCR4_Val);
  130. TIM_ClearITPendingBit(TIM2,TIM_IT_CC4);
  131. }
  132. }
  133. */