Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.22 KB | None | 0 0
  1. #include "stm32f4xx.h"
  2. #include "stm32f4xx_rcc.h"
  3. #include "stm32f4xx_gpio.h"
  4. #include "stm32f4xx_tim.h"
  5. #include "stm32f4xx_exti.h"
  6. #include"stm32f4xx_syscfg.h"
  7. #include "misc.h"
  8.  
  9. int i=0;
  10.  
  11. void initTimer()
  12. {
  13.  
  14. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  15.  
  16. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  17.  
  18.  
  19. TIM_TimeBaseStructure.TIM_Prescaler = 8400;
  20. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  21. TIM_TimeBaseStructure.TIM_Period = 2000;
  22. TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  23. TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
  24. TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
  25.  
  26.  
  27. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
  28. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure2;
  29.  
  30. TIM_TimeBaseStructure2.TIM_Prescaler = 8400;
  31. TIM_TimeBaseStructure2.TIM_CounterMode = TIM_CounterMode_Up;
  32. TIM_TimeBaseStructure2.TIM_Period = 1000;
  33. TIM_TimeBaseStructure2.TIM_ClockDivision = 0;
  34. TIM_TimeBaseStructure2.TIM_RepetitionCounter = 0;
  35. TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure2);
  36.  
  37. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
  38. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure3;
  39.  
  40. TIM_TimeBaseStructure3.TIM_Prescaler = 8400;
  41. TIM_TimeBaseStructure3.TIM_CounterMode = TIM_CounterMode_Up;
  42. TIM_TimeBaseStructure3.TIM_Period = 6000;
  43. TIM_TimeBaseStructure3.TIM_ClockDivision = 0;
  44. TIM_TimeBaseStructure3.TIM_RepetitionCounter = 0;
  45. TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure3);
  46.  
  47. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
  48. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure4;
  49.  
  50. TIM_TimeBaseStructure4.TIM_Prescaler = 8400;
  51. TIM_TimeBaseStructure4.TIM_CounterMode = TIM_CounterMode_Up;
  52. TIM_TimeBaseStructure4.TIM_Period = 8000;
  53. TIM_TimeBaseStructure4.TIM_ClockDivision = 0;
  54. TIM_TimeBaseStructure4.TIM_RepetitionCounter = 0;
  55. TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure4);
  56.  
  57.  
  58. TIM_Cmd(TIM3, ENABLE);
  59. TIM_Cmd(TIM4, ENABLE);
  60. TIM_Cmd(TIM5, ENABLE);
  61. TIM_Cmd(TIM6, ENABLE);
  62. }
  63.  
  64. void gpiod_init()
  65. {
  66. GPIO_InitTypeDef GPIO_InitStructure;
  67. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
  68. /* Configure PD12, PD13, PD14 and PD15 in output pushpull mode */
  69. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
  70. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  71. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  72. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  73. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  74. GPIO_Init(GPIOD, &GPIO_InitStructure);
  75.  
  76. }
  77.  
  78. void initButton() {
  79.  
  80. GPIO_InitTypeDef GPIO_InitStructure;
  81. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
  82. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  83. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  84. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  85. GPIO_Init(GPIOA, &GPIO_InitStructure);
  86. }
  87. void initIRQtim3()
  88. {
  89.  
  90. NVIC_InitTypeDef NVIC_InitStructure;
  91. NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
  92. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
  93. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
  94. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  95. NVIC_Init(&NVIC_InitStructure);
  96.  
  97.  
  98. TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
  99. TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
  100. }
  101. void TIM3_IRQHandler()
  102. {
  103. if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
  104. {
  105. GPIO_ToggleBits(GPIOD, GPIO_Pin_12);
  106.  
  107. TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
  108.  
  109. }
  110. }
  111. void initEXTI() {
  112.  
  113. RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
  114. SYSCFG_EXTILineConfig (EXTI_PortSourceGPIOA, EXTI_PinSource0);
  115.  
  116. EXTI_InitTypeDef EXTI_InitStructure;
  117.  
  118. EXTI_InitStructure.EXTI_Line = EXTI_Line0;
  119. EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  120. EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  121.  
  122. EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  123. EXTI_Init(&EXTI_InitStructure);
  124.  
  125. NVIC_InitTypeDef NVIC_InitStructure;
  126. NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
  127. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  128. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  129. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  130. NVIC_Init(&NVIC_InitStructure);
  131. }
  132. void PWM(){
  133. int main (void)
  134. {
  135.  
  136. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
  137. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
  138.  
  139. GPIO_InitTypeDef GPIO_InitStructure; //pin pod PWM
  140.  
  141. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  142. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  143. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  144. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  145. GPIO_Init(GPIOD, &GPIO_InitStructure);
  146. GPIO_PinAFConfig(GPIOD,GPIO_PinSource13,GPIO_AF_TIM4) ;
  147.  
  148.  
  149. TIM_OCInitTypeDef TIM_OCInitStructure; //PWM
  150.  
  151. TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  152. TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable ;
  153. TIM_OCInitStructure.TIM_Pulse = 0 ;
  154. TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High ;
  155. TIM_OC2Init(TIM4,&TIM_OCInitStructure);
  156.  
  157. TIM_ARRPreloadConfig(TIM4,ENABLE) ;
  158. TIM_OC2PreloadConfig(TIM4,TIM_OCPreload_Enable ) ;
  159.  
  160.  
  161. TIM_Cmd(TIM4, ENABLE);
  162. }
  163. }
  164. void EXTI0_IRQHandler(void)
  165.  
  166. {
  167. if(EXTI_GetITStatus(EXTI_Line0) != RESET)
  168. {
  169. if(i==0)
  170. TIM4->CCR2 = 0;
  171. if(i==1)
  172. TIM4->CCR2 = 100;
  173. if(i==2)
  174. TIM4->CCR2 = 200;
  175. if(i==3)
  176. TIM4->CCR2 = 300;
  177. if(i==4)
  178. TIM4->CCR2 = 400;
  179. if(i==5)
  180. TIM4->CCR2 = 500;
  181. if(i==6)
  182. TIM4->CCR2 = 600;
  183. if(i==7)
  184. TIM4->CCR2 = 700;
  185. if(i==8)
  186. TIM4->CCR2 = 800;
  187. if(i==9)
  188. TIM4->CCR2 = 900;
  189. if(i==10)
  190. TIM4->CCR2 = 1000;
  191.  
  192. i=i+1;
  193.  
  194. // miejsce na kod wywoływany w momencie wystąpienia przerwania
  195. EXTI_ClearITPendingBit(EXTI_Line0);
  196. }
  197.  
  198. }
  199.  
  200. int main (void)
  201. {
  202. SystemInit();
  203. SystemCoreClockUpdate();
  204. initTimer();
  205. gpiod_init();
  206. PWM();
  207. //initEXTI();
  208. //initButton();
  209. initIRQtim3();
  210.  
  211.  
  212.  
  213. while(1)
  214. {
  215.  
  216.  
  217. }
  218. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement