Easyelectronics.ru

Электроника для всех
Текущее время: 19 сен 2019, 01:08

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Маленький вопросик про порты.
СообщениеДобавлено: 12 авг 2019, 14:20 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 31 авг 2012, 16:52
Сообщения: 72
Откуда: Москва
Извените за назойливость любопытство меня одолевает.
В хиде вот такая констррукция:
Код:
#define   E1  LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_0)    // установка линии Е в 1 
#define   E0  LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_0)  // установка линии Е в 0
Соответственно буду дёргать порт 1 вот так E1; а 0 вот так E0;
А как сделать по изящьней например 1 так E = 1; а 0 так E= 0;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 12 авг 2019, 14:26 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2345
6Ф1П писал(а):
Извените за назойливость любопытство меня одолевает.
В хиде вот такая констррукция:
Код:
#define   E1  LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_0)    // установка линии Е в 1 
#define   E0  LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_0)  // установка линии Е в 0
Соответственно буду дёргать порт 1 вот так E1; а 0 вот так E0;
А как сделать по изящьней например 1 так E = 1; а 0 так E= 0;

Перейти на C++


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 12 авг 2019, 14:30 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3287
открыть даташит и посмотреть на описание регистров GPIO.
если так хочется макросами, можно погуглить макросы Волкова.
ну или шаблоны, как, например, тут: https://github.com/antongus/stm32tpl/bl ... tm32F4xx.h


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 12 авг 2019, 15:45 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 941
6Ф1П писал(а):
А как сделать по изящьней например 1 так E = 1; а 0 так E= 0;
Берёшь С++. Пишешь класс пина у которого перегружен оператор присваивания.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 12 авг 2019, 16:15 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3618
Неумение песать не компенсируется переходом на плюсЫ. Как не умел песать на сях, так и на плюсАх будет лажа, только вдвое больше, так как значков ++ вдвое больше в названии.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 12 авг 2019, 17:05 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 941
BusMaster, к чему этот высер? Ответ на конкретный вопрос ТС подразумеват применение C++. Знаешь как сделать без плюсов - говори, нет - не порть воздух.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 12 авг 2019, 17:08 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3618
К тому же, к чему был твой высер в соседней теме. Иди выпей чаю и успокойся. Заебал уже спорить ради спора.
Без плюсов это элементарно делается, тем более изначально LL - это никак не плюсЫ. Я ж говорю - не научившись песать, пересаживацца на плюсЫ - проблему ты не решил, ты просто сбежал от нее, не научившись решать ее.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 12 авг 2019, 17:19 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 941
Не отходи от вопроса. Покажи без мата как без плюсов сделать вопрошаемое ТС
6Ф1П писал(а):
А как сделать по изящьней например 1 так E = 1; а 0 так E= 0;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 12 авг 2019, 17:27 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 6138
Вообще-то, тривиально - мапирование битов по адресам. Но ... расписывать долго, а пользоваться все равно никто не будет. ))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 12 авг 2019, 18:08 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 941
Ты про бит бандинг? Так он далеко не во всех чипах.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 12 авг 2019, 18:13 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1009
VladislavS писал(а):
Ты про бит бандинг? Так он далеко не во всех чипах.

У ТС как раз F7 и его там нет, но даже если Bit Banding есть не всегда порты пересекаются с его адресным пространством, как для F3, например.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 12 авг 2019, 18:27 
Старожил
Аватара пользователя

Зарегистрирован: 12 июн 2018, 15:04
Сообщения: 350
Цитата:
Соответственно буду дёргать порт 1 вот так E1; а 0 вот так E0;
А как сделать по изящьней например 1 так E = 1; а 0 так E= 0;


Код:
#define E(x)   LL_GPIO_##x##OutputPin(GPIOA, LL_GPIO_PIN_0)

//Использование:
E(Set);
E(Reset);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 12 авг 2019, 18:35 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3618
VladislavS писал(а):
Не отходи от вопроса. Покажи без мата как без плюсов сделать вопрошаемое ТС[]

Мда, не думал, что ты не знаешь. Плохо! Поверь, делается в два счета. Просто узость мышления не позволяет это увидеть.
я на отдыхе, из всех средств только планшетник. но ты и сам можешь это сделать и убедиться. это ж как два байта переслать :))) Сделай сам и докажи, что ты чето умеешь! А то только спорить научился да лезть куда не просят


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 12 авг 2019, 18:52 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 31 авг 2012, 16:52
Сообщения: 72
Откуда: Москва
E(Set);
E(Reset);
Ну это наверное тоже самое что и у меня E0/E1 только информативней будет наверное.
Как я понял из спора это проблемотично на Си, мне забыть и писать то что есть
видемо красивый выпендрёж требует знаний и лишних строк да ещё на плюсах.
Я надеялся что может примерчик бросят в пару одну другую строк, атут вон оно как всё разгорелось.
---------------------------------------------------------------------------------------------------------------------
Читаю я коментарии и что то вспомнил фильм "влошебная лампа Оладина" там в начале фильма
О... дастопочтенный мастер по увлажнению улиц, не подскажеш ли ты где ..... и далие там такая сцена началась!
НЕ РУГАЙТЕСЬ!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 12 авг 2019, 21:28 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 941
А какая разница, пара строк или пара десятков строк в библиотечном файле? Он же один раз пишется. Для одного пина это делается вообще изи.
Show Библиотека. Подключаемый файл.
Show Использование.
Show Листинг.

А ещё эти пины можно в другие классы передавать.
Show Класс cдвигового регистра.
Show Применим сдвиговый регистр.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 12 авг 2019, 22:43 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 31 авг 2012, 16:52
Сообщения: 72
Откуда: Москва
Большое спасибо VladislavS
Буду разбираться с инфой.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 12 авг 2019, 23:22 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 677
Доброго времени суток !

Эка наваяли, внесу и я свою лепту
Код:
#define E(x)           GPIOA->BSRR = (x)?1:(1 << 16)

//использовать
       E(1);
       E(0);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 12 авг 2019, 23:51 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1009
void1509 писал(а):
внесу и я свою лепту

Пока один пин то можно и так сделать, а будет какой-нибудь дисплей и тогда у многих получается кода на страницу только с одними макросами для портов :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 13 авг 2019, 08:56 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2345
Не бойтесь плюсов!
Да - сначала непревычно и многое непонятно.
Но если разберетесь, то единажды написав классы (шаблоны), потом легко все переносится и на другие пины (периферию) и в другие проекты.
Пишите код и кайфуете!
Занимаетесь только логикой приложения.
Все просто, логично, удобно...

Я сам то конечно не волшебник, только учусь, но вот например написал класс для работы с радиомодулем, теперь могу его запустить на любом SPI и сразу определить ножки управления.
Переделал схему - в коде нужно подправить только одну строку
Код:
RfModul<Spi_2> rf_modul(PORTA,PIN6,PORTC,PIN3,PORTA,PIN0);


А если и второй подключу на другой SPI - тоже всё как два пальца, добавлю
Код:
RfModul<Spi_1> rf_modul_2(PORT...,PIN...,PORT...,PIN...,PORT...,PIN...);


и все будт работать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 13 авг 2019, 09:18 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3618
Вообще, вам шашечки или ехать? Неумение писать не компенсируется переходом на другой язык. Вначале научитесь что-то делать, потом уже думайте, как это красивыми плюшками украсить.
Напоминает то, когда люди первым делом начинают изобретать макросы для дергания ногами (это как раз касается этой темы), выдумывают ниепические конструкции... Но когда на практике делаешь конкретные задачи, ты быстро понимаешь, что каждый конкретный случай требует своего подхода. Я говорю не о банальных свистоперделках и мигалках.

Тут, как я понимаю, автор пытается дергать ногу E классического монохромного дисплея МЭЛТ 12864. Так вот - дергание этой ноги - это 2% от всего объема работы, и нога дергается лишь в одном месте - при отправке байта в дисплей.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 13 авг 2019, 09:36 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2345
Reflector писал(а):
void1509 писал(а):
внесу и я свою лепту

Пока один пин то можно и так сделать, а будет какой-нибудь дисплей и тогда у многих получается кода на страницу только с одними макросами для портов :)

Это ещё полбеды!
А представьте - схему поменял, изменил порты.
И сиди все это перелапачивай!
Универсальностью тут даже не пахнет.
Да и вероятность где то допустить ошибку весьма велика.


Show Вот как раньше на Си я определял порты и SPI для радиомодуля


Как сейчас на C++ уже показывал
Код:
RfModul<Spi_2> rf_modul(PORTA,PIN6,PORTC,PIN3,PORTA,PIN0);


Почуствуйте разницу.

А 2 или 3 экземпляра на Си как сделать?
Гемморой возрастает в 2-3 раза.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 13 авг 2019, 10:18 
Старожил
Аватара пользователя

Зарегистрирован: 01 ноя 2011, 23:51
Сообщения: 820
6Ф1П писал(а):
Извените за назойливость любопытство меня одолевает.
В хиде вот такая констррукция:
Код:
#define   E1  LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_0)    // установка линии Е в 1 
#define   E0  LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_0)  // установка линии Е в 0
Соответственно буду дёргать порт 1 вот так E1; а 0 вот так E0;
А как сделать по изящьней например 1 так E = 1; а 0 так E= 0;

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 13 авг 2019, 11:21 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 941
Ну покажите уже что-ли кто-нибудь как надо? А то пока одни бла-бла. Не забываем, у ТС STM32F7.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 13 авг 2019, 12:22 
Старожил

Зарегистрирован: 16 окт 2013, 01:27
Сообщения: 1083
Что то я не понимаю зачем весь этот сыр-бор, там же в процедуре можно просто сделать строб и нет никакой разницы как это будет сделано (если речь на самом деле про дисплей из разряда 1602)

Простейшие макросы установки сброса как уже выше писали.
Код:
#define LCD_ON()   GPIOA->BSRR |=1<<0 // установить бит
#define LCD_OFF()   GPIOA->BRR  |=1<<0  //Сбросить бит


То же самое можно сделать через ODR
Код:
#define LCD_ON()   GPIOA->ODR |=1<<0 // установить бит
#define LCD_OFF()   GPIOA->ODR &=(~1<<0)  //Сбросить бит


1<<0 ( 0 - ставлю чтобы все привести к одному написанию, так в свое время научили)

Можно написать функцию с аргументом:

Цитата:
void bit_E (uint8_t bit_)
{
if (bit_>0) {GPIOA->BSRR |=1<<0; }// установить бит
else {GPIOA->BRR |=1<<0; }//Сбросить бит
}

тогда как раз и будет обращение bit_E(0) , bit_E(1);

Вот только я реально не понимаю зачем это все, когда там строб должен быть 40 uS по моему (не помню точно, вроде на разных дисплеях время варируется) и именно между записями верхнего и нижнего нибла (полу-байта) так и нужно его дергать в процедуре, ну а там вообще нет никакой разницы как это будет записано.

void1509
Цитата:
#define E(x) GPIOA->BSRR = (x)?1:(1 << 16)

Спасибо за интересную конструкцию, надо попробовать :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Маленький вопросик про порты.
СообщениеДобавлено: 13 авг 2019, 13:03 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1009
Pingvin писал(а):
Код:
RfModul<Spi_2> rf_modul(PORTA,PIN6,PORTC,PIN3,PORTA,PIN0);

Странно, что есть класс Spi и шаблонный RfModul, но нет шаблонного класса пина, с которого обычно все и начинают :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB