Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 21.06.2014, 17:59  
RA3PKJ
Прохожий
 
Регистрация: 04.03.2009
Сообщений: 9
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
RA3PKJ на пути к лучшему
По умолчанию stm32 как читать байт из порта?

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

btn1 = GPIO_ReadInputDataBit(BTN_PORT, BTN1_PIN)

А если надо прочитать один байт с порта, т.е. сразу с восьми ножек, расположенных одна за другой, например PA0...PA7 или PA8...PA15
Как?
Реклама:
RA3PKJ вне форума  
Непрочитано 21.06.2014, 18:14  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: stm32 как читать байт из порта?

Читают регистр IDR

Его долго искать не нужно, достаточно всего лишь решиться скачать даташит на чип
niXto вне форума  
Непрочитано 21.06.2014, 18:46  
RA3PKJ
Прохожий
 
Регистрация: 04.03.2009
Сообщений: 9
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
RA3PKJ на пути к лучшему
По умолчанию Re: stm32 как читать байт из порта?

Спасибо, понял. Сразу в голову не пришло.
RA3PKJ вне форума  
Непрочитано 21.06.2014, 18:57  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: stm32 как читать байт из порта?

Если нужно прочитать меньше 16 бит - добавляют логическое И с маской для заполнения незначащих битов нулями, или логическое ИЛИ - для заполнения единицами (в зависимости от логики обработки). Например, если нужно прочитать 8 младших бит и заполнить старшие 8 бит нулями (в не зависимости от их реального состояния), то используют команду например

byte = GPIOA-›IDR & 0x00FF;
niXto вне форума  
Непрочитано 21.06.2014, 19:38  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: stm32 как читать байт из порта?

А чем отличается
byte = GPIOA-›IDR & 0x00FF; от byte = GPIOA-›IDR; ?

кроме лишних операций ?
Boba_spb вне форума  
Непрочитано 21.06.2014, 19:53  
mrKirill
Вид на жительство
 
Аватар для mrKirill
 
Регистрация: 12.04.2007
Сообщений: 348
Сказал спасибо: 2
Сказали Спасибо 36 раз(а) в 32 сообщении(ях)
mrKirill на пути к лучшему
По умолчанию Re: stm32 как читать байт из порта?

Сообщение от RA3PKJ Посмотреть сообщение
Вопрос от чайника, поседевшего на ниве электроники. Извиняюсь за возможно глупый вопрос. Убил несколько часов на поиски.
Известно, что прочитать один бит с ножки делают так:

btn1 = GPIO_ReadInputDataBit(BTN_PORT, BTN1_PIN)

А если надо прочитать один байт с порта, т.е. сразу с восьми ножек, расположенных одна за другой, например PA0...PA7 или PA8...PA15
Как?

Ну раз Вы используете стандартную библиотеку, то в ней же кроме GPIO_ReadInputDataBit(BTN_PORT, BTN1_PIN) есть еще и GPIO_ReadInputData(GPIOx), как раз для чтения всего порта, потом наложить маску и будет то что доктор прописал.

Если по честному, то оно же и есть "GPIOx-›IDR", только за красивой оболочкой библиотеки.

Сообщение от Boba_spb Посмотреть сообщение
А чем отличается
byte = GPIOA-›IDR & 0x00FF; от byte = GPIOA-›IDR; ?

кроме лишних операций ?

Вообще-то "0x00FF" это маска и результат в одном и другом случае не будет одинаковым.
Кроме того битность разная.
__________________
Гидравлика + электроника = POWER
mrKirill вне форума  
Непрочитано 21.06.2014, 20:35  
Hives
Гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: stm32 как читать байт из порта?

mrKirill результат вообще то будет одинаковым - поскольку DST = 8 bit.
и не надо нести пургу с умным видом, оссобенно советуя новичкам.
Hives вне форума  
Непрочитано 21.06.2014, 20:36  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: stm32 как читать байт из порта?

Сообщение от mrKirill Посмотреть сообщение
Вообще-то "0x00FF" это маска и результат в одном и другом случае не будет одинаковым.
Кроме того битность разная.
Это как?
byte это байт, поэтому в него будет записан младший байт из GPIOA-›IDR и
без этого 0xFF; и старшие биты никак не влияют на значение младшего
байта. Маска 0xFF бессмыслена для байта, так как она в нем ничего не изменяет
Boba_spb вне форума  
Непрочитано 21.06.2014, 21:40  
RA3PKJ
Прохожий
 
Регистрация: 04.03.2009
Сообщений: 9
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
RA3PKJ на пути к лучшему
По умолчанию Re: stm32 как читать байт из порта?

Мужики, спасибо за посты, вы очень помогли мне.

Последний раз редактировалось RA3PKJ; 21.06.2014 в 21:44.
RA3PKJ вне форума  
Непрочитано 21.06.2014, 21:47  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,856
Сказал спасибо: 2,532
Сказали Спасибо 11,772 раз(а) в 5,896 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: stm32 как читать байт из порта?

Сообщение от RA3PKJ Посмотреть сообщение
Вероятно маска имеет смысл для считывания старшего байта,
Совсем не имеет смысла.
При присваивании значения сколько-угодно-байтного числа однобайтному запишется в него только младший байт, остальные пойдут лесом.
Если нужен второй, то исходное число сдвинуть вправо на один байт и присвоить однобайтному.
Аналогично для любого, кроме младшего.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.

Последний раз редактировалось akegor; 21.06.2014 в 22:15.
akegor вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Решено] Так, рассказик :)) Я долго ржал :)) DK Отвлекитесь, эмбеддеры! 7 31.08.2007 22:33
[Решено] Сборник перлов любителей кабельщины mikesmith Отвлекитесь, эмбеддеры! 135 14.08.2007 15:49
Как в IAR выделить из ИНТ младший старший байт? prottoss Proteus, KiCAD и другие ECAD 2 25.07.2005 22:57
Как инвертировать бит порта ? Leonardo Микроконтроллеры, АЦП, память и т.д 4 03.07.2003 10:06


Часовой пояс GMT +4, время: 13:03.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot