Всем привет, я тут решил изучать 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 Думал что просто не тот порт или пины, но по схемке всё верно. Схемка:
По моему, вы инициализируете GPIOD, а включаете тактирование и пишете в GPIOE. Код (C++): GPIO_Init(GPIOE, &GPIO_Init_LED); //должно быть
Так, спасибо, совершил глупую ошибку, отвлек людей, в следующий раз просмотрю код минимум 100 раз прежде чем на форум лезть. Извиняюсь)
Про функции SetBits и resetbits узнал из библиотеки, там пишут: Установить как я понял - это включить, сбросить - выключить?
Может немного оффтоп, но реализация для STM32 под Arduino IDE от Роджера Кларка очень хороша. В отличие от AVR команды на вкл/выкл пина типа digitalWrite() выполняются чуть медленнее чем прямая запись в порт, в отличие от хСотни и тысячи. То есть даже в IDE и средствами IDE можно делать вполне шустрые программы.
Судя по коду из первого поста задержка реализована через цикл: Код (C++): for (i = 0; i<2000000;i++){} компилятор такой код может оптимизировать -- просто выкинуть пустой цикл из итогового бинарника -- в результате чего ни какой задержки не будет и на выходе будет ШИМ с максимальной частотой из-за чего Вы будете наблюдать светящиеся светодиоды, а не моргающие.