Top.Mail.Ru
Уведомления
Очистить все

[Закреплено] STM32 для начинающих

Страница 14 / 17
(@eduard)
Level 4 Moderator

ST не рекомендует использовать хардварный сигнал NSS. Зачем вы в него упёрлись?

Сами управляйте выбором кристалла.

ОтветитьЦитата
Размещено : 28.08.2023 21:20
Aveal
(@aveal)
Top level Admin

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

ОтветитьЦитата
Создатель темы Размещено : 28.08.2023 21:38
(@eduard)
Level 4 Moderator

Почитайте на досуге.
Лежат, пока админу место не потребуется.

Это он сам будет решать.

ОтветитьЦитата
Размещено : 29.08.2023 18:43
 stm
(@stm)
Level 4

Как выставить пробел для выделенного текста в Keil?
Выделил несколько строчек кода и хочу для всех этих строчек кода применить пробел оптом.

ОтветитьЦитата
Размещено : 20.09.2023 03:54
Aveal
(@aveal)
Top level Admin

@stm tab / shift+tab работают в кейле на выделенном?

ОтветитьЦитата
Создатель темы Размещено : 20.09.2023 10:25
 stm
(@stm)
Level 4

Шифт+Таб работает в Keil, но в результате применения убираются пробелы в начале каждой строки.

STM
ОтветитьЦитата
Размещено : 20.09.2023 12:27
Aveal
(@aveal)
Top level Admin

@stm tab должен добавлять значит, я Keil просто сам не использую, не могу проверить.

ОтветитьЦитата
Создатель темы Размещено : 20.09.2023 13:56
 stm
(@stm)
Level 4

Подключаю usb флеш накопитель к STM32.
STM32 настроен как хост.
f_mount, f_mkfs возвращают FR_DISK_ERR.
Событие HOST_USER_CLASS_ACTIVE наступает, то есть подключение флеш накопителя распознаётся.
Переходник Мини USB - USB до флеш накопителя короткий.
Пробовал с разными флеш накопителями.
Keil компилятор 6.19
Может у кого такое было?
В интернете возникала эта проблема у некоторых, но решение непонятное.
Некоторые пишут, что связано с программным обеспечением. Я переустановил Keil, поставил другой компилятор, ничего не меняется.

ОтветитьЦитата
Размещено : 26.09.2023 01:46
 stm
(@stm)
Level 4

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

Решение:
Вам надо для,
USB_OTG_FS_DM
USB_OTG_FS_DP
сделать Pull - up 

png

 

ОтветитьЦитата
Размещено : 26.09.2023 08:13
 stm
(@stm)
Level 4

Нет, это не причина.
Просто совпадение было. Что то не так с циклом while

ОтветитьЦитата
Размещено : 26.09.2023 08:31
 stm
(@stm)
Level 4

Я нашёл причину:
Если я в main.c в цикле while пишу HAL_Delay(1000);
то f_mount возвращает FR_DISK_ERR.
Не важно до MX_USB_HOST_Process(); я пишу HAL_Delay или после MX_USB_HOST_Process();

Это можно как то исправить?

png
ОтветитьЦитата
Размещено : 26.09.2023 09:00
Aveal
(@aveal)
Top level Admin
От: @stm

Это можно как то исправить?

Убрать задержку из цикла while() и вообще в основной цикл не ставить HAL_Delay(), тем более с таким огромным периодом.

По сути как это может работать, если обслуживание USB происходит раз в секунду.

ОтветитьЦитата
Создатель темы Размещено : 26.09.2023 09:45
 stm
(@stm)
Level 4

Здесь

https://kkmspb.ru/development/microcontrollers/USB/USB-Device/Keil5-STM32CubeMX-Usb-Hid-working-fine.php
говорится об этой проблеме, но к сожалению причины не объяснены.
Предлагается задежки заменять таймером, но это ведь неудобно.

>По сути как это может работать, если обслуживание USB происходит раз в секунду.
И как мне работать с другими задачами без HAL_Delay, когда в цикле есть MX_USB_HOST_Process(); ?

Например мне надо работать с LCD дисплеем параллельно.
А без задержек там никак.

ОтветитьЦитата
Размещено : 26.09.2023 09:47
Aveal
(@aveal)
Top level Admin

@stm FreeRTOS и разные задачи в разные таски.

Либо неблокирующие задержки, принцип такой - простейший вариант:

#define CALL_PERIOD          1000

uint32_t lastCallTimestampMs = 0;

int main(void)
{
  while (1)
  {
    if ((uwTick - lastCallTimestampMs) >= CALL_PERIOD)
    {
      // Call task every 1000 ms
      lastCallTimestampMs = uwTick;
    }
    
    // Other processes
  }
}
ОтветитьЦитата
Создатель темы Размещено : 26.09.2023 09:58
Aveal
(@aveal)
Top level Admin
От: @aveal

Либо неблокирующие задержки

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

ОтветитьЦитата
Создатель темы Размещено : 26.09.2023 10:00
Страница 14 / 17
Поделиться: