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

Вопросы По Регистрам Gpio


FrostedVic

Рекомендуемые сообщения

Здравствуйте уважаемые форумчане.

Начал изучение stm32f4, имея на руках платку discovery.

Решил помигать диодиками. В процессе изучения Reference manual и ознакомления с заголовочным файлом stm32f4xx.h появились вопросы.

1. В заголовочных файлах есть описания регистров BSRRL и BSRRH один регистр GPIO port bit set/reset low register другой GPIO port bit set/reset high register. Прошу пояснения в чем разница между ними?

2. Так же в том же файле есть описания

#define GPIO_MODER_MODER0 ((uint32_t)0x00000003)

#define GPIO_MODER_MODER0_0 ((uint32_t)0x00000001)

#define GPIO_MODER_MODER0_1 ((uint32_t)0x00000002)

И так на каждую лини по три таких строчки

MODER -это регистр установки линии порта на вход выход, аналоговый сигнал или режим альтернативного функционирования. Вот и возник вопрос почему режима четыре, а строчки три? Или я чего-то не понял?

А еще совсем нубский вопрос касающийся шестнадцатиричных чисел. И записи в регистр какого-либо значения.

Допустим есть регистр MODER. Чтобы проинициализировать каждый вывод регистра надо 2 бита. 16 линий => 32 бита надо установить. Пусть 15, 14, 13, 12 линии я конфигурирую как 01, значит в регистр я должен записать 01010101000000000000000000000000 (это двоичная система-верно? ноль вначале можно откинуть?). Теперь к вопросу. Я в примерах встречал что эта запись аналогична записи в 16х системе 0х55000000 собственно как это получается? И почему у меня в наглую не получилось записать в регистр MODER двоичное число? Спасибо за ответ

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

1.Не знаю где вы это нашли, но у f407 всего один регистр вида BSRR - GPIOx_BSRR.

2. Выбор режима осуществляется записью номера режима в двоичном виде в MODERx. Всего режимов 4.

Первый дефайн позволяет произвести запись сразу обеих бит MODER. Два остальных позволяют устанавливать/сбрасывать биты по отдельности.

3. Гугл в помощь. Информации по переводу чисел из двоичной системы в шестнадцатеричную навалом.

По не возможности записать значения в регистр по подробнее, как записываетет, что происходит при выполнении кода.

И вообще почитайте Reference manual на данный МК, многоие вопросы сразу отпадут.

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

1.Не знаю где вы это нашли, но у f407 всего один регистр вида BSRR - GPIOx_BSRR.

2. Выбор режима осуществляется записью номера режима в двоичном виде в MODERx. Всего режимов 4.

Первый дефайн позволяет произвести запись сразу обеих бит MODER. Два остальных позволяют устанавливать/сбрасывать биты по отдельности.

3. Гугл в помощь. Информации по переводу чисел из двоичной системы в шестнадцатеричную навалом.

По не возможности записать значения в регистр по подробнее, как записываетет, что происходит при выполнении кода.

И вообще почитайте Reference manual на данный МК, многоие вопросы сразу отпадут.

1. Это найдено в заголовочном файле)

2. То есть для нулевого состояния константы просто нет?

3. Ну вопрос скорее не в переводе из одной системы в другую, а в применимости этого перевода при установке регистров.

По невозможности установки двоичного значения, я предполагаю, что компилятор воспринимает мое двоичное число как int причем очень большое и вылезающее за рамки инта. Видимо должна быть какая-то правильная форма записи двоичных чисел. Пробовал 0bxxxxxxxxxxx... ругается на отсутствие ; после перед b

Так вот при прочтении мануала и сопоставлении его с заголовочными файлами и возникли вопросы)))

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

1. Посмотрел главный хидер. Действительно эти дефайны там есть. Первый отвечает за первые 16 бит регистра - биты установки, оставшиеся 16 - за сброс.

2. Констант для установки отдельных режимов вообще нет.. Есть 2 бита MODER регистра, которые дадут четыре возможные комбинации - 00, 01, 10, 11. Режимов работы порта тоже 4. Нулевая комбинация 00.

3. В какой среде код пишете? Keil абсолютно адекватно воспринял запись в регистр числа в hex коде. Бинарный код не пробовал. И за одно текст программы приведите.

Изменено пользователем Вуйко
Ссылка на комментарий
Поделиться на другие сайты

Пишу в IAR

Код программы:

#include "stm32f4xx.h"
void sysDelay(uint32_t delay)
{
 for (int i = 0; i < delay; i++);
}
int main()
{
 RCC->AHB1ENR = RCC_AHB1ENR_GPIODEN;//RCC -название модуля; AHB1ENR -название регистра; GPIODEN -устанавливаемый бит

 /*---Конфигурируем GPIO порт D---*/
 GPIOD->MODER =0x55000000;/*Регистр установки режима порта вход/выхода для 12, 13, 14, 15 линий порта D
 0x55000000 это шестнадцатеричное представление числа 010101010000000000000000000000,
 где 01 -конфигурация регистра MODER на выход.
 0101 в двоичной системе = 5 в шестнадцатиричной*/
 GPIOD->OTYPER |= 0x82;// Регистр установки режима порта с подтяжкой или открытым коллектором
 volatile uint32_t j = GPIOD->OTYPER;
 GPIOD->OSPEEDR = 0; //Регистр установки скорости работы порта
 while(1)
 {

   GPIOD->BSRRL |= ( 1 << 12 );//Устанавливаем высокий уровень на 12-й линии
   sysDelay(500000);//устанавливаем задержку
   GPIOD->BSRRL |= ( 1 << 13 );//Устанавливаем высокий уровень на 13-й линии
   sysDelay(500000);
   GPIOD->BSRRL |= ( 1 << 14 );//Устанавливаем высокий уровень на 14-й линии
   sysDelay(500000);
   GPIOD->BSRRL |= ( 1 << 15 );//Устанавливаем высокий уровень на 15-й линии
   sysDelay(500000);
   GPIOD->BSRRH = GPIO_BSRR_BS_12;//Устанавливаем внизкий уровень на 12-й линии
   sysDelay(500000);
   GPIOD->BSRRH = GPIO_BSRR_BS_13;//Устанавливаем внизкий уровень на 13-й линии
   sysDelay(500000);
   GPIOD->BSRRH = GPIO_BSRR_BS_14;//Устанавливаем внизкий уровень на 14-й линии
   sysDelay(500000);
   GPIOD->BSRRH = GPIO_BSRR_BS_15;//Устанавливаем внизкий уровень на 15-й линии

 }
}

А не могли бы вы на примере пояснить как тогда устанавливать MODER с помощью этих бит (MODER0_0 и т.д.), что-то я не совсем понимаю.

Спасибо

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

Установка производится следующим образом.

Например необходимо установить режим 01(выход общего назначения) на вывод 7. После сброса МК все биты MODER регистра установлены в 0.

Для выбора режима 01 необходимо установить бит MODER7_0 в 1, а MODER7_1 в 0, тоесть код настройки будет иметь только одну строку:

GPIOD->MODER |= GPIO_MODER7_0;

Если же нужен режим 11, то код будет похожим, но устанавливаем оба бита:

GPIOD->MODER |= GPIO_MODER7_0;
GPIOD->MODER |= GPIO_MODER7_1;

По коду могу сказать следующее:

1. Запись числа непосредственно в регистр так и производится.

2. Настройка режима порта(открытый сток/пуш-пулл) в данном случае не нужна, можно оставить значения по умолчанию.

3. Запись нуля в регистр скорости работы порта также не нужна. Там и так нули по умолчанию.

4 .Сброс пинов работать не будет. Сбрасывать нужно либо так:

GPIOD->BSRRH |= ( 1 << 12 )

либо так:

GPIOD->BSRRH = GPIO_BSRR_BR_12;

Изменено пользователем Вуйко
Ссылка на комментарий
Поделиться на другие сайты

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

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

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...