Решил написать программку по таймеру каждую секунду обновляется значение на семисегментном индикаторе.
В режиме отладки вроде все ничего. Считает, меняет цифры, но если запустить, то всего этого нет. Тупо все индикаторы загораются и все.
Подскажите пожалуйста, что я делаю не так?
Код: Выделить всё
#include "stm32f4xx.h" // Device header
#define SEG_A 7
#define SEG_B 6
#define SEG_C 4
#define SEG_D 2
#define SEG_E 1
#define SEG_F 9
#define SEG_G 10
#define DIG_1 (0<<SEG_A)|(1<<SEG_B)|(1<<SEG_C)|(0<<SEG_D)|(0<<SEG_E)|(0<<SEG_F)|(0<<SEG_G)
#define DIG_2 (1<<SEG_A)|(1<<SEG_B)|(0<<SEG_C)|(1<<SEG_D)|(1<<SEG_E)|(0<<SEG_F)|(1<<SEG_G)
#define DIG_3 (1<<SEG_A)|(1<<SEG_B)|(1<<SEG_C)|(1<<SEG_D)|(0<<SEG_E)|(0<<SEG_F)|(1<<SEG_G)
#define DIG_4 (0<<SEG_A)|(1<<SEG_B)|(1<<SEG_C)|(0<<SEG_D)|(0<<SEG_E)|(1<<SEG_F)|(1<<SEG_G)
#define DIG_5 (1<<SEG_A)|(0<<SEG_B)|(1<<SEG_C)|(1<<SEG_D)|(0<<SEG_E)|(1<<SEG_F)|(1<<SEG_G)
#define DIG_6 (1<<SEG_A)|(0<<SEG_B)|(1<<SEG_C)|(1<<SEG_D)|(1<<SEG_E)|(1<<SEG_F)|(1<<SEG_G)
#define DIG_7 (1<<SEG_A)|(1<<SEG_B)|(1<<SEG_C)|(0<<SEG_D)|(0<<SEG_E)|(0<<SEG_F)|(0<<SEG_G)
#define DIG_8 (1<<SEG_A)|(1<<SEG_B)|(1<<SEG_C)|(1<<SEG_D)|(1<<SEG_E)|(1<<SEG_F)|(1<<SEG_G)
#define DIG_9 (1<<SEG_A)|(1<<SEG_B)|(1<<SEG_C)|(1<<SEG_D)|(0<<SEG_E)|(1<<SEG_F)|(1<<SEG_G)
#define DIG_0 (1<<SEG_A)|(1<<SEG_B)|(1<<SEG_C)|(1<<SEG_D)|(1<<SEG_E)|(1<<SEG_F)|(0<<SEG_G)
int ind_LED[10] = {DIG_1, DIG_2, DIG_3, DIG_4, DIG_5, DIG_6, DIG_7, DIG_8, DIG_9, DIG_0};
volatile static uint32_t i = 0;
void TIM6_DAC_IRQHandler(){
if (i <10) {
GPIOD->ODR = 0x00;
GPIOD->ODR |= ind_LED[i];
i++;
}
else if(i == 10){
GPIOD->ODR = 0x00;
GPIOD->ODR |= ind_LED[i];
i = 0;
}
//GPIOD->ODR = DIG_2;
}
int main(){
RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN;
GPIOD->MODER = 0x55555555;
GPIOD->OTYPER = 0;
GPIOD->OSPEEDR = 0;
RCC->APB1ENR = RCC_APB1ENR_TIM6EN;
TIM6->PSC = 24000-1;
TIM6->ARR = 1000;
TIM6->CR1 = TIM_CR1_CEN;
TIM6->DIER = TIM_DIER_UIE;
NVIC_EnableIRQ(TIM6_DAC_IRQn);
while(1) {
}
}