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

STM32 для чайника


ART_ME

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

 

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

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

Я похожие ощущения испытывал когда в школе с Бейсика на Си с Паскалем переходил :D

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

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

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

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

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

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

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

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

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

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

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

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

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

С функциями АЦП разобрался, по крайней мере в ЮАРТ что-то стало лезть, теперь вопрос по функции отправки ЮАРТ 

Делаю так ругается, не пойму что не так, если отправляю через регистр то отправляется, что тут не так не пойму

HAL_USART_Transmit(husart1, data, data, 10);

 

Описание функции с UM1850:

HAL_USART_Transmit Function Name HAL_StatusTypeDef HAL_USART_Transmit (USART_HandleTypeDef * husart, uint8_t * pTxData, uint16_t Size, uint32_t Timeout)

Function Description Simplex Send an amount of data in blocking mode. Parameters 

husart: Pointer to a USART_HandleTypeDef structure that contains the configuration information for the specified USART module.

 pTxData: Pointer to data buffer HAL USART Generic Driver UM1850 628/655 DOCID027328 Rev 1

 Size: Amount of data to be sent  Timeout: Timeout duration Return values  HAL status

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

вторая дата должна быть не датой, а размером посылки в байтах. Таймаут задается в милисекундах на всю передачу. С ним поосторожнее. Таймаут указывается на случай, если ваша функция по каким то причинам не сможет отправить. Так как она относится к прерывающим (interruptuble) то она останавливает программу на время своего выполнения. Если за время таймаута передача не будет закончена, то функция передачи прервется и программа продолжит выполнение. Функция вернет error code. Правда у вас он не отслеживается. Правильным вызовом будет являться if(finc != HAL_OK) Error_Handler();

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

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

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

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

HAL_USART_Transmit(husart1, data, data, 10);

тут две даты. Следовательно вторая. Дескриптор не в счет. Тем более дескриптор надо передавать ссылкой

HAL_USART_Transmit(&husart1, data, sizeof(data), 10);

 

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

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

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

правда я не пойму зачем передается дескриптор синхронного порта... И зачем использовать именно синхронный порт с контролем для USB донгла? Он и по асинхроннику прекрасно работает

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

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

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

Так я что нашел отправка по USART в 1850, то и взял, думал что фугкция общая и для UART и для USART, в самом нижнем скриншоте взял уже ЮАРТ, так ругается на тип переменной, а в скриншоте который выше там USART ртак ругается что нету husart1

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

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

Так я так и указывал,только не прописал sizeof, да и все равно ругается

Screenshot_7.jpg

Screenshot_8.jpg

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

ну компилятор же русским языком пишет что не так. Вы вообще в курсе что такое язык программирования С?

data у вас видимо определена как целое со знаком, а требуется беззнаковый аргумент типа uint8_t. Поменяйте тип данных

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

там правда есть и такая функция, не знаю зачем

UART и USART это две совершенно разные вещи, хоть и различаются всего в одной букве

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

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

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

А то я не в курсе, то уже отмену нажимал и сделал скриншот, я уже до этого пробовал unsigned char и byte и uint8_t   одна фигня

Вот пример

Screenshot_9.jpg

Вот еще

Screenshot_10.jpg

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

надо смотреть полный листинг

 

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

следовательно надо писать

HAL_UART_Transmit(&huart1, &data, sizeof(data), 10);

я то думал data это массив и он автоматичеки транслируется в ссылку при передаче индекса как параметра. А у вас просто переменная. Тут нужен явный адрес (ссылка)

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

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

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

Цитата

UART и USART это две совершенно разные вещи, хоть и различаются всего в одной букве,

Это я тоже знаю правда работал на АВР только с ЮАРТ, но в АВР и в СТМ блок то один, только настройка разная с синхронизацией и без, так как УАРТ это ж универсальный синхро-ассинхронный приемо-передатчик, и только от выбора управляющего слова зависит режим.

12 минуты назад, mail_robot сказал:

надо смотреть полный листинг

 

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

следовательно надо писать


HAL_UART_Transmit(&huart1, &data, sizeof(data), 10);

я то думал data это массив и он автоматичеки транслируется в ссылку при передаче индекса как параметра. А у вас просто переменная. Тут нужен явный адрес (ссылка)

Спасибо попробую

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

UART работает( ну он у меня и через регистр отправлял), только с АЦП какая-то ерунда идет в ЮАРТ, придется настройки АЦП копать, да посмотреть чтобы в десятичном формате выводило, а не в ASCii

куда здесь добавить "%d"?

HAL_UART_Transmit(&huart1, &data, sizeof(data), 10);

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

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

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

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

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

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

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

То что нужно это я знаю, просто в разных компиляторах все по разному допустим в codevision printf и отправляем переменную с %d и все, в ардуино это автоматом делается, в плане оно видит что переменная и сама выводит в десятичном формате, а в C видел и cout ,и printf и т.д все от компилятора зависит. Допустим в IAR нет переменной byte в других есть, из за разности функций переменных и т.д. и появляется путаница, как по мне.

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

это все деревенщина. Для STM есть только один единственный язык - С99

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

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

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

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

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

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

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

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

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

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

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

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

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