Энкодер на stm32f405 для новичка

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Мудрый кот
Сообщения: 1757
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

linux_rulezz писал(а): Пт июл 03, 2026 01:34:35в мышах на среднюю кнопку, которую нажимаешь куда чаще правой, ставят самый дешёвый микрик! Я уже пару десятков мышей выкинул, у которых отказала эта важная для любой работы кнопка!
Давно известно: Скупой платит дважды.
Вместо того, чтобы купить нормальную мышу, можно конечно "экономить" и покупать их десятками.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 720
Зарегистрирован: Пн сен 15, 2025 08:43:23
Откуда: Маленький СССР посреди террористов

Сообщение linux_rulezz »

"Нормальную" - это какую? Я покупаю по 100-150 рублей, вполне себе нормальные…
Windows must die!
Контактная информация:
Реклама
Мудрый кот
Сообщения: 1757
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

linux_rulezz писал(а): Пт июл 03, 2026 09:34:36Я покупаю по 100-150 рублей
Вот именно! :)))
О чём я и говорил.

PS: На заметку "экономистам": Дешманские ещё и гораздо быстрее выжирают батарейки. Делая "выгоду" от "экономии" ещё более сомнительной.
Опытный кот
Аватара пользователя
Сообщения: 720
Зарегистрирован: Пн сен 15, 2025 08:43:23
Откуда: Маленький СССР посреди террористов

Сообщение linux_rulezz »

jcxz писал(а): Пт июл 03, 2026 09:36:11гораздо быстрее выжирают батарейки
Какие еще батарейки? Зачем мыше батарейки, если она от USB питается?
Windows must die!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Мудрый кот
Сообщения: 1757
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

linux_rulezz писал(а): Пт июл 03, 2026 10:05:06Какие еще батарейки? Зачем мыше батарейки, если она от USB питается?
Ужас! :facepalm: Не думал что маразм "экономия" зашла так далеко. :dont_know:

Может у вас они (мыши) ещё и шариковые??? :)))
Слышали когда-нить об оптических мышах?
Реклама
Опытный кот
Аватара пользователя
Сообщения: 720
Зарегистрирован: Пн сен 15, 2025 08:43:23
Откуда: Маленький СССР посреди террористов

Сообщение linux_rulezz »

"Шариковые" сейчас найти сложно. Приходится убогие "оптические" покупать…
Windows must die!
Контактная информация:
Реклама
Встал на лапы
Сообщения: 141
Зарегистрирован: Пт май 20, 2022 22:19:02
Откуда: Ижевск

Сообщение Ифторик »

Пытаюсь сейчас файлы с CD карты прочитать с помощью библиотеки fatfs через интерфейс CDIO, никак не могу понять в чем проблема, получилось только узнать размер файлов и общий объем флешки, а текст никак не хочет отображаться, я понял если была бы балиберда из разных символов - значит кодировка/распознавание символов не верное, но имена все одинаковые, почему?
Если с счетчиком(энкодером) я могу делать грязь на регистрах, то плешка слишком мудреная со своими 512 битами, не хочется залезать совсем глубоко в битовую передачу.

Код в майне (сократил, чтоб не было громоздко)

Код: Выделить всё

HAL_SD_CardInfoTypeDef CDinfo; //инициализация структуры
HAL_SD_GetCardInfo(&hsd, &CDinfo); //получаем системную информацию
snprintf(iClass, sizeof(iClass)+6, "Class-%lu", CDinfo.Class);	//конвертируем CDinfo.Class в массив символов iClass[64]
str_dot_out(310, 130, iClass, strlen(iClass), 0, 1, SystemFont); //выводим на экран iClass[64]
f_mount(&SDFatFS, (TCHAR const*)SDPath, 1); //монтируем диск
List_Files(""); //получаем список файлов

функция получения списка файлов:
Спойлер

Код: Выделить всё

FRESULT List_Files(const char* path) {
 FRESULT res;
 DIR dir;
 static FILINFO fno;
 res = f_opendir(&dir, path);
 int loc = 0; //приращение расположения на экране
 char fileNameCDi[256]; //имя файла
 char fileSizeCDi[256]; //размер файла
 char errorCDi[8]; //ошибка чтения - если ноль, то ошибки нет
 if (res == FR_OK)
 {
	while (f_readdir(&dir, &fno) == FR_OK & fno.fname[0] != 0)
	{
		HAL_Delay (100);
		if (fno.fattrib & AM_DIR) //папка
		{
			snprintf(fileNameCDi, sizeof(fileNameCDi), "DIR-%hu", fno.fname); //конвертируем fno.fname в массив символов fileNameCDi
			str_dot_out(10, 70+loc, fileNameCDi, strlen(fileNameCDi), 0, 0, SystemFont); //выводим на экран
		}
		else //файл
		{
			snprintf(fileSizeCDi, sizeof(fileSizeCDi), "File-%lu;_%lubyte", fno.fname, fno.fsize);
			str_dot_out(10, 70+loc, fileSizeCDi, strlen(fileSizeCDi), 0, 0, SystemFont); //выводим на экран
		}
		loc = loc+20; //шаг расположения
		}
		str_dot_out(10, 70+loc, "end", 3, 0, 0, SystemFont); //список закончился, выводим на экран end
		f_closedir(&dir);
	}
	snprintf(errorCDi, sizeof(errorCDi), "error_%lu", res); 
	str_dot_out(10, 50, errorCDi, sizeof(errorCDi), 0, 0, SystemFont); //выводим на экран ошибку
	return res;
 }
Вложения
SD to LCD.jpg
(69.61 КБ) 2 скачивания
Встал на лапы
Сообщения: 141
Зарегистрирован: Пт май 20, 2022 22:19:02
Откуда: Ижевск

Сообщение Ифторик »

Я разобрался, fno.fname записывается символами по 16 бит, а для вывода на экран нужен восьмибитный char
Вместо команды snprintf я ввел так:

Код: Выделить всё

for (int i = 0; i < 32; i++)
{
fileNameCDi[i] = (char)fno.fname[i];
}
snprintf
я думал что так тоже можно записать:

Код: Выделить всё

fileNameCDi[i] = fno.fname[i];
типа старшие биты удалятся, младшие останутся, ну логично же.
Потрогал лапой паяльник
Сообщения: 398
Зарегистрирован: Чт май 07, 2026 00:30:38

Сообщение Zapolyarny »

Ифторик писал(а): Вт июл 07, 2026 19:36:13 я думал что так тоже можно записать:

Код: Выделить всё

fileNameCDi[i] = fno.fname[i];
типа старшие биты удалятся, младшие останутся, ну логично же.
Неявное приведение типов - плохая практика. Где-то оно отработает корректно, а где-то (и это чаще всего) доставит массу проблем. Кроме того, такая запись предполагает, что типы одинаковы, то есть, в Вашем случае стало плохо читаться, так как требуется дополнительная информация об их неравенстве. В общем, так делать нельзя.
Встал на лапы
Сообщения: 141
Зарегистрирован: Пт май 20, 2022 22:19:02
Откуда: Ижевск

Сообщение Ифторик »

Я использовал фукцию snprintf чтоб превратить обычную переменную в массив данных char для вывода на дисплей, но похоже тут опять никакой магии я не нашел, я же конечно не явно прировнял два массива, а через эту функцию.
В топку закинул и думал что оно само там разберется))
Вымогатель припоя
Сообщения: 619
Зарегистрирован: Пн фев 16, 2026 17:30:02

Сообщение Rapra »

Помогаю пользоваться ИИ-ботом, по четвергам - бесплатно

Изображение

Так что Линукс Эдуардович отчасти был прав!
Потрогал лапой паяльник
Сообщения: 398
Зарегистрирован: Чт май 07, 2026 00:30:38

Сообщение Zapolyarny »

Rapra писал(а): Чт июл 09, 2026 14:04:02 Так что Линукс Эдуардович отчасти был прав!
В помойку Линукса Эдуардовича. Не думаю, что форумы создавались для подобного поведения.
Мудрый кот
Сообщения: 1757
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

Ифторик писал(а): Вт июл 07, 2026 19:36:13Вместо команды snprintf я ввел так:

Код: Выделить всё

for (int i = 0; i < 32; i++)
{
fileNameCDi[i] = (char)fno.fname[i];
}
snprintf
Это говнокод. Так делать нельзя.

Если нужны имена файлов в однобайтовом (ASCII) режиме, то следует просто перевести FatFS в режим ASCII. Вместо Unicode. FatFS всё умеет.
Ответить

Вернуться в «ARM»