Перейти к содержанию

STM32 для чайника


ART_ME

Рекомендуемые сообщения

6 hours ago, Koret said:

Если я, например, в main после инициализации периферии запущу один раз HAL_ADC_Start_DMA(), то, насколько я понимаю, после переноса значений ПДП HAL выполнит HAL_ADC_Stop_DMA() и "привязка" ПДП к массиву "слетит". Поэтому я и спрашивал, как указать ПДП массив, чтобы он не "слетал".

не выполнит. ПДП запускается один раз и будет работать пока не остановите вручную

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Стесняюсь спросить. А не проще ручками без HAL назначить контроллеру DMA стартовый адрес массива, источник данных и источник реквестов? Нахрена эти простейшие и совершенно понятные установки прятать в какие то идиотские функции HAL, генерируя подобные вопросы?

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

все можно. Способы просто разные, а результат то один. 

Я обычно перед использованием какой то функции HAL заглядываю в ее код, у если мне все нравится, то использую. Если нет, то переделываю под себя. В HAL далеко не все так плохо как кажется.

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

14 часа назад, mail_robot сказал:

В HAL далеко не все так плохо как кажется.

Иллюзия простоты - всегда плохо. Даже когда явных последствий нет. Абстракции отделяющие программиста от влияющих на работу кода сущностей - никудышние абстракции.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

конкретнее можете аргументировать? SPL разве не абстракции?

Внутри кода функций HAL  тот же самый SPL, только уже в виде осмысленных последовательностей кода, которые мне так и так пришлось бы прописывать руками. Не вижу логики в ваших рассуждениях. Вы текст библиотек то хоть почитайте на досуге, чтобы было о чем поспорить в следующий раз

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Логика очень простая. Для реализации драйверов и т.п. (самый низкий уровень программирования) полагаю использование чужих  абстракций нецелесообразным. 

Зачем копать библиотеки с целью разбора кода, если проще и понятней написать свой? Больше понимания - меньше ошибок. Абстракция (чужая, естественно) - это всегда меньше понимания.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

ну если вам так нравится переписывать чужие дефайны, то я не против. Изобретайте велосипед заново хоть десять раз. На моей зарплате это никак не отражается )

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

А весь хал состоит из трех простых сущностей (слоев если хотите). 1 дефайны регистров и флагов. 2 - макросы из этих дефайнов. 3 - Функции агрегаторы верхнего уровня. Тот же самый SPL только чуть другими словами. Можно даже использовать HAL как SPL при желании. Уровень будет абсолютно тот же. А такие спецы как вы зачем то оборачивают эту прекрасную библиотеку в какой то кошмарный набор мифов и гаданий, даже не зная толком что внутри. И простаки верят и начинают повторять за "спецами". Еще раз повторюсь - разберитесь повнимательнее.

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Кому нравится арбуз, а кому свиной хрящик. (с)

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

По поводу Ваших предпочтений и экономии времени профессионала.

Пример.

Замечательный концерн Tyco в состав которой входит не менее замечательная  компания Sensormatic, являющаяся прямым моим конкурентом (со всем моим почтением к ней). Выпускает противокражное оборудование (акустомагнитное в основном). К техническим параметрам этого оборудования я стремлюсь как к некоему текущему эталону и цели. Но все что вокруг основной задачи (вокруг нее - интерфейсы технического обслуживания изделия) - это тихий ужас...  Могу ответственно заявить - этот ужас - прямое следствие использования стандартных библиотек. Уши этих библиотек торчат ото всюду. Кто то сэкономил время....

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

52 минуты назад, my504 сказал:

так вот эти самые новички тупо оперируют самым верхним слоем абстракций, впадая в странные сомнения, которых ни за что бы не обрели, если бы написали практически тот же объем кода, но без лишних сущностей.

Как новичок, который начал по вечерам осваивать микроконтроллеры 2-3 недели назад не соглашусь с Вами. Программируя на ООП (Java, PHP7 и т.п.), всегда хотел хотя бы на домашнем уровне освоить МК и глядя на разные примеры (CMSIS), где люди в коде оперировали непонятными регистрами всегда хотелось "бежать" отсюда, представляя себе что надо будет проштудировать многостраничные справочники по МК. Но HAL помог начать не понимая самого МК, что очень важно для новичка. Получив первый результат меня это вдохновило и методом проб и ошибок потихоньку начал осваиваться, безусловно постоянно приходится обращаться к справочной литературе и т.д., но HAL в моём случае стал определённым "мотиватором". Сейчас и регистры напрямую не кажутся такими пугающими, как это было вначале.

Насчёт "практически тот же объем кода" и про "странные сомнения". Например, в моём случае по АЦП с ПДП. Поставил себе задачу, получать данные с 4-х каналов АЦП передавая данные с помощью ПДП. Реализовал это буквально за 5 минут 2-мя способами:

1) АЦП запускается напрямую по таймеру, ПДП в режиме Circular автоматически переносит значения.

2) АЦП запускается через обратную функцию по прерыванию от таймера, ПДП в режиме Normal.

Но ради спортивного интереса захотел реализовать 3-й вариант, когда АЦП запускается напрямую по таймеру и ПДП при этом настроен в режиме Normal, вот это у меня и вызвало трудности. Не думаю, что мне как новичку удалось бы это сделать быстрее через регистры напрямую хотя бы одним из способов. При этом ошибок, как новичок, я бы действительно много допустил.

Возможно в дальнейшем и поменяю своё мнение, но на данный момент мне HAL пока нравится, библиотечный код HAL-а после ООП читается на ура.

Ссылка на комментарий
Поделиться на другие сайты

27 минут назад, Koret сказал:

Как новичок, который начал по вечерам осваивать микроконтроллеры 2-3 недели назад не соглашусь с Вами.

Кто бы сомневался. Однако простота хуже воровства. И в местном контексте тоже.

МК  это не ПК.  Даже если некие инструменты позволяют создать такую иллюзию.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

упорству храбрых, как говорится....

6 hours ago, my504 said:

Однако простота хуже воровства

вам бы не мешало заодно ознакомиться со значением этого выражения. Глаз режет и к вопросу не имеет никакого отношения, даже близко

6 hours ago, Koret said:

на данный момент мне HAL пока нравится, библиотечный код HAL-а после ООП читается на ура

я тоже начинал по вечерам и более менее понимание того, что пишешь что-то толковое возникло только после знакомства с HAL. Все почти так же как у вас, только пришлось местами потоптаться по граблям. И я вот в последнее время по гитхабу замечаю, что все больше профи отказываются от SPL, а это говорит о том, что наши с вами предпочтения это далеко не вопль в пустыне. Остальные мыши пусть продолжают грызть кактус на здоровье )

Я думаю любой, кому не в лом заглянуть в код библиотеки довольно быстро поймет всю прелесть и логичность ее кода. Да, он напоминает шаблонный. Да в нем много "универсального" мусора, который часто и не компилируется вовсе. Но это хороший код

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, mail_robot сказал:

упорству храбрых, как говорится....

вам бы не мешало заодно ознакомиться со значением этого выражения. Глаз режет и к вопросу не имеет никакого отношения, даже близко

Не ищите дурее себя, уважаемый... (с)

Мне известно значение этого выражения. И оно имеет самое прямое отношение к представленному случаю. 

Что характерно, в Вашем комментарии оно еще и рекурсивно, сиречь, его узкое трактование может быть им и описано...

Относительно HAL.

Если бы подобные абстракции не были бы в принципе ограничены, разработчик МК сделал бы их частью архитектуры, свернув имеющиеся структуры  регистров в эти самые абстрактные сущности HAL.

Если у человека идиосинкразия к программированию физического уровня, то не нужно мучить себя и терзать свою душу. Нужно взять ***PI  и под управлением ОС общего назначения продолжать получать удовольствие от привычного программирования. Там даже паяльник не требуется...

 

 

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

ну вот, скатился на хамство. Значит логичные аргументы закончились и говорить больше не о чем

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Это не хамство, это цитата. О чем совершенно определенно говорит значок копирайта.

По большому счету, Вы тоже хамите, пусть и в завуалированной форме, заменяя обсуждение существа обсуждением  формы, причем на совершенно примитивном уровне.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, my504 сказал:

Если бы подобные абстракции не были бы в принципе ограничены, разработчик МК сделал бы их частью архитектуры, свернув имеющиеся структуры  регистров в эти самые абстрактные сущности HAL.

Следуя вашей логике, стоит отказаться от всех языков программирования, пожалуй кроме ассемблера, и программировать в машинных кодах, т.к. любой ЯП это более высокий уровень абстракции по сравнению с машинными кодами.

Только бинарный код, только хардкор.

Изменено пользователем Darth_Vader
Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, Darth_Vader сказал:

Следуя вашей логике, стоит отказаться от всех языков программирования, пожалуй кроме ассемблера.

Из моей логики этого не следует.

Производители во всех современных архитектурах создают Си-совместимую систему команд. Потому что Си сам по себе не создает абстракций (с достаточной степенью приближения). Задача создания таковых остается за программистом (включая библиотечные применения). Тут вообще шла речь о драйверах нижнего уровня. Их можно разделить на  драйверы общего назначения и драйверы реализующие стеки стандартных протоколов. Последние так или иначе обычно берут готовыми, но они обычно построены как  "прозрачные" и их применение вслепую не вызывает серьезных трудностей, чего не скажешь о драйверах общего назначения.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, mail_robot сказал:

Я думаю любой, кому не в лом заглянуть в код библиотеки довольно быстро поймет всю прелесть и логичность ее кода. Да, он напоминает шаблонный. Да в нем много "универсального" мусора, который часто и не компилируется вовсе. Но это хороший код

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

Также работа с регистрами напрямую не даст полной гарантии, что человек досконально разбирается в МК. Сколько примеров попадалось на глаза, когда люди пишут напрямую в регистры, но при этом, например, для инициализации того же АЦП просто копируют-вставляют код, которым ранее пользовались или где-то увидели, возможно, даже, не полностью понимая что этот код значит, но при этом они пишут напрямую в регистры. Особенно актуально среди новичков, когда код просто копируется, чтобы поскорее получить заветный результат. 

Поэтому я считаю, что если человек хочет разобраться с МК, он разберётся независимо от того, программирует он на низком уровне или высоком. А если ему это не надо или надо для получения разового результата, то он и работая напрямую с регистрами, вряд ли поймёт все тонкости работы с МК.

Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, Koret сказал:

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

Также работа с регистрами напрямую не даст полной гарантии, что человек досконально разбирается в МК. Сколько примеров попадалось на глаза, когда люди пишут напрямую в регистры, но при этом, например, для инициализации того же АЦП просто копируют-вставляют код, которым ранее пользовались или где-то увидели, возможно, даже, не полностью понимая что этот код значит, но при этом они пишут напрямую в регистры. Особенно актуально среди новичков, когда код просто копируется, чтобы поскорее получить заветный результат. 

Поэтому я считаю, что если человек хочет разобраться с МК, он разберётся независимо от того, программирует он на низком уровне или высоком. А если ему это не надо или надо для получения разового результата, то он и работая напрямую с регистрами, вряд ли поймёт все тонкости работы с МК.

Во первых, работа с регистрами и уровень языка - не пересекающиеся понятия. 

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

В третьих, глупости можно делать с любым инструментом, поэтому глупость не является аргументом. 

Работа с регистрами дает полный ресурс управления, что позволяет четко понимать взаимодействие участков кода. 

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Путь HAL такой же тупиковый как и Arduino, есть черта через которую не перейти и чтобы написать нечто большее чем предлагает вам HAL, нужно все-равно опускаться до уровней регистров или даже до уровня ассемблера и читать мануалы. Как можно програмировать МК и не знать как там что устроено? Я вот читаю и фигею с того как вы хвалите тут HAL, обычно люди которые понимают уровень регистров и смотрят в HAL видят там кошмар и ужас, где вы там нашли что-то хорошее? И как по мне работа с HAL мало чем на самом деле отличаеться от работы с регистрами на CMSIS, потому как он вообще не дает никаких преимуществ вы все-равно все настраиваете руками. И меня особо улыбнуло сравнение программировать на регистрах с опусканием до уровня ассемблера, да это точно такой же С/С++. 

Тем более что страдать нужно только 1 раз когда пишешь первый раз, потом опыт и код накапливаеться и все дальше все легко и просто. 

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, MasterElectric сказал:

 Как можно програмировать МК и не знать как там что устроено?

Я ни в коем разе не призываю "не знать как там что устроено", а даже наоборот, но достаточное большое кол-во современных программистов на ПК практически понятия не имеют как устроен ПК, но при этом пишут хорошие программы. Ранее @my504  написал, что "МК  это не ПК", к сожалению, у меня нет пока достаточного опыта, чтобы рассуждать о МК, но чем больше я о них читаю, тем больше складывается впечатление, что это почти ПК, а через несколько лет так вообще думаю будут все МК идти с предустановленными ОС.

1 час назад, MasterElectric сказал:

обычно люди которые понимают уровень регистров и смотрят в HAL видят там кошмар и ужас, где вы там нашли что-то хорошее?

Могу задать Вам встречный вопрос, а где там "кошмар и ужас", но воздержусь. Возможно люди привыкли к короткому "регистровому" коду и когда заходят в библиотеки с кучей условий просто теряются. Как вариант, я бы им порекомендовал посмотреть нормальный ООП код на Java и тогда, возможно, код HAL-а им покажется настолько родным и понятным, аж до безобразия.

1 час назад, MasterElectric сказал:

И меня особо улыбнуло сравнение программировать на регистрах с опусканием до уровня ассемблера, да это точно такой же С/С++. 

Именно поэтому вначале своего сообщения слова "низкий" и "высокий" я взял в кавычки. Язык то один, только одни оперируя исключительно регистрами превращают его "по сути в ассемблер" и потом возмущаются, что код от HAL это "кошмар" и "ужас", а другие пользуются всеми преимуществами относительно-высокоуровнего программирования.

Ребята, своим сообщением с разными языками программирования я лишь хотел донести мысль, что каждому своё. Подобные споры, к сожалению, всегда были, есть и будут. Помню в институте чуть ли не до "драк" доходило :), когда ассемблеристы доказывали своё превосходство над Си, а когда к этому подключались любители Java с ООП, так вообще жара. Но как ни странно, мнения своего так никто и не менял, поэтому данные споры считают априори бессмысленные.

Ссылка на комментарий
Поделиться на другие сайты

@Koret ООП это уж точно не HAL. Я писал на С++ пробовал, вот там реально создавать библиотеки ориентированные на работу с объектами, указал нужный USART при инициализации класса и все, нужно хоть все 8 используй однотипно, очень удобно. Библиотека сама настроит пины нужного USART, настроит работу прерываний и сама будет их обрабатывать, а для взаимодействия с основной программой создал глобальную переменную Event в которой устанавливаються нужные флаги. И для запуска всего этого нужно закинуть папку с библиотекой, и создать экземпляр класса. Вот к такому кодингу стремлюсь я. И там нет никакой лишней абстрактности все на CMSIS, теперь думаю некоторые вещи на асм переписать. Сейчас правда все забросил понял что нужно ОС еще осваивать.

   А "ужас" в том что одну строку при работе с регистрами в HAL используют целые функции, ну вот например: GPIO_SetBits(GPIOA, GPIO_Pin_4); и что разве нет в этом ничего ужасного? Я уже не говорю про работу с флагами, а прерывания это просто жесть.

Изменено пользователем MasterElectric
Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, Koret сказал:

Я ни в коем разе не призываю "не знать как там что устроено", а даже наоборот, но достаточное большое кол-во современных программистов на ПК практически понятия не имеют как устроен ПК, но при этом пишут хорошие программы. Ранее @my504  написал, что "МК  это не ПК", к сожалению, у меня нет пока достаточного опыта, чтобы рассуждать о МК, но чем больше я о них читаю, тем больше складывается впечатление, что это почти ПК, а через несколько лет так вообще думаю будут все МК идти с предустановленными ОС.

Разница между МК и ПК состоит в том, что МК - это машина реального времени, а ПК - нет. Кроме того, у них совершенно разные задачи. МК - это элемент схемы, встроенный автомат. Его задачи не могут быть унифицированы, как не может быть унифицирована схемотехника частотного преобразователя и приемника радиочастотных сигналов. ОСРВ, применяемая в МК,  имеет крайне мало общего с ОС общего назначения в ПК. Да и сама ОСРВ таки повышает латентность МК к внешним событиям, что для МК крайне важно.  

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

В тех применениях, где МК выполняют задачи сходные с задачами ПК, они будут вытеснены суперкомпактными ПК . 

И это правильно. Но к обсуждаемому вопросу это не имеет никакого отношения.

 

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

ну и в чем тут заключается ужас?

void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
{
  /* Check the parameters */
  assert_param(IS_GPIO_PIN(GPIO_Pin));
  assert_param(IS_GPIO_PIN_ACTION(PinState));

  if(PinState != GPIO_PIN_RESET)
  {
    GPIOx->BSRR = GPIO_Pin;
  }
  else
  {
    GPIOx->BSRR = (uint32_t)GPIO_Pin << 16;
  }
}

или тут он в чем то закопался?

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  GPIO_PinState bitstatus;

  /* Check the parameters */
  assert_param(IS_GPIO_PIN(GPIO_Pin));

  if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)GPIO_PIN_RESET)
  {
    bitstatus = GPIO_PIN_SET;
  }
  else
  {
    bitstatus = GPIO_PIN_RESET;
  }
  return bitstatus;
}

Обычные регистры внутри функции

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

GPIOA->BSRR = GPIO_Pin10;

это очень простой, но зато очень конкретный пример того, как можно работать с HAL не хуже чем с регистровым кодом. А у вас пока только пустой треп типа - лучше хуже выше ниже ужас не ужас. Просишь конкретику, начинаете вилять задом. Приведите конкретно ужасный кусок кода из HAL и обсудим

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • Ну-вы и сравнили. Вот когда будете строить сварочный инвертор на такую частоту-то там нужно  будет учитывать скин эффект. А на частоты до 75кгц-можно забить, отбить и не принимать во внимание. Тем более-что все стараются аппараты до 200А строить. На кольце плотность тока до 15А на мм ^2, на Ш от 10А на  мм^2 А вентилятор-он все лишние тепло сдует ко льдам в Антарктиде.
    • Добрый вечер всем!  Проблема следующая: Есть флешка с записанной файловой системой через USB MASS STORAGE DEVICES. При "втыкании"  в порт USB открывается на ПК диск с содержимым. Я подключил библиотеку Fatfs и прописал низкоуровневые функции чтения и записи в файле diskio.c Работаю с файлом так:   disk_initialize(SDFatFs.drv); if(f_mount(&SDFatFs,(TCHAR const*)USER_Path,0)!=FR_OK) { //Error_Handler(); Usart1_Send_String("Error_f_mount!\r\n"); } else { if(f_open(&MyFile,"01.WAV",FA_READ)!=FR_OK) { //Error_Handler(); Usart1_Send_String("Error_open_File1!\r\n"); } else { Usart1_Send_String("open_File_OK1!\r\n"); } if(f_open(&MyFile,"01.wav",FA_READ)!=FR_OK) { //Error_Handler(); Usart1_Send_String("Error_open_File2!\r\n"); } else { Usart1_Send_String("open_File_OK2!\r\n"); UINT testBytes=0; f_read(&MyFile, buff1, 512, &testBytes); sprintf(buf1, "TestBytes=%d\r\n", testBytes); Usart1_Send_String(buf1); Usart1_Send_hex((char*)buff1, 512); Usart1_Send_String("read_File_complite!\r\n"); f_close(&MyFile); } } подправил diskio.c так:   DRESULT disk_read ( BYTE pdrv, /* Physical drive nmuber to identify the drive */ BYTE *buff, /* Data buffer to store read data */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to read */ ) { DRESULT res; //res = disk.drv[pdrv]->disk_read(disk.lun[pdrv], buff, sector, count); sprintf(buffer0, "sector=%lu\r\n", sector); Usart1_Send_String(buffer0); w25qReadPage(buff, sector*2); w25qReadPage(buff + 256, sector*2+256); res=RES_OK; return res; } #if _USE_WRITE == 1 DRESULT disk_write ( BYTE pdrv, /* Physical drive nmuber to identify the drive */ const BYTE *buff, /* Data to be written */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to write */ ) { DRESULT res; //res = disk.drv[pdrv]->disk_write(disk.lun[pdrv], buff, sector, count); w25qWritingByUSB(sector, (uint8_t*)buff); res=RES_OK; return res; } #endif /* _USE_WRITE == 1 */ функцию чтения на самом деле пробовал прописывать по разному, все равно не корректно работает... Выдает в отладке такое:   Program start!.... sector=0 // это обращение к функции чтения DRESULT disk_read (); Error_open_File1! sector=0 // это обращение к функции чтения DRESULT disk_read (); Error_open_File2! Что я забыл еще добавить?
    • В былые годы запрещалось размещать на форуме бессмысленные темы. Видать, с тех пор правила существенно изменились.
    • скачай новый архив. там есть важные изменения в комповой программе, по сравнению с той, что я отправлял в личке. исправлены недоделки и добавлены проверки на некорректные действия.
    • Здесь все индивидуально, точного ответа нет. Тип фоторезиста, качество фотошаблона, расстояние и время засветки, длина волны св.диодов, "полоскание" в химии ... Надо все пробовать самому, ручками, опыт придет со временем, ничего сложного там нет. На форуме есть ветка, почитайте.
    • Привет.  Хочу попробовать поработать с фоторезистом. Есть пару десятков ультрафиолетовых светодиодов, общей мощностью 4 вата. Хватит ли этой мощности для обработки платок размером 10 на 10 см или надо искать что-то дополнительно? 
×
×
  • Создать...