Testprogramm für Hardwaretimer TIM2 und TIM3 mit Nucleo-F401RE

Dependencies:   mbed-os

Committer:
JoergSturm
Date:
Fri Apr 24 14:13:21 2020 +0000
Revision:
1:17722afc5909
Parent:
0:45170c77adc7
Child:
2:a5ee88ab46b2
TIM6 mit NVIC und Interrupt

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JoergSturm 0:45170c77adc7 1 #include "mbed.h"
JoergSturm 1:17722afc5909 2
JoergSturm 0:45170c77adc7 3
JoergSturm 0:45170c77adc7 4 DigitalOut myled(PC_0);
JoergSturm 1:17722afc5909 5 DigitalOut PC1(PC_1);
JoergSturm 0:45170c77adc7 6
JoergSturm 1:17722afc5909 7 void EX1IRQhandler(void)
JoergSturm 1:17722afc5909 8 {
JoergSturm 1:17722afc5909 9 //PC1=!PC1;
JoergSturm 1:17722afc5909 10 GPIOC->ODR=~GPIOC->ODR;
JoergSturm 1:17722afc5909 11 EXTI->PR=0b10;
JoergSturm 1:17722afc5909 12 HAL_NVIC_ClearPendingIRQ(EXTI1_IRQn);
JoergSturm 1:17722afc5909 13 }
JoergSturm 0:45170c77adc7 14
JoergSturm 1:17722afc5909 15 //TIM_HandleTypeDef htim6;
JoergSturm 0:45170c77adc7 16 void TIM6_IRQHandler(void)
JoergSturm 0:45170c77adc7 17 {
JoergSturm 0:45170c77adc7 18 myled=!myled;
JoergSturm 0:45170c77adc7 19 TIM6->SR=0;
JoergSturm 0:45170c77adc7 20 HAL_NVIC_ClearPendingIRQ(TIM6_IRQn);
JoergSturm 0:45170c77adc7 21 }
JoergSturm 0:45170c77adc7 22
JoergSturm 1:17722afc5909 23 void EX1init(void)
JoergSturm 1:17722afc5909 24 {
JoergSturm 1:17722afc5909 25 RCC->AHBENR|=0b111;
JoergSturm 1:17722afc5909 26 GPIOA->PUPDR|=0b1000;
JoergSturm 1:17722afc5909 27 EXTI->IMR|=0b10;
JoergSturm 1:17722afc5909 28 EXTI->RTSR|=0b10;
JoergSturm 1:17722afc5909 29 }
JoergSturm 1:17722afc5909 30
JoergSturm 0:45170c77adc7 31 static void NVIC_Init(void)
JoergSturm 0:45170c77adc7 32 {
JoergSturm 0:45170c77adc7 33 /* TIM6_IRQn interrupt configuration */
JoergSturm 1:17722afc5909 34 //HAL_NVIC_SetPriority(TIM6_IRQn, 0, 0);
JoergSturm 0:45170c77adc7 35 NVIC_SetVector(TIM6_IRQn, (uint32_t)&TIM6_IRQHandler);
JoergSturm 0:45170c77adc7 36 HAL_NVIC_EnableIRQ(TIM6_IRQn);
JoergSturm 1:17722afc5909 37 NVIC_SetVector(EXTI1_IRQn, (uint32_t)&EX1IRQhandler);
JoergSturm 1:17722afc5909 38 HAL_NVIC_EnableIRQ(EXTI1_IRQn);
JoergSturm 0:45170c77adc7 39 }
JoergSturm 0:45170c77adc7 40
JoergSturm 0:45170c77adc7 41 /* TIM6 init function */
JoergSturm 0:45170c77adc7 42 static void TIM6_Init(void)
JoergSturm 0:45170c77adc7 43 {
JoergSturm 0:45170c77adc7 44 /*
JoergSturm 0:45170c77adc7 45 __TIM6_CLK_ENABLE();
JoergSturm 0:45170c77adc7 46 htim6.Instance = TIM6;
JoergSturm 0:45170c77adc7 47 htim6.Init.Prescaler = 3200;
JoergSturm 0:45170c77adc7 48 htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
JoergSturm 0:45170c77adc7 49 htim6.Init.Period = 5000;
JoergSturm 0:45170c77adc7 50 if (HAL_TIM_Base_Init(&htim6) != HAL_OK) {
JoergSturm 0:45170c77adc7 51 while(1) {
JoergSturm 0:45170c77adc7 52 }
JoergSturm 0:45170c77adc7 53 }
JoergSturm 0:45170c77adc7 54 HAL_TIM_Base_Start_IT(&htim6);
JoergSturm 0:45170c77adc7 55 */
JoergSturm 0:45170c77adc7 56
JoergSturm 0:45170c77adc7 57 RCC->APB1ENR|=0b10000; //Clock Enable
JoergSturm 0:45170c77adc7 58 TIM6->PSC=3200; //Prescaler 100µs
JoergSturm 0:45170c77adc7 59 TIM6->ARR=5000; //Autoreload 5000*100µs = 0,5s
JoergSturm 0:45170c77adc7 60 TIM6->DIER=1; //UIE = 1 (Update Interrupt Enable)
JoergSturm 0:45170c77adc7 61 TIM6->SR=0; //UIF =0 (Update Interrupt Flag)
JoergSturm 0:45170c77adc7 62 TIM6->CR1=1; //CEN=1 (Counter Enable)
JoergSturm 0:45170c77adc7 63 }
JoergSturm 0:45170c77adc7 64
JoergSturm 0:45170c77adc7 65 int main()
JoergSturm 0:45170c77adc7 66 {
JoergSturm 0:45170c77adc7 67 TIM6_Init();
JoergSturm 1:17722afc5909 68 EX1init();
JoergSturm 0:45170c77adc7 69 NVIC_Init();
JoergSturm 0:45170c77adc7 70 while(1) {
JoergSturm 0:45170c77adc7 71 /*
JoergSturm 0:45170c77adc7 72 if (TIM6->SR==1)
JoergSturm 0:45170c77adc7 73 {
JoergSturm 0:45170c77adc7 74 TIM6->SR=0;
JoergSturm 0:45170c77adc7 75 myled=!myled;
JoergSturm 0:45170c77adc7 76 }
JoergSturm 0:45170c77adc7 77 */
JoergSturm 0:45170c77adc7 78 }
JoergSturm 0:45170c77adc7 79
JoergSturm 0:45170c77adc7 80 }