Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //controllo se l'utente sta premendo il pulsante
- //ovvero leggo se è alto l'ultimo bit (PA0) del registro IDR di GPIOA
- if((GPIOA->IDR & GPIO_IDR_0) == GPIO_IDR_0){
- //setto tutte le linee dei led da PE8 a PE15 come output digitali
- GPIOE->MODER |= 0x55550000;
- // accendi tutti i led
- GPIOE->ODR = 0x0000FF00;
- ******************************************************* TIMER - modalita base dei tempi (se conosco quanto tempo deve contare)
- TIM2 è a 32 bit - conta fino a 2^(32) - 1 = 4.294.967.295 ocillazioni
- 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)
- //abilito la periferica TIMER2 che si trova sul bus APB1
- RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
- //abilito il conteggio del timer settando a 1 il LSB del registro CR1
- TIM2->CR1 |= TIM_CR1_CEN;
- //setto per sicurezza a 0 il valore iniziale del contatore
- TIM2->CNT = 0;
- //siccome voglio un tempo di mezzo secondo e ho un clock di 8000000 di conteggi al secondo
- //devo contare fino alla sua metà cioe 4 milioni
- TIM2->ARR = 4000000;
- //ora controllo se il bit UIF, ovvero quello piu' a destra del registro SR è attivo
- //esso si attiva quando il contatore CNT raggiunge il valore che ho impostato in ARR
- if(( TIM2->SR & TIM_SR_UIF) == TIM_SR_UIF){
- //ovviamente il contatore raggiunto ARR riparte da zero
- //poi abbassa il flag UIF
- TIM2->SR &= ~TIM_SR_UIF;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement