Wpis z mikrobloga

Mam problem który z pozoru może się wydawać banalny i tak pewnie jest ale kompletnie nie wiem czemu dioda nie chce mi migać. Niżej wklejam kod:

#include "stm32l1xx.h"
#include "stm32l1xx_nucleo.h"

void delay(int time)
{
int i;
for (i = 0; i < time * 4000; i++) {}
}

int main(void)
{
GPIOInitTypeDef gpio;

RCC
AHBPeriphClockCmd(RCCAHBPeriphGPIOA, ENABLE);

GPIOStructInit(&gpio);
gpio.GPIO
Pin = GPIOPin5;
gpio.GPIOMode = GPIOModeOUT;
gpio.GPIO
OType = GPIOOTypePP;
GPIOInit(GPIOA, &gpio);

while (1) {
GPIO
SetBits(GPIOA, GPIOPin5);
delay(50);
GPIOResetBits(GPIOA, GPIOPin_5);
delay(100);
}
}

#stm32 #programowanie #mikrokontrolery
  • 26
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@mlotek123: ten delay na pewno dobrze działa? Nie zajmuję się programowaniem mikrokontrolerów, ale ta implementacja wydaje się nieco dziwna - kompilator może przecież zoptymalizować tę pętlę.
  • Odpowiedz
@mlotek123: @informatyk moƶe mieć rację. Skompiluj bez optymalizacji (albo wewnątrz pętli dotykaj jakąś globalną volatile zmienną) i zobacz. Stawiam, ƶe "pali się" w połowie jasności, bo co chwilę ją gasisz i zapalasz
  • Odpowiedz
@mlotek123: W trybie debug czy coś - nie wiem z jakiego środowiska korzystasz to cięƶko mi powiedzieć.

Moƶe inaczej, dodaj zmienną globalną:

volatile unsigned char dupa;
i w pętli
  • Odpowiedz
@mlotek123: Masz włączoną optymalizację. Kompilator widząc taką bezsensowną pętlę, gdzie jest w stanie udowodnić, ƶe nic się nie dzieje - moƶe ją wywalić. I tak właśnie zrobił.
  • Odpowiedz