Advertisement
Guest User

Untitled

a guest
May 21st, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.14 KB | None | 0 0
  1. #include "stm32f4xx.h"
  2. #define F_CLK 168000000
  3.  
  4.  
  5.  
  6. void TIM4_IRQHandler ()
  7. {
  8. if(TIM4->SR & TIM_SR_CC1IF)
  9. {
  10. TIM4->SR &= ~(TIM_SR_CC1IF);
  11. GPIOD->ODR |= (GPIO_ODR_ODR_15 | GPIO_ODR_ODR_14 | GPIO_ODR_ODR_13 | GPIO_ODR_ODR_12);
  12. }
  13. else if(TIM4->SR & TIM_SR_CC2IF)
  14. {
  15. TIM4->SR &= ~(TIM_SR_CC2IF);
  16. GPIOD->ODR &= ~(GPIO_ODR_ODR_15 | GPIO_ODR_ODR_14 | GPIO_ODR_ODR_13 | GPIO_ODR_ODR_12);
  17. }
  18. else if(TIM4->SR & TIM_SR_CC3IF)
  19. {
  20. TIM4->SR &= ~(TIM_SR_CC3IF);
  21. GPIOD->ODR |= (GPIO_ODR_ODR_15 | GPIO_ODR_ODR_14 | GPIO_ODR_ODR_13 | GPIO_ODR_ODR_12);
  22. }
  23. else if(TIM4->SR & TIM_SR_CC4IF)
  24. {
  25. TIM4->SR &= ~(TIM_SR_CC4IF);
  26. GPIOD->ODR &= ~(GPIO_ODR_ODR_15 | GPIO_ODR_ODR_14 | GPIO_ODR_ODR_13 | GPIO_ODR_ODR_12);
  27. }
  28. }
  29. void TIM4_Init()
  30. {
  31. NVIC_EnableIRQ(TIM4_IRQn);
  32. RCC->APB1ENR |= (RCC_APB1ENR_TIM4EN); //
  33. TIM4->PSC = 8400; // prescaler 8400 -> clocking 10kHz
  34. TIM4->ARR = 9900; // 10kHz/1000 gives 1Hz - > 1s interrupts
  35. TIM4->CCR1 = 0;
  36. TIM4->CCR2 = 990;
  37. TIM4->CCR3 = 3600;
  38. TIM4->CCR4 = 7200;
  39. TIM4->DIER |= (TIM_DIER_CC4IE | TIM_DIER_CC3IE | TIM_DIER_CC2IE | TIM_DIER_CC1IE);
  40. TIM4->CR1 |= (TIM_CR1_CEN);
  41.  
  42.  
  43. }
  44.  
  45.  
  46. void IRQ_Handler_Systick(int ticks)
  47. {
  48. static int state = 0;
  49. switch(state){
  50. case 0:
  51. //GPIOD->ODR ^= (GPIO_ODR_ODR_15 | GPIO_ODR_ODR_14 | GPIO_ODR_ODR_13 | GPIO_ODR_ODR_12);
  52. state = 1;
  53. break;
  54. case 1:
  55. //GPIOD->ODR &= ~(GPIO_ODR_ODR_15 | GPIO_ODR_ODR_14 | GPIO_ODR_ODR_13 | GPIO_ODR_ODR_12);
  56. if(ticks == 3)
  57. {
  58. state = 2;
  59. }
  60. break;
  61. case 2:
  62. // GPIOD->ODR |= (GPIO_ODR_ODR_15 | GPIO_ODR_ODR_14 | GPIO_ODR_ODR_13 | GPIO_ODR_ODR_12);
  63. if(ticks == 9)
  64. state = 3;
  65. break;
  66. case 3:
  67. //GPIOD->ODR &= ~(GPIO_ODR_ODR_15 | GPIO_ODR_ODR_14 | GPIO_ODR_ODR_13 | GPIO_ODR_ODR_12);
  68. state = 0;
  69. break;
  70.  
  71. default:
  72. break;
  73. }
  74.  
  75. }
  76. void SysTick_Handler(void)
  77. {
  78. static uint16_t counts = 0;
  79. IRQ_Handler_Systick(counts++);
  80. if( counts == 10)
  81. {
  82. counts = 0;
  83. }
  84. }
  85.  
  86. void SetTick_ms(uint32_t timeMs)
  87. {
  88. SysTick->LOAD = (((float)F_CLK/8)*0.001*timeMs); //load 1ms resolution
  89. SysTick->CTRL |= (1 << SysTick_CTRL_ENABLE_Pos);
  90. }
  91.  
  92. void TIM4_Init_PWM()
  93. {
  94. NVIC_EnableIRQ(TIM4_IRQn);
  95. RCC->APB1ENR |= (RCC_APB1ENR_TIM4EN); //
  96. RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;
  97.  
  98. TIM4->ARR = 8400; //
  99. TIM4->CCR1 = 0;
  100. TIM4->CCR2 = 193;
  101. TIM4->CCR3 = 2100;
  102. TIM4->CCR4 = 6300;
  103. TIM4->CCMR1 |= (TIM_CCMR1_OC1M_1 |TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC2M_1| TIM_CCMR1_OC2M_2);
  104. TIM4->CCMR2 |= ( TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_2);
  105. TIM4->CCER |= (TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E | TIM_CCER_CC4E);
  106. TIM4->CR1 |= (TIM_CR1_CEN);
  107.  
  108. }
  109.  
  110. void Brightness_Increase()
  111. {
  112. static uint16_t brightness = 0;
  113. brightness = (brightness + 840);
  114. if (brightness > TIM4->ARR)
  115. brightness = 0;
  116. TIM4->CCR1 = brightness;
  117.  
  118. }
  119.  
  120.  
  121. void TIM7_IRQHandler(){
  122. static int state = 0;
  123. TIM7->SR = 0;
  124.  
  125. switch (state){
  126. case 0:
  127. if((GPIOA->IDR & 1))
  128. state++;
  129. else
  130. state = 0;
  131. break;
  132.  
  133. case 1:
  134. if((GPIOA->IDR & 1))
  135. {
  136. state++;
  137. }
  138. else
  139. state = 0;
  140.  
  141. case 2:
  142. if((GPIOA->IDR & 1))
  143. {
  144. state++;
  145. }
  146. else
  147. state = 0;
  148. break;
  149.  
  150. case 3:
  151. state++;
  152. Brightness_Increase();
  153. break;
  154.  
  155. case 4:
  156. if(!(GPIOA->IDR & 1))
  157. {
  158. state++;
  159. }
  160. break;
  161.  
  162. case 5:
  163. if(!(GPIOA->IDR & 1))
  164. {
  165. state++;
  166. }
  167. break;
  168.  
  169. case 6:
  170. if(!(GPIOA->IDR & 1))
  171. {
  172. state=0;
  173. }
  174. break;
  175.  
  176. default:
  177. break;
  178. }
  179. }
  180.  
  181.  
  182. void TIM7_Init_IT()
  183. {
  184. RCC->APB1ENR |= (RCC_APB1ENR_TIM7EN); //
  185. TIM7->PSC = 8400; // prescaler 8399 -> clocking 10kHz
  186. TIM7->ARR = 200;
  187. TIM7->DIER |= (TIM_DIER_UIE);
  188. NVIC_EnableIRQ(TIM7_IRQn);
  189. TIM7->CR1 |= (TIM_CR1_CEN);
  190.  
  191. }
  192.  
  193. void wait(uint32_t timeMs)
  194. {
  195. uint16_t mscounter = 1;
  196. uint16_t scounter = 0;
  197. float valueToLoad = (((float)F_CLK/8)*0.001); //load 1ms resolution
  198. SysTick->LOAD = valueToLoad;
  199. SysTick->CTRL |= (1 << SysTick_CTRL_ENABLE_Pos);
  200. while(timeMs != mscounter+1000*scounter)
  201. {
  202. if(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk)
  203. {
  204. mscounter++;
  205. if(mscounter % 1001 == 0)
  206. {
  207. scounter++;
  208. mscounter = 1;
  209. }
  210. }
  211. }
  212. }
  213.  
  214. int main(){
  215.  
  216. RCC->CR |= (RCC_CR_HSEBYP | RCC_CR_HSEON);
  217. RCC->CR &= ~(RCC_CR_PLLON); // PLL OFF
  218.  
  219. RCC->PLLCFGR = (RCC_PLLCFGR_PLLSRC_HSE);
  220. RCC->PLLCFGR |= ((168<<6) | 4);
  221. RCC->CR |= (RCC_CR_PLLON);
  222. FLASH->ACR |= FLASH_ACR_DCEN;
  223. FLASH->ACR |= FLASH_ACR_DCEN;
  224. FLASH->ACR |= FLASH_ACR_ICEN;
  225. FLASH->ACR |= FLASH_ACR_PRFTEN;
  226. FLASH->ACR |= 6;
  227. RCC->CFGR |= (RCC_CFGR_SW_1);
  228. SysTick->CTRL |= (1<< SysTick_CTRL_TICKINT_Pos); // Enable intterupts request
  229.  
  230.  
  231. RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN;
  232. RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; // GPIOA on
  233. GPIOD->AFR[1] |= (( 0x2222 << 16));
  234. GPIOD->MODER |= (GPIO_MODER_MODER15_1 | GPIO_MODER_MODER14_1 | GPIO_MODER_MODER13_1 | GPIO_MODER_MODER12_1 | GPIO_MODER_MODER10_1);
  235. GPIOD->ODR |= (GPIO_ODR_ODR_15 | GPIO_ODR_ODR_14 | GPIO_ODR_ODR_13 | GPIO_ODR_ODR_12);
  236.  
  237. SetTick_ms(100);
  238. //TIM4_Init();
  239. TIM4_Init_PWM();
  240. TIM7_Init_IT();
  241.  
  242. while(1)
  243. ;
  244.  
  245.  
  246. return 0;
  247. }
  248.  
  249. /*
  250. Timer1 podlaczyc PWM do ledow 1% 5% 50% 99% Duty cycle,
  251. 10kHz
  252.  
  253. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement