Jack Hansdampf
/
TIM6_IRQ
Timer mit Interrupt
Revision 2:a5ee88ab46b2, committed 2020-11-12
- Comitter:
- jack1930
- Date:
- Thu Nov 12 13:28:29 2020 +0000
- Parent:
- 1:17722afc5909
- Commit message:
- Beispiel mit Timer und Interrupt
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 17722afc5909 -r a5ee88ab46b2 main.cpp --- a/main.cpp Fri Apr 24 14:13:21 2020 +0000 +++ b/main.cpp Thu Nov 12 13:28:29 2020 +0000 @@ -2,79 +2,70 @@ DigitalOut myled(PC_0); -DigitalOut PC1(PC_1); +DigitalOut myled2(PC_1); +DigitalOut PC2(PC_2); void EX1IRQhandler(void) { - //PC1=!PC1; - GPIOC->ODR=~GPIOC->ODR; - EXTI->PR=0b10; - HAL_NVIC_ClearPendingIRQ(EXTI1_IRQn); + PC2=!PC2; } -//TIM_HandleTypeDef htim6; void TIM6_IRQHandler(void) { myled=!myled; TIM6->SR=0; HAL_NVIC_ClearPendingIRQ(TIM6_IRQn); } - +void TIM7_IRQHandler(void) +{ + myled2=!myled2; + TIM7->SR=0; + HAL_NVIC_ClearPendingIRQ(TIM7_IRQn); +} +InterruptIn PA1(PA_1); void EX1init(void) { -RCC->AHBENR|=0b111; -GPIOA->PUPDR|=0b1000; -EXTI->IMR|=0b10; -EXTI->RTSR|=0b10; +PA1.rise(&EX1IRQhandler); +PA1.mode(PullDown); } -static void NVIC_Init(void) +void NVIC_Init(void) { /* TIM6_IRQn interrupt configuration */ - //HAL_NVIC_SetPriority(TIM6_IRQn, 0, 0); NVIC_SetVector(TIM6_IRQn, (uint32_t)&TIM6_IRQHandler); HAL_NVIC_EnableIRQ(TIM6_IRQn); - NVIC_SetVector(EXTI1_IRQn, (uint32_t)&EX1IRQhandler); - HAL_NVIC_EnableIRQ(EXTI1_IRQn); + /* TIM7_IRQn interrupt configuration */ + NVIC_SetVector(TIM7_IRQn, (uint32_t)&TIM7_IRQHandler); + HAL_NVIC_EnableIRQ(TIM7_IRQn); } /* TIM6 init function */ -static void TIM6_Init(void) +void TIM6_Init(void) { - /* - __TIM6_CLK_ENABLE(); - htim6.Instance = TIM6; - htim6.Init.Prescaler = 3200; - htim6.Init.CounterMode = TIM_COUNTERMODE_UP; - htim6.Init.Period = 5000; - if (HAL_TIM_Base_Init(&htim6) != HAL_OK) { - while(1) { - } - } - HAL_TIM_Base_Start_IT(&htim6); - */ - RCC->APB1ENR|=0b10000; //Clock Enable - TIM6->PSC=3200; //Prescaler 100µs + TIM6->PSC=3199; //Prescaler 100µs TIM6->ARR=5000; //Autoreload 5000*100µs = 0,5s TIM6->DIER=1; //UIE = 1 (Update Interrupt Enable) TIM6->SR=0; //UIF =0 (Update Interrupt Flag) TIM6->CR1=1; //CEN=1 (Counter Enable) } +void TIM7_Init(void) +{ + RCC->APB1ENR|=0b100000; //Clock Enable + TIM7->PSC=3199; //Prescaler 100µs + TIM7->ARR=15000; //Autoreload 15000*100µs = 1,5s + TIM7->DIER=1; //UIE = 1 (Update Interrupt Enable) + TIM7->SR=0; //UIF =0 (Update Interrupt Flag) + TIM7->CR1=1; //CEN=1 (Counter Enable) +} int main() { TIM6_Init(); + TIM7_Init(); EX1init(); NVIC_Init(); while(1) { - /* - if (TIM6->SR==1) - { - TIM6->SR=0; - myled=!myled; - } - */ } } \ No newline at end of file