stm32 как читать байт из порта?
21.06.2014, 22:11
|
|
|
Вид на жительство
Регистрация: 12.04.2007
Сообщений: 339
Сказал спасибо: 2
Сказали Спасибо 34 раз(а) в 30 сообщении(ях)
|
Re: stm32 как читать байт из порта?
А следующим примером будет запись "byte = GPIOA-›IDR & 0xFF00;"
__________________
Гидравлика + электроника = POWER
|
|
|
|
21.06.2014, 22:25
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
|
Re: stm32 как читать байт из порта?
Сообщение от Boba_spb
|
Это как?
byte это байт, поэтому в него будет записан младший байт из GPIOA-›IDR и
без этого 0xFF; и старшие биты никак не влияют на значение младшего
байта. Маска 0xFF бессмыслена для байта, так как она в нем ничего не изменяет
|
А с чего вы взяли, что байт? На 32-битных платформах, вообще-то, обычно оперируют 32-битными операндами... И там эта "лишняя" операция очень важна, т.к. обнуляет старшие биты 16-битного порта
|
|
|
|
21.06.2014, 22:36
|
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
|
Re: stm32 как читать байт из порта?
Сообщение от niXto
|
|
И там эта "лишняя" операция очень важна, т.к. обнуляет старшие биты 16-битного порта
|
Таки - обнуляет? Может, просто маскирует?
А то вдруг лишние ебиницы ринутся наперегонки с нужными и перемешаются...
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
23.06.2014, 10:24
|
|
|
Гражданин KAZUS.RUN
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
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) ...
|
|
|
|
23.06.2014, 16:28
|
|
|
Гражданин KAZUS.RUN
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: stm32 как читать байт из порта?
SasaVitebsk еще один пример того что SPL - чистое зло
|
|
|
|
23.06.2014, 16:47
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: stm32 как читать байт из порта?
Не понятно в чем тут соль. Как бы не извращались в своих дефайнах, в результате будет одно и то же - чтение из регистра и наложение маски. Какая разница что и как обозвать?
А если работа с состояниями пинов вызывает непреодалимые трудности, то лучше заняться чем - то попроще
|
|
|
|
24.06.2014, 09:39
|
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: stm32 как читать байт из порта?
В данном случае вычитывается байт без всяких там масок! Устроили маскарад!
|
|
|
|
24.06.2014, 11:31
|
|
|
Гражданин KAZUS.RUN
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
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 были мягко говоря, не очень удачными.
Я видел разные подходы. Но чаще всего, лучше всего своя реализация. Поэтому очень часто приходится всё перелопачивать. ))
|
|
|
|
24.06.2014, 16:20
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: stm32 как читать байт из порта?
|
|
|
|
24.06.2014, 16:46
|
|
|
Гражданин KAZUS.RUN
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: stm32 как читать байт из порта?
А что вас веселит?
Ну я там ошибочку допустил. Надо было
inline uint16_t isKey(void)
{
return (KEY_PRG_PORT-›IDR & PIN(KEY_PRG));
}
Но я думаю, что все поняли.
У него enum вполне может состоять из одного значения. )
Например:
enum {COMPONENTS_COUNT = 7};
Но парень пишет, атас. 2 месяца - первый релиз OPC сервера на QT.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:36.
|
|