Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.47 KB | None | 0 0
  1. //controllo se l'utente sta premendo il pulsante
  2. //ovvero leggo se è alto l'ultimo bit (PA0) del registro IDR di GPIOA
  3. if((GPIOA->IDR & GPIO_IDR_0) == GPIO_IDR_0){
  4.  
  5. //setto tutte le linee dei led da PE8 a PE15 come output digitali
  6. GPIOE->MODER |= 0x55550000;
  7. // accendi tutti i led
  8. GPIOE->ODR = 0x0000FF00;
  9.  
  10. ******************************************************* TIMER - modalita base dei tempi (se conosco quanto tempo deve contare)
  11. TIM2 è a 32 bit - conta fino a 2^(32) - 1 = 4.294.967.295 ocillazioni
  12. TIM3 e TIM4 sono a 16 bit - contano fino a 2^(16) - 1 = 65.535 oscillazioni (se il conteggio non basta serve un divisore di frequenza)
  13.  
  14. //abilito la periferica TIMER2 che si trova sul bus APB1
  15. RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
  16. //abilito il conteggio del timer settando a 1 il LSB del registro CR1
  17. TIM2->CR1 |= TIM_CR1_CEN;
  18. //setto per sicurezza a 0 il valore iniziale del contatore
  19. TIM2->CNT = 0;
  20. //siccome voglio un tempo di mezzo secondo e ho un clock di 8000000 di conteggi al secondo
  21. //devo contare fino alla sua metà cioe 4 milioni
  22. TIM2->ARR = 4000000;
  23. //ora controllo se il bit UIF, ovvero quello piu' a destra del registro SR è attivo
  24. //esso si attiva quando il contatore CNT raggiunge il valore che ho impostato in ARR
  25. if(( TIM2->SR & TIM_SR_UIF) == TIM_SR_UIF){
  26.  
  27. //ovviamente il contatore raggiunto ARR riparte da zero
  28.  
  29. //poi abbassa il flag UIF
  30. TIM2->SR &= ~TIM_SR_UIF;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement