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

STM32 для чайника


ART_ME

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

возможно вот это как то поможет

https://habrahabr.ru/post/323674/

обратите внимание не код, который надо видимо вручную добавлять в usbd_cdc_if.c

uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
{
  uint8_t result = USBD_OK;
  /* USER CODE BEGIN 7 */ 
  USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf, Len);
  result = USBD_CDC_TransmitPacket(&hUsbDeviceFS);
  /* USER CODE END 7 */ 
  return result;
}

скорее всего функция отправки не принимает абы какой буфер из любого удобного места

по поводу описания. Судя по всему библиотека USBD является сторонней, как и FreeRTOS и доку на нее надо искать отдельно. В стандартный HAL она не входит. И функция отправки кстати не имеет префикса именования HAL_ а имеет префикс CDC_, что как раз и говорит о том, что она не родная

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

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

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

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

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

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

У меня функция отправки вот так выглядит, всё работает.

uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
{
  uint8_t result = USBD_OK;
  /* USER CODE BEGIN 7 */ 
  USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData;
  if (hcdc->TxState != 0){
    return USBD_BUSY;
  }
  USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf, Len);
  result = USBD_CDC_TransmitPacket(&hUsbDeviceFS);
  /* USER CODE END 7 */ 
  return result;
}

Если на функции не повисает значит TxState не тот что нужно. Нужно разбираться почему так

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

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

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

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

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

Коллеги спасибо. Буду пробовать.

Потихоньку засасывает) деваться один фиг некуда))

В данный момент пытаюсь подружить ESP12 с STM32F103 по UART. Наконец таки получилось с проверкой на буквы и цифры, хотелось бы контрольную сумму считать но что то не понимаю как  сложить значения в чар строке, надо С++ подтянуть, его тянуть похоже можно бесконечно. Отладку вывожу в SW0. По сути то что в ардуино Ide я бы сделал за час полтора, делал неделю, не спал не ел)  вчера на работу проспал в первые в жизни на 4 часа))) Надеюсь не зря.

В общем то нашел для себя способ удобный, писать в кодеблок, потом переносить в кейл, там наглядней получается, это от недостатка опыта и С++.

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

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

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

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

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

14 hours ago, MihaNN52 said:

По сути то что в ардуино Ide я бы сделал за час полтора

а потом, когда освоится, будет другая мысль - то что я сделал за час на STM я бы неделю ковырял на ардуино. Если бы вообще на ардуино такое получилось...

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

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

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

Начал меня мучить такой вопрос, куда правильно вести землю от нагрузочных конденсаторов кварцевого резонатора. Ясно, что можно кинуть её на общий земляной полигон, но правильно будет подвести к какой то ноге GND. В корпусе TQFP64_N их 4. Так вот, кто знает к какой? Или это уже у меня паранойя?) Да, контроллер серии STM32F103.

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

2 hours ago, GOR23 said:

можно кинуть её на общий земляной полигон

этого обычно более чем достаточно. Вы же не усилитель класса Hi-End строите.

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

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

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

Значит зря заморачиваюсь. А на счёт того, что правильно или не правильно, то у меня такие соображения. Есть схема к которой подключается кварц в контроллере, она предсатвляет собой отдельный блок. Этот блок подключается к общей земле контроллера. Скорей всего место этого подключения к какому то пину GND ближе, а к какому то дальше. Чем ближе к этому месту подключить землю с нагрузочных конденсаторов, тем будет лучше (по этой дорожке будет течь только один ток с этих нагрузочных конденсаторов, вплоть до самого МК). Думаю мысль ясна. Обычно тоже кидаю её на земляной полигон да и всё, сейчас же просто решил спросить, узнать мнение других...

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

Тогда получается, что подключать землю с нагрузочных конденсаторов сразу к общему полигону плохая идея, по крайней мере в моём случае. Я аналоговую и цифровую земли всегда дросселем разделяю. Ток будет через тот дроссель течь (из цифрового полигона в аналоговую землю).

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

это не нагрузочные конденсаторы и ток от них будет микроскопическим. Мозги себе не грейте уважаемый. В цифровых цепях все ваши хитрые колдунства совершенно бесполезны

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

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

Подскажите, пожалуйста, почему вот этот код

HAL_ADC_Start(&hadc1);
adcResult = HAL_ADC_GetValue(&hadc1);
HAL_ADC_Stop(&hadc1);

перед бесконечным циклом в adcResult возвращает 0, а в самом цикле работает как надо? :o

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

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

Функция HAL_ADC_PollForConversion(&hadc1,10); позволяет дождаться корректного значения после запуска АЦП. Она прерывает выполнение программы и опрашивает флаг готовности данных АЦП

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

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

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

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

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

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

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

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

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

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

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

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

  • Сообщения

    • Это тот самый проект, просто следующий этап задачи - реализовать чтение уже записанных файлов на стороне МК.
    • Когда снова появился интерес к усилителям, тоже хотел всех обмануть, попробовал 7294 в разных схемах, 3886 тоже несколько способов приготовления, вроде и неплохо играет, если ничего другого не слушал, годится. Но червячок сподвиг сделать Натали Хоум, УХ! челюсть отвисла, наслушаться не мог, узнал, что такое сцена в звуке, динамика, детальность, да всё лучше. Вот я всегда и спрашиваю, по сравнению с какими другими УМ играет хорошо расхваливаемый усилитель.
    • @Armenn Хорошо. Сделал резистор на 5 Ом.  Результата два. 1. Если включить блок питания в сеть, а уже потом подключить резистор на 5 Ом в фиолетовый провод, тогда резистор просто будет греться.  2. Если подключить резистор на 5 Ом в фиолетовый провод, а уже потом включить блок питания в сеть, тогда случится следующее: лампочка предохранителя от КЗ засветится (через которую я подключаю БП в сеть), а блок питания начнет пищать. Заснял это на видео -   
    • Ну-вы и сравнили. Вот когда будете строить сварочный инвертор на такую частоту-то там нужно  будет учитывать скин эффект. А на частоты до 75кгц-можно забить, отбить и не принимать во внимание. Тем более-что все стараются аппараты до 200А строить. На кольце плотность тока до 15А на мм ^2, на Ш от 10А на  мм^2 А вентилятор-он все лишние тепло сдует ко льдам в Антарктиде. Проверьте монолит 2,12мм, я таким мотаю СТ. Интересно-что там с ним делается на частотах от 30 до 50кГц? Длинна провода примерно 2 метра-На сердечник Е70 влазит 18 витков
    • Добрый вечер всем!  Проблема следующая: Есть флешка с записанной файловой системой через 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! Что я забыл еще добавить?
×
×
  • Создать...