Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/94: Рейтинг темы: голосов - 94, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 12.06.2015
Сообщений: 10

Режимы портов в STM32

18.02.2012, 18:08. Показов 18576. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые форумчане, начал изучение АРМ контроллеров и возник вопрос по поводу конфигурации портов.
До этого более или мение програмил АВРки и такуих вопросов какбы не возникало изза отсуствия такого широкого конфигурирования.
Дело вот в чем, почитал я пост Ди ARM. Учебный Курс. Порты GPIO вроде все ясно, но при практической попытке сделать чтото под свои нужды (в учебных целях) запутался в 3х соснах, а точнее в 7ми :))
Мог бы мне кто то на пальцах показать/рассказать как и для чего нужны данные режимы портов и что они вообще все значат (что это за подтяжки итд):

- Вход Hi-Z
- Вход с подтяжкой вверх
- Вход с подтяжкой вниз
- Аналоговый вход (для каналов АЦП)
- Выход с открытым коллектором (стоком, если быть точным)
- Выход тяни-толкай (push-pull)
- И альтернативные функции, т.е. работа от периферии. Тут у нас формируется выход вида вида тяни-толкай или открытый коллектор.

Заранее извиняюсь за такие глупые вопросы, гугл мне не смог помочь
Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.02.2012, 18:08
Ответы с готовыми решениями:

Режимы индикации или разные режимы работы светодиода
Добрый день! Помогите пожалуйста с задачей. Микроконтроллер attiny13a Необходимо реализовать разные режимы работы светодиода в...

Настройка портов роутера. Открытие портов и чем это чревато
Здравствуйте, я хотел бы проконсультироваться по такому вопросу. Я в администрировании полнейший ноль, но такая ситуация. Я пишу...

Общение с барометром MS5540 на STM32 (Arduino to STM32)
Получил от китайца сей аппарат, пошел тут же гуглить что нибудь готовое, но не тут то было. Информации по нем очень мало, даже на Arduino...

12
1 / 1 / 0
Регистрация: 03.02.2011
Сообщений: 382
18.02.2012, 19:14
"Hi-Z" -- высокоомное состояние, оно же, Z - состояние, оно же 3-е состояние -- выход болтается в воздухе, необходимо, например, если необходимо объединить ВЫХОДЫ микроконтроллера и ВЫХОДЫ другого устройства, без коллизий.

"- Выход с открытым коллектором (стоком, если быть точным)" -- выход или подключен к "0" или в воздухе болтается (например, для внешней подтяжки вверх)

"- Выход тяни-толкай (push-pull)" -- двухтактный выход, полноценный выход или "0" или "1"

"- Вход с подтяжкой вверх" -- на входе стоит резистор на "+", состояние по умолчанию (если на вход ничего не подано) будет "1"

"- Вход с подтяжкой вниз" -- на входе стоит резистор на "землю", состояние по умолчанию (если на вход ничего не подано) будет "0"
0
0 / 0 / 0
Регистрация: 12.06.2015
Сообщений: 10
18.02.2012, 20:28
Сразу хочу задать пару вопросов:
Вход с подтяжкой вверх/вниз - тут чтоб каклибо задействовать вход надо прижать к земле (вверх) или к питанию(вниз), например кнопкой к земле ???

HiZ я так и непонял :)) но думаю щас он мне сильно и не пригодится

и порты (выходные) выдаю 3.3v ???
0
0 / 0 / 0
Регистрация: 01.02.2011
Сообщений: 300
18.02.2012, 20:59
[quote="Romdo"]Вход с подтяжкой вверх/вниз - тут чтоб каклибо задействовать вход надо прижать к земле (вверх) или к питанию(вниз), например кнопкой к земле ???
quote]
Можно для этого, если хватит сопротивления подтяжки.
Hi-z вход без подтяжек. Если такой вход подключать к выходу с push-pul, то нет смысла вводить подтяжку.
Выход push-pul, это выход с двумя устойчивыми состояниями.
0
0 / 0 / 0
Регистрация: 09.05.2011
Сообщений: 132
18.02.2012, 21:03
тут чтоб каклибо задействовать вход
не совсем понял что имелось в виду, но если вы хотите использовать кнопку, то да, можете, например, повесиь ее на общий, а пин подтянуть к питалову. тоже самое есть и у AVR, такие же внутренние подтягивающие резисторы.

и порты (выходные) выдаю 3.3v
смотря какое напряжение питания, но номинально да, 3.3В. пять вольт, если вы к ним привыкли, конечно не увидите
0
1 / 1 / 0
Регистрация: 03.02.2011
Сообщений: 382
18.02.2012, 21:39
Из STM32F10x_ref_manual стр.74 рисунок 9, позволил себе чуть дорисовать.
Имеется на входе два отключаемых резистора R1, R2,
На выходе есть 2 транзистора VT1, VT2,
На рисунке я его показал крестом ключ (для наглядности) S1.

Рассмотрим входную цепь "INPUT DRIVER"
Итак каждый резистор R1 и R2 отключаемый (имеет последовательно включенный ключ).
Если замкнут ключ в цепи R1, то получиться "- Вход с подтяжкой вверх", если в цепи R2 "- Вход с подтяжкой вниз".
если оба ключа разомкнуты, то получиться плавающий вход "Input Ftooting".
т.е. если нужна кнопка, по настраиваем "- Вход с подтяжкой вверх" и цепляем кнопку от порта на землю. кнопка не нажата - на порту будет "1", нажата -"0".
или наоборот настраиваем "- Вход с подтяжкой вниз" и цепляем кнопку от порта на "+Uп" кнопка не нажата - на порту будет "0", нажата -"1".
В режиме "Input Ftooting" если хочешь кнопку, то надо внешний резистор ставить.

Выход "OUTPUT DRIVER"
Ключ S1 замкнут.
Если транзисторы VT1 и VT2 работают в противофазе то будет режим "- Выход тяни-толкай (push-pull)"
если VT1 отключен, а VT2 работает и резисторы R1, R2 отключены, -- получаем режим "- Выход с открытым коллектором (стоком, если быть точным)"

Если Ключ S1 разомкнуть, резисторы отключить, т.е. выход будет "оторван" от всех цепей получиться режим "Выход с третьим состоянием"

0
0 / 0 / 0
Регистрация: 12.06.2015
Сообщений: 10
18.02.2012, 22:56
judshym огого, спасибо что так детально разжевал :) многое понял
А для чего вообще нужен Hi-Z режим ?
как Вы писали выше
"необходимо, например, если необходимо объединить ВЫХОДЫ микроконтроллера и ВЫХОДЫ другого устройства, без коллизий."
но я не очень понял =\
0
0 / 0 / 0
Регистрация: 09.05.2011
Сообщений: 132
18.02.2012, 23:28
Почитайте это. Там есть про HI-Z и многое другое + куча веселых картинок.
0
0 / 0 / 0
Регистрация: 12.06.2015
Сообщений: 10
20.02.2012, 21:39
С Hi-Z вроде разобрался
Теперь если не сложно объясните КАК происходит это конфигурирование ?? =\
Вот кусочек кода из Keil который выкладывал Ди:
Code
1
2
3
4
5
6
7
8
9
// Выставляем тактирование в APB2
RCC->APB2ENR    |= RCC_APB2ENR_IOPBEN;
 
// Конфигурируем CRL регистры.
GPIOB->CRL   &= ~GPIO_CRL_CNF5;   // Сбрасываем биты CNF для бита 5. Режим 00 - Push-Pull
GPIOB->CRL    |= GPIO_CRL_MODE5_0;   // Выставляем бит MODE0 для пятого пина. Режим MODE01 = Max Speed 10MHz
 
GPIOB->BSRR = GPIO_BSRR_BR5;      // Сбросили бит.
GPIOB->BSRR = GPIO_BSRR_BS5;      // Установили бит.
А вот и пару вопросов ... а точнее один и большой :)

Строки конфигурирования CRL регистров
Code
1
2
GPIOB->CRL   &= ~GPIO_CRL_CNF5;   // Сбрасываем биты CNF для бита 5. Режим 00 - Push-Pull
GPIOB->CRL    |= GPIO_CRL_MODE5_0;   // Выставляем бит MODE0 для пятого пина. Режим MODE01 = Max Speed
тут как я понял связка "&= ~" делает сброс регистра, а "|=" - выставляет.
НО ... не понял как происходит это выставление.
В фрагменте строки "GPIO_CRL_CNF5" мы сбрасываем в 00 (это вроде понятно и режим Push-Pull тоже) но как установить режимы 01, 10, 11 согласно таблице

<Изображение удалено>

Тоже самое по поводу установки скорости порта, объясните КАК происходит эта установка режимов ???
В АВР все было просто (на примере ДДРх, просто выставлял 0 и 1 в нужном количестве).

И еще заметил что у ВХОДа и ВЫХОДа портов согласно картинке одинаковые комбинации (00, 01, 10) но бит "MODE[1:0] 00" выставляет порт на вход, если не прав поправьте меня :)

Заранее спасибо ! :)
0
0 / 0 / 0
Регистрация: 09.05.2011
Сообщений: 132
20.02.2012, 21:58
в файле "stm32f10x.h" прописаны макросы для всей переферии. Например, GPIO_CRL_CNF5 соответствует 0x00C00000 или в двоичной 0b0000 0000 1100 0000 0000 0000 0000 0000. Т.е можно видеть, что при логическом сложении (символ |) с каким либо значением в регистре вы установите эти два бита в регистре. Положение этих двух единиц в GPIO_CRL_CNF5 соответствует положению битов CNF5[1:0] в регистре CRL. Для работы только с одним битом (либо 0 либо 1) блока CNF5 есть макросы GPIO_CRL_CNF5_0 для бита ноль и GPIO_CRL_CNF5_1 для бита 1. С остальными регистрами все точно так же.
0
0 / 0 / 0
Регистрация: 12.06.2015
Сообщений: 10
20.02.2012, 23:35
Итак, покопался я по файлу "stm32f10x.h" - свалка еще та :)

нашел нужные "кусочки" из примера на мигание диодом, но и тут опять в замешательстве =\ (у меня STM32VL Dyscovery, и диоды на 8м и 9м порту С)

Code
1
2
3
#define  GPIO_CRH_MODE8                      ((uint32_t)0x00000003)        /*!< MODE8[1:0] bits (Port x mode bits, pin 8) */
#define  GPIO_CRH_MODE8_0                    ((uint32_t)0x00000001)        /*!< Byt 0 */
#define  GPIO_CRH_MODE8_1                    ((uint32_t)0x00000002)        /*!< Byt 1 */
Если (!) я все правильно понял ... то все это работает примерно так ...
Code
1
2
3
4
5
6
GPIOC -> CRH &= ~(GPIO_CRH_CNF8 | GPIO_CRH_MODE8)           //сбрасываем все 2 бита 8й ноги порта С и MODE биты
(возможно не обязательно)
GPIOC -> CRH |= GPIO_CRH_CNF8_0                                        //устанавливаем бит 0 (CNF0 согласно  таблице) и
получаем общий вид 01, что соответствует "Открытый
коллектор" обычного порта
GPIOC -> CRH |= GPIO_CRH_MODE8_1                                     //что соответствует выходу с макс частотой 2МГц
т.е. получили Открытый коллектор, в режиме выход с макс частотой 2 МГц.

Если есть какие то замечания или ошибки - пишите.
Спасибо.
0
0 / 0 / 0
Регистрация: 09.05.2011
Сообщений: 132
21.02.2012, 00:06
Похоже на правду
0
k0dir
30.08.2014, 20:24
Вход Hi-Z — режим высокоимпендансного входа.
Этот режим включен по умолчанию. Все вентили разомкнуты, а сопротивление порта очень велико.
а какое значение этого сопротивления никто не видел?
если я цепляючерез резистор 10к 9В, то в точке соединения 4.5
при том что внутрення подтяжка 40 кОм, следовательно Hi-Z должно быть гораздо выше
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.08.2014, 20:24
Помогаю со студенческими работами здесь

Чем связать STM32 + STM32 в одном корпусе?
Есть 2 платы: (1) - STM32 (Вывод на LCD + запись SD) и (2) - STM32F4 (обработка сигналов + коммуникация с датчиками). Чем связать данные...

Режимы
Здравствуйте. Возникла проблема с режимом выбора. В чем может быть проблема? void main() { bit isClick; int regim; int...

Режимы работы
какие возможны режимы работы apache?

glut режимы
вобщем проблема состоит в том что при режиме с двойной буферизацией не хочет ничего прорисовывать , хотя с одинарным все норм ( вобщем то я...

режимы энергосбережения
Здравствуйте! Подскажите какие режимы энергосбережения существуют у современных хардов? Существует ли такой режим при котором, в отсутствии...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru