Перейти к содержанию
    

STM32F373 GPIO

Добрый день

 

Не работают 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Самое существенное отличие, что теперь GPIO не попадает в регион bitband.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Самое существенное отличие, что теперь GPIO не попадает в регион bitband.

 

Смотрел example на STM32F37x - там нет отличий по инициализации портов, все как Cortex-M4. Вообще уже не знаю что делать.

Может кварцевый резонатор ерундить, если операции с чтением и записью прошивки проходят всегда успешно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Смотрел example на STM32F37x - там нет отличий по инициализации портов, все как Cortex-M4. Вообще уже не знаю что делать.

Может кварцевый резонатор ерундить, если операции с чтением и записью прошивки проходят всегда успешно?

CUBE не пробовали?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

CUBE не пробовали?

 

Cube громоздкая тема. Но ради проверки работоспособности схемы попробовать можно..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробовал Cube - все заработало, схема значит рабочая. Но Cube использует HAL драйверы.

Я же привык кодить на Standart Peripherial Library (SPL), судя по тому, что код рабочий, затык у меня в недоподключенной библиотеке SPL.

Дерево файлов моего проекта (кроме всех файлов в папке MDS-ARM) можно посмотреть во вложении к этому посту.

 

 

 

 

По непонятным для меня причинам код из первого поста заработал сам собой. :wacko:

 

По осциллографу заметил, что код-то заработал, да не на той частоте, на какой нужно.

При этом работает только если подключать программатор SWD. Если подавать питание без подключенного программатора, то проц не исполняет код вообще. Сдается мне в тактировании проблема.

CortexM4_F37x.zip

Изменено пользователем electrotehnik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сдается мне в тактировании проблема.

А, может, в сбросе? Вывод NRST.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите, пожалуйста, как узнать текущую частоту тактирования проца (где прочитать)? Вывод 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите, пожалуйста, как узнать текущую частоту тактирования проца (где прочитать)?

 

Банальный ответ - отладчиком прочитать регистры тактирования (RCC_*), выписать на бумажку, и по reference manual'у разобрать их на битики. Вместе с тщательным курением этого мануала занимает полчаса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...