electrotehnik 0 4 июня, 2015 Опубликовано 4 июня, 2015 · Жалоба Добрый день Не работают GPIO. Все перепроверил, использую CMSIS и Standart Peripherial Library, вот код: #include "stm32f37x.h" #include "stm32f37x_gpio.h" void InitPort(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Разрешить тактирование GPIOx */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); /* Конфигурирование ножки PB7, туда подключен светодиод */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOB, &GPIO_InitStructure); return; } int main(void) { InitPort(); GPIO_SetBits(GPIOB, GPIO_Pin_7); //светодиод горит while (1) { } } Может чего-то не хватает? Подскажите, ткните пальцем пожалуйста. На других MCU Cortex-M4 такой код работает... вот и думаю, может проц запитал не до конца, но он ведь видится, прошивка льется и читается ST-Link. Программирую в Keil. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 10 4 июня, 2015 Опубликовано 4 июня, 2015 · Жалоба Самое существенное отличие, что теперь GPIO не попадает в регион bitband. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
electrotehnik 0 4 июня, 2015 Опубликовано 4 июня, 2015 · Жалоба Самое существенное отличие, что теперь GPIO не попадает в регион bitband. Смотрел example на STM32F37x - там нет отличий по инициализации портов, все как Cortex-M4. Вообще уже не знаю что делать. Может кварцевый резонатор ерундить, если операции с чтением и записью прошивки проходят всегда успешно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tanya 4 4 июня, 2015 Опубликовано 4 июня, 2015 · Жалоба Смотрел example на STM32F37x - там нет отличий по инициализации портов, все как Cortex-M4. Вообще уже не знаю что делать. Может кварцевый резонатор ерундить, если операции с чтением и записью прошивки проходят всегда успешно? CUBE не пробовали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
electrotehnik 0 4 июня, 2015 Опубликовано 4 июня, 2015 · Жалоба CUBE не пробовали? Cube громоздкая тема. Но ради проверки работоспособности схемы попробовать можно.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
electrotehnik 0 18 июня, 2015 Опубликовано 18 июня, 2015 (изменено) · Жалоба Попробовал Cube - все заработало, схема значит рабочая. Но Cube использует HAL драйверы. Я же привык кодить на Standart Peripherial Library (SPL), судя по тому, что код рабочий, затык у меня в недоподключенной библиотеке SPL. Дерево файлов моего проекта (кроме всех файлов в папке MDS-ARM) можно посмотреть во вложении к этому посту. По непонятным для меня причинам код из первого поста заработал сам собой. По осциллографу заметил, что код-то заработал, да не на той частоте, на какой нужно. При этом работает только если подключать программатор SWD. Если подавать питание без подключенного программатора, то проц не исполняет код вообще. Сдается мне в тактировании проблема. CortexM4_F37x.zip Изменено 18 июня, 2015 пользователем electrotehnik Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 18 июня, 2015 Опубликовано 18 июня, 2015 · Жалоба Сдается мне в тактировании проблема. А, может, в сбросе? Вывод NRST. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
electrotehnik 0 18 июня, 2015 Опубликовано 18 июня, 2015 (изменено) · Жалоба Подскажите, пожалуйста, как узнать текущую частоту тактирования проца (где прочитать)? Вывод MCO конфигурировать не вариант, так как осциллограф максимум воспримет 30 МГц. Используются настройки SPL по умолчанию. Везде в статьях по STM32 пишут, что по умолчанию на шине APB1 тактовая частота 24МГц. Но мне удалось получить длину импульсов 1 секунда только когда поставил следующие значения в инициализации: void InitTimer(void) { TIM_TimeBaseInitTypeDef base_timer; TIM_TimeBaseStructInit(&base_timer); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); base_timer.TIM_Prescaler = 36000 - 1; base_timer.TIM_Period = 2000; TIM_TimeBaseInit(TIM6, &base_timer); TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE); TIM_Cmd(TIM6, ENABLE); NVIC_EnableIRQ(TIM6_DAC1_IRQn); } Изменено 18 июня, 2015 пользователем electrotehnik Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 5 18 июня, 2015 Опубликовано 18 июня, 2015 · Жалоба Подскажите, пожалуйста, как узнать текущую частоту тактирования проца (где прочитать)? Банальный ответ - отладчиком прочитать регистры тактирования (RCC_*), выписать на бумажку, и по reference manual'у разобрать их на битики. Вместе с тщательным курением этого мануала занимает полчаса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться