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

STM32 для чайника


ART_ME

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

4 минуты назад, Электронщик сказал:

Получается что функция Hal uart transmit рассчитана для вывода текстового байта?

Чего? :o Байт он и есть байт.

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

4 минуты назад, Электронщик сказал:

Я в гугле и искал но нигде не нашел, там либо функции библиотек stl используют, либо библиотеку переделывают, что не хотелось бы.

Речь не о библиотеках. Речь о правильном использовании массивов. Судя по Вашему коду, Вы о них вообще ничего не знаете, но пытаетесь их применить.
Дак почему бы не почитать про них ? 
 

1 минуту назад, Darth_Vader сказал:

Чего? :o Байт он и есть байт.

Ну выразился человек неправильно, что сразу такое лицо делать ? :) 
Просто тяжело разговаривать на темы, в которых некомпетентен. Ничего страшного... :)

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

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

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

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

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

10 минут назад, Darth_Vader сказал:

Чего? :o Байт он и есть байт.

Я имел ввиду для вывода char ведь char же однобайтовая переменная которая может хранить одну букву по таблице  ASCii

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

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

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

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

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

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

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

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

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

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

Мда, калокуб, не только не помогает но и отучает думать...

 


int16_t adc_rezult ;

char text_buf[8];

adc_rezult =3267;

sprintf(text_buf,"%d\n",adc_rezult);

Usart_string(text_buf);

 

На функцию Usart_string(text_buf); IAR ругался, поэтому использовал функцию от библиотеки HAL, действительно размерность посылки почему - то явно в байтах нужно указывать, а не размером переменной или массива, хотя в codevision и в ардуино ИДЕ, все всегда обьявляли размером посылки размер той же переменной.

Теперь и АЦП выводит все как нужно).

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

44 минуты назад, Электронщик сказал:

пытался просто переменную в string переконвертировать

А в моем коде что по вашему? Вам надо вместо облегчалок изучать С ...

На Usart_string  естественно будет ругаться , ибо это самописный вывод нультерминэйтед строки ...

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

Добрый день. Работаю с камнем stm32f103rc. Использую HAL. Принимаю по uart 3 данные с gps модуля. И на первом же байте выскакивает overrun error, скорость всего 9600... Инициализация уарта: 

static void MX_USART3_UART_Init(void)
{

  huart3.Instance = USART3;
  huart3.Init.BaudRate = 9600;
  huart3.Init.WordLength = UART_WORDLENGTH_8B;
  huart3.Init.StopBits = UART_STOPBITS_1;
  huart3.Init.Parity = UART_PARITY_NONE;
  huart3.Init.Mode = UART_MODE_TX_RX;
  huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart3.Init.OverSampling = UART_OVERSAMPLING_16;
  if (HAL_UART_Init(&huart3) != HAL_OK)
  {
    Error_Handler();
  }

  HAL_NVIC_EnableIRQ(USART3_IRQn);

}

 

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

Чудотворный форум. Только напишу о проблеме через 5 минут разберусь, а до того как написать пол дня сидел. В общем проблема не в тактировании, а в кривой обработке ошибок уарта в HAL, ну и в моих руках от части). Получается я включал прием по уарт когда gps модуль уже передаёт пакеты, естественно попасть на начало пакета шансов мало. Было примерно так: прерывания включаются на средине байта, байт заканчивается раньше чем нужно, начинается новый, от сюда и оверран (логично бы было получить frame error, но выскочил именно оверран). А дальше косяки HAL. Флаги ошибок сбрасываются, и состояние уарта ставится READY.  Но само прерывание на приём не отключается. Оно срабатывает, проверяет статус уарт (там должно быть или HAL_UART_STATE_BUSY_RX или HAL_UART_STATE_BUSY_RX_TX). Но обработчик ошибок поменял его на READY. Функция которая обрабатывает приём возвращает, что уарт занят, ну и так до бесконечности. Вот такая вот беда, так что имейте в виду. Который раз доказывает что хал сыроват, да и избыточен сильно...

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

День добрый. Ещё один вопрос назрел. Работаю с камнем stm32f103rc в эклипсе. sprintf не выводит float и double. Вот такие варианты: 

sprintf(debug_TxBuffer, "My float: %f\r\n", floatNumber);
sprintf(debug_TxBuffer, "My float: %.6f\r\n", floatNumber);
sprintf(debug_TxBuffer, "My float: %g\r\n", floatNumber);

Все выводят My float:     \r\n. Как победить никто не в курсе?

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

В IAR где то находил реализацию sprintf, printf. А тут вроде нету такого, дислект только выбрать можно, стоит с99. Можно конечно в ручную какой то параметр дописать, знать бы какой.

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

Toolchain Ac6 STM32 MCU GCC, builder GNU Make Builder, compieler MCU GCC Compieler.

PS: Нашёл: project properties > C/C++ Build > Setings > Tool Settings (TAB) > MCU GCC Linker > Miscellaneous > Linker flags должно быть так -specs=nosys.specs -specs=nano.specs -u _printf_float. У меня -u _printf_float не было.

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

В 30.05.2017 в 12:16, Электронщик сказал:

Блин этот СТМ, аж устал четыре дня с ним разбираюсь, с утра до вечера, АВР рулит))).

Ну хорошо, на чем писали под АВР? с регистрами работали? а теперь наверное HAL осваиваете? ну так у STM32 есть много регистров работайте с ними, разницы совсем никакой нет, даже наоборот в STM32 все регистры сгруппированы и структурированы, все очень удобно, откройте Reference manual и все, там все есть куда чего и зачем.

В 30.05.2017 в 17:06, mail_robot сказал:

никуда не надо добавлять. Надо преобразовать данные из АЦП в строку при помощи sprintf, а потом уже эти данные отправить в UART.

Это вам не ардуино

Обьявляете массив под строку, потом в этот массив загоняете sprintf(data, "%d\n", adc_data), потом массив передаем в UART по всем правилам. Получаем десятичное значение своего ацп

вообще вопросы очень какие то дилетантские и к STM мало отношения имеют. Вам надо язык подковать для начала. А то за ручку водить скоро надоест

Лучше уж структуры гонять по сети, чем нагружать МК такими задачами.

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

7 часов назад, Alex сказал:

Чё то не гуглится ничего... :unsure:

 

http://www.openstm32.org/System+Workbench+for+STM32

13 минуты назад, Darth_Vader сказал:

Мне вот что-то совсем не хочется снова с регистрами работать на STM32, а HAL как раз предлагает более удобную модель.

Ну лень она такая) я вот переходил с АВР и открыв один раз SPL больше туда не заглядывал. а HAL это вообще ппц просто. И куб тоже туда. Так нужно выучить этот HAL + к этому еще и ядро ARM + периферию STM32. А так мороки меньше и понимания больше. Но я далеко не все использую.

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

Причем тут лень? Если на то пошло и программирование на языках высокого уровня это проявление лени. Фигачили бы все в машинных кодах... :D

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

создателя С надо вообще расстрелять по такому случаю шеренгой асмописателей.

18 часов назад, MasterElectric сказал:

к этому еще и ядро ARM

и много там учить?

18 часов назад, MasterElectric сказал:

Лучше уж структуры гонять по сети, чем нагружать МК такими задачами

какими еще структурами, любезный? Человеку надо строчку в UART загнать и все. У него нет никакой сети. И это прямейшая задача МК

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

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

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

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

ну так то обычно массивом и отправляется строка. Массив символов + ДМА (опционально). Проще варианта еще не придумали для STM

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

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

Ну на счет проще я не уверен, по крайней мере для себя. Вот представьте что нужно получать данные (команды) на стороне МК (разные, разных типов (с плавающей точкой)). Парсить строку довольно сложно и накладно по ресурсам, да человеку проще воспринимать данные в текстовом виде, зачем их так представлять для МК, ну раз он работает в двоичной системе счисления, так ему и передавать в двоичной.

Я делаю так, я передаю данные в виде структуры. На стороне МК нужно просто создать указатель на структуру, и данному указателю присвоить адрес входного буфера USART. И все теперь мы работаем с данными просто как со структурой. Все очень просто и удобно. Так делают очень многие это очень удобно (есть правда несколько моментов которые нужно учитывать). Да это сложный вариант для новичков, но он самый эффективный в обработке. Лучше один раз понять, чем городить огород и работать с текстовыми данными. Если есть логический анализатор можете проверить сколько времени уйдет на формирование текстовых сообщений. Я лично так делаю если нужно действительно визуализировать данные для пользователя, экраны и т.д.

Вот и предложил такой вариант, а в целом каждый пишет как хочет.

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

Знаете почему большинство программ для Linux хранит настройки в обычных текстовых, а не бинарных файлах, хотя их и парсить сложнее, и места занимают больше? Их проще просматривать снаружи, для их изменения не нужно специальных программ. Так и тут: если особых ограничений по скорости обмена нет, проще передавать в текстовом виде. Это позволяет отлаживать простейшими программами, без изобретения хитрых протоколов и систем защиты. Ну а если устройство работает на пределе, то, конечно, оптимизация прежде всего.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

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

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

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

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

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

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

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

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

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

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

×
×
  • Создать...