Forum: Mikrocontroller und Digitale Elektronik STM32 Delay funktion arbeitet nicht


von Peter K. (peterka2000)


Lesenswert?

Ich habe folgenden Code:
1
#include "stm32f4xx_conf.h"
2
3
const uint32_t one_tick = 1 / 8000000 * 1000; //1/F = t, müsste die Zeit für einen Tick in ms sein
4
5
void _delay_ms(__IO uint32_t time){
6
  uint32_t loops = time / one_tick;
7
  for(uint32_t i = 0; i < loops; i++){
8
    __asm("nop");
9
  }
10
}
11
12
void GPIO_Init_Pins(void){
13
  GPIO_InitTypeDef GPIO_InitStructure;
14
15
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
16
17
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
18
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
19
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
20
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
21
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
22
  GPIO_Init(GPIOD, &GPIO_InitStructure);
23
}
24
25
int main(void){
26
27
  SystemInit();
28
29
  GPIO_Init_Pins();
30
31
    while(1){
32
      GPIO_SetBits(GPIOD, GPIO_Pin_14);
33
      _delay_ms(1000);
34
      GPIO_ResetBits(GPIOD, GPIO_Pin_14);
35
      _delay_ms(1000);
36
    }
37
}
Wenn ich aber Compiliere und brenne, ist der Pin dauerhaft an. 
Eigentlich sollte er im Sekundentakt blinken

von holger (Gast)


Lesenswert?

>const uint32_t one_tick = 1 / 8000000 * 1000; //1/F = t, müsste die

Das ergibt Null.

von Peter K. (peterka2000)


Lesenswert?

OH, ja stimmt, ist ja nur en int. Wie könnte ich das aber am 
elegantesten ohne Timer lösen, der kommt danach

von Peter K. (peterka2000)


Lesenswert?

Ich hab es mal mit float probiert, geht auch nicht. Nach der heutigen 
Mathe Klassenarbeit kann ich nicht mehr denken

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.