Постигая stm32

Тема в разделе "Флудилка", создана пользователем Kelvin, 16 окт 2017.

  1. Kelvin

    Kelvin Гик

    Всем привет, я тут решил изучать stmf3discovery, написал код для мигания светодиодами, всё компилируется, собирается и загружается нормально, без ошибок, но светодиоды не мерцают... В чем кроется ошибка понять не могу.
    Код (C++):
    #include "stm32f30x.h"
    #include "stm32f30x_gpio.h"
    #include "stm32f30x_rcc.h"
    int main(void)
    {
        uint32_t i;
        GPIO_InitTypeDef GPIO_Init_LED;
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOE, ENABLE);
        GPIO_Init_LED.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
        GPIO_Init_LED.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_Init_LED.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_Init_LED.GPIO_OType = GPIO_OType_PP;
        GPIO_Init_LED.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOD, &GPIO_Init_LED);
        while(1)
        {
          GPIO_SetBits(GPIOE, GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
          for (i = 0; i<2000000;i++){}
          GPIO_ResetBits(GPIOE, GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
          for (i = 0; i<2000000;i++){}
        }
    }

    #ifdef USE_FULL_ASSERT

    void assert_failed(u8* file, u32 line)
    {
    while (1){}
    }
    #endif
    Думал что просто не тот порт или пины, но по схемке всё верно.
    Схемка:
    [​IMG]
     
  2. fixedip

    fixedip Гик

    А где объявлена переменная i для циклов?
     
  3. DetSimen

    DetSimen Guest

    прямо тут
    int main(void)
    {
    uint32_t i;
     
  4. Kelvin

    Kelvin Гик

    Все, щас посмотрю, извините за невнимательность)))
     
  5. Kelvin

    Kelvin Гик

    Разве он не должен был ругаться что переменная не объявлена?
     
  6. DetSimen

    DetSimen Guest

    обьявлена она, просто fixedip не видит.
    я даже написал где обьявлена.
     
  7. Kelvin

    Kelvin Гик

    Поставил
    Код (C++):
    int i;
    После инклудов, но ничего не изменилось.
     
  8. fixedip

    fixedip Гик

    Да сори.. проглядел.
     
  9. Kelvin

    Kelvin Гик

    А, я чет тупанул
     
  10. DetSimen

    DetSimen Guest

    Бувает :)
     
  11. Kelvin

    Kelvin Гик

    С линковщиком это никак не связано?
     
  12. ZAZ-965

    ZAZ-965 Гуру

    По моему, вы инициализируете GPIOD, а включаете тактирование и пишете в GPIOE.
    Код (C++):
    GPIO_Init(GPIOE, &GPIO_Init_LED); //должно быть
     
    acos и Kelvin нравится это.
  13. fixedip

    fixedip Гик

    Возможно из-за этого...
    Код (C++):
     GPIO_Init(GPIOD, &GPIO_Init_LED);
    Код (C++):
    GPIO_SetBits(GPIOE
     
    Kelvin нравится это.
  14. fixedip

    fixedip Гик

    Пока писал ...уже опередили :)
     
    Kelvin нравится это.
  15. Kelvin

    Kelvin Гик

    Так, спасибо, совершил глупую ошибку, отвлек людей, в следующий раз просмотрю код минимум 100 раз прежде чем на форум лезть. Извиняюсь)
     
  16. Kelvin

    Kelvin Гик

    Единственное светодиоды просто горят, а не мигают. Хотя системная задержка есть
     
  17. Kelvin

    Kelvin Гик

    Про функции SetBits и resetbits узнал из библиотеки, там пишут:
    Установить как я понял - это включить, сбросить - выключить?
     
  18. ostrov

    ostrov Гуру

    Может немного оффтоп, но реализация для STM32 под Arduino IDE от Роджера Кларка очень хороша. В отличие от AVR команды на вкл/выкл пина типа digitalWrite() выполняются чуть медленнее чем прямая запись в порт, в отличие от хСотни и тысячи. То есть даже в IDE и средствами IDE можно делать вполне шустрые программы.
     
    sslobodyan нравится это.
  19. AlexU

    AlexU Гуру

    Судя по коду из первого поста задержка реализована через цикл:
    Код (C++):
    for (i = 0; i<2000000;i++){}
    компилятор такой код может оптимизировать -- просто выкинуть пустой цикл из итогового бинарника -- в результате чего ни какой задержки не будет и на выходе будет ШИМ с максимальной частотой из-за чего Вы будете наблюдать светящиеся светодиоды, а не моргающие.
     
    fixedip и Kelvin нравится это.
  20. Kelvin

    Kelvin Гик

    Понял, переписал не много задержку, щас попробую отрубить оптимизацию.