Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/34: Рейтинг темы: голосов - 34, средняя оценка - 4.85
4 / 4 / 1
Регистрация: 24.04.2022
Сообщений: 79

Структура GPIO_TypeDef для регистров. STM32

25.04.2022, 08:48. Показов 8061. Ответов 78
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Застрял на регистрах stm32.
Может кто нибудь подскажет?
Вопрос не в самих регистрах, а в языке Си.

Немного об устройстве регистров как я это вижу:
В файле stm32f10x.h находится структура:
C
1
2
3
4
5
6
7
8
9
10
 typedef struct
{
__IO uint32_t CRL;
  __IO uint32_t CRH;
  __IO uint32_t IDR;
   __IO uint32_t ODR;
  __IO uint32_t BSRR;
 __IO uint32_t BRR;
  __IO uint32_t LCKR;
 } GPIO_TypeDef
*Я эту структуру у себя не нашёл, так же как и этот файл.

Затем делаются указатели для каждого порта и регистров.
#define GPIOA ((GPIO_TypeDef*)0x48000);
Я думаю затем заполняется где то вся эта структура GPIO_TypeDef, но где я не нашёл.

Затем идёт настройка регистров
C
1
GPIOA->ODR |=1UL<<14;
------------------------------------------------
В принципе то что выше можно не учитывать, я пример упрощу.
У меня не получается заполнить структуру по указателю.
Visual Studio выдаёт ошибку. МК у меня ещё нет, тренируюсь на обычных IDE.

Этот способ является правильным для заполнения структуры?
C
1
2
3
4
5
6
7
8
  struct gpio
 {
int reg;
};
int main(void)
{
    ((struct gpio*)0x45000)->reg=1;
}
Если да, то как вывести, увидеть, проверить значение находящееся по адресу 0x45000? Не используя HEX код?
Так не получается
C
1
printf("%d\n", *((int*)0x45000));
И разве не надо прежде чем присваивать значение указателю, сначала присвоить этому указателю структурную переменную?
C
1
2
3
4
5
6
7
8
9
10
  struct gpio
 {
int reg;
} new_struct;
int main()
{
struct gpio *ptr;
ptr=&new_struct;
ptr->reg=1;
}
То есть разница. Здесь ((struct gpio*)0x45000)->reg=1; напрямую указателю присваивается.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.04.2022, 08:48
Ответы с готовыми решениями:

Структура регистров накоплений
Необходимо написать свою конфигурацию для учёта материалов и товаров Приход материалов регистрируется документом ПриходМатериалов ...

GPIO_TypeDef has no member named BSR
Пытаюсь работать с пинами на прямую. void AY_out (u8 op, u8 reg) { if (reg&amp;1) {GPIOA-&gt;BSRR = GPIO_Pin_11;} else...

Вывести состояние сегментных регистров и регистров флагов (ассемблерная вставка)
Вывести в консоль состояние сегментных регистров и регистров флагов. Добавлено через 9 минут unsigned long num; _asm { pushf...

78
 Аватар для COKPOWEHEU
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
30.04.2022, 09:03
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от getstm32 Посмотреть сообщение
Это странно, потому что написано 1 Килобайт.
И там действительно 1 кБ, но не памяти, а диапазона адресов.
Цитата Сообщение от getstm32 Посмотреть сообщение
Если речь бы шла о адресах, то указывалось бы в шестнадцатеричном виде 0х400
В шестнадцатеричном виде указывают абсолютные адреса, а не размер обычно.
Цитата Сообщение от getstm32 Посмотреть сообщение
Я же не покупаю жёсткий диск на 1 террабайт, а мне говорят:
Но вы покупаете флешку на 64 кБ, плюс оперативку на 20 кБ плюс логику, арифметику и периферию, которые тоже как-то там отображаются на память. Никто вам не обещал флешку на 4 ГБ.
Цитата Сообщение от getstm32 Посмотреть сообщение
В некоторых datasheet есть register map, но тоже без адресов, только смещение.
Базовый адрес в начале описания регистров. Или в memory map'е, которую вы уже находили.
А что на счет "дырок" - никто не обещал их наличия, никто не обещал их отсутствия. Производитель располагает регистры по свободным адресам так, как сам хочет. Хоть кубик подбрасывает.
0
4 / 4 / 1
Регистрация: 24.04.2022
Сообщений: 79
30.04.2022, 09:46  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
В шестнадцатеричном виде указывают абсолютные адреса, а не размер обычно.
Ок, но вводит в заблуждение.
Миниатюры
Структура GPIO_TypeDef для регистров. STM32  
0
 Аватар для COKPOWEHEU
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
30.04.2022, 11:07
У вас на скриншоте ошибка: красная надпись должна быть "абсолютный адрес в hex цифре". 0x4000`0000 это именно абсолютный адрес, а не размер. Отсюда непонятно что именно вас вводит в заблуждение.
1
4 / 4 / 1
Регистрация: 24.04.2022
Сообщений: 79
30.04.2022, 12:43  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
У вас на скриншоте ошибка: красная надпись должна быть "абсолютный адрес в hex цифре".
Да, точно))
0
4 / 4 / 1
Регистрация: 24.04.2022
Сообщений: 79
02.05.2022, 08:16  [ТС]
Что он здесь имеет в виду? https://youtu.be/Un7ryDTu5VU?t=124
0x23FFFFFF-0x22000000==1FFFFFF==33 554 431
33 554 431/1 048 576=32 Мегабайт
Байт на слово, а не бит на слово.
Один адрес==один Байт.

Где то число, от которого в 32 раза больше?
бит на слово было бы столько Байт:33 554 431/8==4 194 303
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
02.05.2022, 09:17
Цитата Сообщение от getstm32 Посмотреть сообщение
Что он здесь имеет в виду?
а кто его знает
читать нужно все таки даташиты, а не интерпретаторов
хороших популязитаров очень мало, куча пользуется таким приемом "Это всем понятно", "после очевидных преобразований",...
Даже у Мартина(Мартин М. "Инсайдерское руководство по STM32") полно таких пассажей
0
 Аватар для COKPOWEHEU
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
02.05.2022, 09:18
Цитата Сообщение от getstm32 Посмотреть сообщение
Что он здесь имеет в виду? https://youtu.be/Un7ryDTu5VU?t=124
Вы что, пытаете учиться по мультикам? Даже смотреть не буду.
Программирование МК STM32. Урок 200. CMSIS. Bit banding
bitband это очень узкоспецифичная штука, которая к тому же не во всех контроллерах есть. Пока не возникнет острая необходимость заниматься многопоточностью и атомарным доступом, не тратьте время.
0
4 / 4 / 1
Регистрация: 24.04.2022
Сообщений: 79
02.05.2022, 11:05  [ТС]
А, кажется понял.
Есть области памяти где слово составляет не один Байт, а один бит.
То есть один адрес==один бит.
Один Байт например проецируется(дублируется) на Bit banding область памяти и из этого одного Байта получается 8 адресов.

Только непонятно почему в 32 раза больше. Из одного мегабайта должно получиться ведь 8 388 608 бит, а значит столько же адресов.

Это может быть в том случае если слово составляет не 1 Байт, а 4 Байта.
Слово в stm32 составляет 4 Байта что ли?
То есть один адрес==4 Байта.
0
Эксперт по электронике
7199 / 3376 / 346
Регистрация: 28.10.2011
Сообщений: 13,289
Записей в блоге: 7
02.05.2022, 11:18
Цитата Сообщение от getstm32 Посмотреть сообщение
Только непонятно почему в 32 раза больше.
Разрядность шины данных в ARM какая?
Читайте даташиты, а не смотрите видео таких же учеников как вы. Не факт что они правильно рассуждают.
0
4 / 4 / 1
Регистрация: 24.04.2022
Сообщений: 79
02.05.2022, 11:19  [ТС]
Тогда это не сопоставляется со смещением регистров.
Смещение между регистрами 4 адреса и занимают они 4 адреса.
Это должно быть 1 адрес на Байт.
0
Эксперт по электронике
7199 / 3376 / 346
Регистрация: 28.10.2011
Сообщений: 13,289
Записей в блоге: 7
02.05.2022, 11:20
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
необходимость заниматься многопоточностью
Прерывания можно сравнить с многопоточностью, тем более что STM32 поддерживает вложенные прерывания.
0
4 / 4 / 1
Регистрация: 24.04.2022
Сообщений: 79
02.05.2022, 11:23  [ТС]
Мне с основами надо разобраться. Дальше сам конечно рассуждать смогу.
Противоречивые вещи встречаются. Везде я информацию ищу.
Что это мне скажет если 32 разрядная шина, а регистры занимают 4 Байта по адресу на Байт.
Структура GPIO_TypeDef для регистров. STM32
0
Эксперт по электронике
7199 / 3376 / 346
Регистрация: 28.10.2011
Сообщений: 13,289
Записей в блоге: 7
02.05.2022, 11:30
Цитата Сообщение от getstm32 Посмотреть сообщение
регистры занимают 4 Байта по адресу на Байт.
4 байта в одном байте?
Понимаете что такого не может быть?
Вот парочка статей про Bit Banding https://habr.com/ru/post/454408/
http://we.easyelectronics.ru/S... nding.html
http://www.gaw.ru/html.cgi/txt... /2_3_7.htm
http://digitrode.ru/computing-... stm32.html
0
4 / 4 / 1
Регистрация: 24.04.2022
Сообщений: 79
02.05.2022, 11:35  [ТС]
Цитата Сообщение от locm Посмотреть сообщение
4 байта в одном байте?
Цитата Сообщение от locm Посмотреть сообщение
по адресу на Байт.
Один Байт==Один адрес
А в видео похоже на то что Один адрес==4 Байта
У меня гугл есть
0
 Аватар для COKPOWEHEU
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
02.05.2022, 11:45
Цитата Сообщение от locm Посмотреть сообщение
Прерывания можно сравнить с многопоточностью, тем более что STM32 поддерживает вложенные прерывания.
Конечно. Но обычно весьма ограниченной. Соответственно, и необходимости в экзотике вроде bitband в прерываниях почти никогда нет.
Цитата Сообщение от getstm32 Посмотреть сообщение
Мне с основами надо разобраться. Дальше сам конечно рассуждать смогу.
Вот и не отвлекайтесь на ерунду. bitband вам пока не нужен. И сомневаюсь, что хоть когда-нибудь понадобится. Мне вот не пригодился ни разу.
0
Эксперт по электронике
7199 / 3376 / 346
Регистрация: 28.10.2011
Сообщений: 13,289
Записей в блоге: 7
02.05.2022, 11:52
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Конечно. Но обычно весьма ограниченной. Соответственно, и необходимости в экзотике вроде bitband в прерываниях почти никогда нет.
Основной код может быть прерван в любой момент, например во время модификации бита в переменной или регистре (чтение/модификация/запись). Если прерывание будет модифицировать биты в тех же переменных/регистрах, это приведет к ошибке.
0
4 / 4 / 1
Регистрация: 24.04.2022
Сообщений: 79
02.05.2022, 12:29  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Вот и не отвлекайтесь на ерунду.
В stm32 под одним адресом сколько Байт сохранено?)
Видел и читал я по разному.
В STM32CubeProgrammer 16 Бит на адрес, шина 32 битная, а регистры 1 Адрес==один Байт.

ps если что, я случайно кликнул на лучший ответ))
0
 Аватар для COKPOWEHEU
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
02.05.2022, 12:46
Цитата Сообщение от locm Посмотреть сообщение
Основной код может быть прерван в любой момент, например во время модификации бита в переменной или регистре (чтение/модификация/запись). Если прерывание будет модифицировать биты в тех же переменных/регистрах, это приведет к ошибке.
Значит, не надо модифицировать эти биты, очевидно же. Для чего конкретно вам это может понадобиться? И что еще важнее, для чего конкретно bitband в случае прерываний оказывается лучше обычных способов?
Цитата Сообщение от getstm32 Посмотреть сообщение
В stm32 под одним адресом сколько Байт сохранено?)
Обычно один.
Другое дело, что контроллер может за раз (за одну инструкцию) прочитать 1-4 байта по 1-4 последовательным адресам.
И третье дело, что иногда в контроллерах встречается периферия со своим размером ячейки. Скажем, по последовательным адресам могут находиться 32-битные регистры. Но это редкость и это надо смотреть на конкретную периферию.
1
4 / 4 / 1
Регистрация: 24.04.2022
Сообщений: 79
02.05.2022, 13:42  [ТС]
Вот например не про чтение, а именно про запись во флеш.
4 Байта на адрес.
https://blog.avislab.com/stm32-flash_ru/
Писать во Flash надо словами по 32 бита.
0
Эксперт по электронике
7199 / 3376 / 346
Регистрация: 28.10.2011
Сообщений: 13,289
Записей в блоге: 7
02.05.2022, 13:56
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Значит, не надо модифицировать эти биты, очевидно же.
Не нужно модифицировать биты регистров? Ну-ну...
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
И что еще важнее, для чего конкретно bitband в случае прерываний оказывается лучше обычных способов?
Атомарность, а не чтение/модификация/запись.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.05.2022, 13:56

Сложить содержание регистров R1 и R4 текущего банка регистров и отразить результат на статическом индикаторе
Сложить содержание регистров R1 и R4 текущего банка регистров и отразить результат на статическом индикаторе. ORG 0 mov...

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

Структура таблицы для ввода номенклатуры в БД Аксесс 2003+ структура изделия
Доброго времени суток форумчане! Продолжаю писать свою самоделку, возник вопрос: Номенклатуру в БД надо вводить в одно поле (...

Конфигурация регистров для использования внешнего clock для таймера
Добрый день. N-ое количество дней уже не могу правильно сконфигурировать схему с подсчетом импульсов. Имеется мастер таймер, каждую секунду...

структура array предназначена для хранения строки типа char. Структура имеет функцию, которая позволяет изменить символ
структура array предназначена для хранения строки типа char. Структура имеет функцию, которая позволяет изменить символ с указанным...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru