|
|
  |
STM32F373 GPIO, GPIO не работает |
|
|
|
Jun 4 2015, 07:57
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 26-09-14
Пользователь №: 82 927

|
Добрый день Не работают 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.
|
|
|
|
|
Jun 4 2015, 12:12
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 26-09-14
Пользователь №: 82 927

|
Цитата(adnega @ Jun 4 2015, 08:34)  Самое существенное отличие, что теперь GPIO не попадает в регион bitband. Смотрел example на STM32F37x - там нет отличий по инициализации портов, все как Cortex-M4. Вообще уже не знаю что делать. Может кварцевый резонатор ерундить, если операции с чтением и записью прошивки проходят всегда успешно?
|
|
|
|
|
Jun 4 2015, 13:19
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 26-09-14
Пользователь №: 82 927

|
Цитата(Tanya @ Jun 4 2015, 12:47)  CUBE не пробовали? Cube громоздкая тема. Но ради проверки работоспособности схемы попробовать можно..
|
|
|
|
|
Jun 18 2015, 10:06
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 26-09-14
Пользователь №: 82 927

|
Попробовал Cube - все заработало, схема значит рабочая. Но Cube использует HAL драйверы. Я же привык кодить на Standart Peripherial Library (SPL), судя по тому, что код рабочий, затык у меня в недоподключенной библиотеке SPL. Дерево файлов моего проекта (кроме всех файлов в папке MDS-ARM) можно посмотреть во вложении к этому посту. По непонятным для меня причинам код из первого поста заработал сам собой.  По осциллографу заметил, что код-то заработал, да не на той частоте, на какой нужно. При этом работает только если подключать программатор SWD. Если подавать питание без подключенного программатора, то проц не исполняет код вообще. Сдается мне в тактировании проблема.
Сообщение отредактировал electrotehnik - Jun 18 2015, 09:24
|
|
|
|
|
Jun 18 2015, 11:43
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 26-09-14
Пользователь №: 82 927

|
Подскажите, пожалуйста, как узнать текущую частоту тактирования проца (где прочитать)? Вывод 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); }
Сообщение отредактировал electrotehnik - Jun 18 2015, 11:44
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|