21.06.2014, 17:59
|
|
Прохожий
Регистрация: 04.03.2009
Сообщений: 9
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
stm32 как читать байт из порта?
Вопрос от чайника, поседевшего на ниве электроники. Извиняюсь за возможно глупый вопрос. Убил несколько часов на поиски.
Известно, что прочитать один бит с ножки делают так:
btn1 = GPIO_ReadInputDataBit(BTN_PORT, BTN1_PIN)
А если надо прочитать один байт с порта, т.е. сразу с восьми ножек, расположенных одна за другой, например PA0...PA7 или PA8...PA15
Как?
|
|
|
|
21.06.2014, 18:14
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: stm32 как читать байт из порта?
Читают регистр IDR
Его долго искать не нужно, достаточно всего лишь решиться скачать даташит на чип
|
|
|
|
21.06.2014, 18:46
|
|
Прохожий
Регистрация: 04.03.2009
Сообщений: 9
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: stm32 как читать байт из порта?
Спасибо, понял. Сразу в голову не пришло.
|
|
|
|
21.06.2014, 18:57
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: stm32 как читать байт из порта?
Если нужно прочитать меньше 16 бит - добавляют логическое И с маской для заполнения незначащих битов нулями, или логическое ИЛИ - для заполнения единицами (в зависимости от логики обработки). Например, если нужно прочитать 8 младших бит и заполнить старшие 8 бит нулями (в не зависимости от их реального состояния), то используют команду например
byte = GPIOA-›IDR & 0x00FF;
|
|
|
|
21.06.2014, 19:38
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: stm32 как читать байт из порта?
А чем отличается
byte = GPIOA-›IDR & 0x00FF; от byte = GPIOA-›IDR; ?
кроме лишних операций ?
|
|
|
|
21.06.2014, 19:53
|
|
Вид на жительство
Регистрация: 12.04.2007
Сообщений: 348
Сказал спасибо: 2
Сказали Спасибо 36 раз(а) в 32 сообщении(ях)
|
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
|
|
|
|
21.06.2014, 20:35
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: stm32 как читать байт из порта?
mrKirill результат вообще то будет одинаковым - поскольку DST = 8 bit.
и не надо нести пургу с умным видом, оссобенно советуя новичкам.
|
|
|
|
21.06.2014, 20:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: stm32 как читать байт из порта?
Сообщение от mrKirill
|
Вообще-то "0x00FF" это маска и результат в одном и другом случае не будет одинаковым.
Кроме того битность разная.
|
Это как?
byte это байт, поэтому в него будет записан младший байт из GPIOA-›IDR и
без этого 0xFF; и старшие биты никак не влияют на значение младшего
байта. Маска 0xFF бессмыслена для байта, так как она в нем ничего не изменяет
|
|
|
|
21.06.2014, 21:40
|
|
Прохожий
Регистрация: 04.03.2009
Сообщений: 9
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: stm32 как читать байт из порта?
Мужики, спасибо за посты, вы очень помогли мне.
Последний раз редактировалось RA3PKJ; 21.06.2014 в 21:44.
|
|
|
|
21.06.2014, 21:47
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,856
Сказал спасибо: 2,532
Сказали Спасибо 11,772 раз(а) в 5,896 сообщении(ях)
|
Re: stm32 как читать байт из порта?
Сообщение от RA3PKJ
|
Вероятно маска имеет смысл для считывания старшего байта,
|
Совсем не имеет смысла.
При присваивании значения сколько-угодно-байтного числа однобайтному запишется в него только младший байт, остальные пойдут лесом.
Если нужен второй, то исходное число сдвинуть вправо на один байт и присвоить однобайтному.
Аналогично для любого, кроме младшего.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
Последний раз редактировалось akegor; 21.06.2014 в 22:15.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:03.
|
|