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

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

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

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

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

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


 
Опции темы

stm32 как читать байт из порта?

Непрочитано 21.06.2014, 22:11  
mrKirill
Вид на жительство
 
Аватар для mrKirill
 
Регистрация: 12.04.2007
Сообщений: 339
Сказал спасибо: 2
Сказали Спасибо 34 раз(а) в 30 сообщении(ях)
mrKirill на пути к лучшему
По умолчанию Re: stm32 как читать байт из порта?

А следующим примером будет запись "byte = GPIOA-›IDR & 0xFF00;"
Реклама:
__________________
Гидравлика + электроника = POWER
mrKirill вне форума  
Непрочитано 21.06.2014, 22:25  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: stm32 как читать байт из порта?

Сообщение от Boba_spb Посмотреть сообщение
Это как?
byte это байт, поэтому в него будет записан младший байт из GPIOA-›IDR и
без этого 0xFF; и старшие биты никак не влияют на значение младшего
байта. Маска 0xFF бессмыслена для байта, так как она в нем ничего не изменяет
А с чего вы взяли, что байт? На 32-битных платформах, вообще-то, обычно оперируют 32-битными операндами... И там эта "лишняя" операция очень важна, т.к. обнуляет старшие биты 16-битного порта
niXto вне форума  
Непрочитано 21.06.2014, 22:36  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: stm32 как читать байт из порта?

Сообщение от niXto Посмотреть сообщение
И там эта "лишняя" операция очень важна, т.к. обнуляет старшие биты 16-битного порта
Таки - обнуляет? Может, просто маскирует?
А то вдруг лишние ебиницы ринутся наперегонки с нужными и перемешаются...
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 23.06.2014, 10:24  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: stm32 как читать байт из порта?

Хотелось бы сказать, поборникам работы с библиотекой, что она издохла.
А взамен выпущена новая. Если по-честному, то новая HAL написана значительно изящнее. Правда для тех кто использовал в проекте старую, это слабое утешение. Она совершенно не совместима. Отличается даже подходами.
Я свою писал, из стандартной использовал только RCC и NVIC, и то сейчас злюсь на себя. Придётся править этот кусок.

К слову, без библиотеки примерно выглядит так:
Код:
#define PIN(BIT)						(1‹‹(BIT))
...
// Порт PC3. KEY_PRG
#define KEY_PRG							3
#define KEY_PRG_PORT					GPIOC
...
// Работа с кнопкой "PRG"
#define	IS_KEY_PRG			(KEY_PRG_PORT-›IDR & PIN(KEY_PRG))
Ну и вызов
if(IS_KEY_PRG) ...
SasaVitebsk вне форума  
Непрочитано 23.06.2014, 16:28  
Hives
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: stm32 как читать байт из порта?

SasaVitebsk еще один пример того что SPL - чистое зло
Hives вне форума  
Непрочитано 23.06.2014, 16:47  
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: stm32 как читать байт из порта?

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

А если работа с состояниями пинов вызывает непреодалимые трудности, то лучше заняться чем - то попроще
Boba_spb вне форума  
Непрочитано 24.06.2014, 09:39  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: stm32 как читать байт из порта?

В данном случае вычитывается байт без всяких там масок! Устроили маскарад!
STM32F0 вне форума  
Непрочитано 24.06.2014, 11:31  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: stm32 как читать байт из порта?

Сообщение от Boba_spb Посмотреть сообщение
Не понятно в чем тут соль. Как бы не извращались в своих дефайнах, в результате будет одно и то же - чтение из регистра и наложение маски.
Ну если это камень в мой огород, то я поясню.
1. Я не держусь за макроопределения. Это я просто из своего проекта выдрал. Естественно, что я не возражаю против прямого применения регистров и масок. Без всяких дефайнов. )) Более того, у меня тут парниша, очень неплохой работает, он вообще считает применение макроопределений устаревшим подходом, не соответствующим идеологии C++. Он строго использует enum и подпрограммы. То есть вместо моего define у него будет написано что-нибудь типа:
inline isKey(void)
{
return (KEY_PRG_PORT-›IDR & PIN(KEY_PRG));
}
Мы вполне миксим свои модули и не устраиваем религиозных войн. Меня его подход вполне устраивает. ))
2. Применение дефайнов, на самом деле, обусловлено длительной работой. Просто я всегда в проекте завожу файл local.h где описываю все пины и порты. И скрываю реализацию. ST для этого использует bsp файлы.
Далее по тексту основной программы я использую что-нибудь типа LEDPWR_ON. И мне до лампочки нулём он светится или единицей, к какому пину или порту он подключён.
Мне не приходится править прогу, если переразвели плату и внесли корректировки. Если вышел новый аппаратный релиз изделия, то я в проекте завожу второй local файл, и тогда у меня проект поддерживается для нескольких релизов железа.
Понятно, что всё это можно реализовать разными подходами. Я не держусь за свой. В данном случае, мне просто несколько коробит формирование структуры, для того чтобы дёрнуть пином. Всё же первые библиотеки st были мягко говоря, не очень удачными.
Я видел разные подходы. Но чаще всего, лучше всего своя реализация. Поэтому очень часто приходится всё перелопачивать. ))
SasaVitebsk вне форума  
Непрочитано 24.06.2014, 16:20  
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: stm32 как читать байт из порта?

Сообщение от SasaVitebsk Посмотреть сообщение
Он строго использует enum и подпрограммы. То есть вместо моего define у него будет написано что-нибудь типа:
inline isKey(void)
{
return (KEY_PRG_PORT-›IDR & PIN(KEY_PRG));
}
вот еще б глянуть enum для этого как выглядит
Boba_spb вне форума  
Непрочитано 24.06.2014, 16:46  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: stm32 как читать байт из порта?

А что вас веселит?
Ну я там ошибочку допустил. Надо было
inline uint16_t isKey(void)
{
return (KEY_PRG_PORT-›IDR & PIN(KEY_PRG));
}
Но я думаю, что все поняли.
У него enum вполне может состоять из одного значения. )
Например:
enum {COMPONENTS_COUNT = 7};

Но парень пишет, атас. 2 месяца - первый релиз OPC сервера на QT.
SasaVitebsk вне форума  
 
Опции темы

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

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 11:06


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.