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

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

Страница 18 / 19
Aveal
(@aveal)
Top level Admin

@jebo Если HAL'овский вариант функционирует, можно посмотреть там пошагово под отладчиком, какие регистры участвуют.

ОтветитьЦитата
Создатель темы Размещено : 25.11.2024 19:15
 Jebo
(@jebo)
Level 1

@aveal Я пытался смотреть по программе (что там командами включают) и переделать на CMSIS, но у меня не получилось. Думал тут кто-нибудь на опыте подскажет. 

Попробую сделать как вы сказали, раз никто с таким не сталкивался.

ОтветитьЦитата
Размещено : 25.11.2024 19:25
 Jebo
(@jebo)
Level 1

Доброго времени суток. Пробовал разобраться с записью данных на microSD карту с stm32. У меня плата с установленным слотом microSD (проц - stm32f407zgt6). Брал исходник с этого же сайта. Но почему-то не работает. Пытался смотреть под отладчиком и вижу что в if не заходит, потому что возвращается значение FR_EXIST, вместо FR_OK. Карта форматирована в fat32 и там ничего нет, кроме system volume. Подскажите в чем может быть дело?

ОтветитьЦитата
Размещено : 03.02.2025 18:55
Aveal
(@aveal)
Top level Admin

@jebo Доброго, а внутри f_mount() что происходит? Она FR_EXIST вообще по спецификации не должна возвращать, если там ST не накрутили что-то свое конечно.

ОтветитьЦитата
Создатель темы Размещено : 03.02.2025 18:59
 Jebo
(@jebo)
Level 1

@aveal, там черт ногу сломит. Я не понимаю что они там делают. В большей части функции значение - FR_EXIST. Потом там что-то типа форсированного маунта и возвращается значение - FR_DISK_ERR. Но когда я возвращаюсь в main, то значение res показывает - FR_EXIST. На флешке пусто, но оно и понятно. 

ОтветитьЦитата
Размещено : 03.02.2025 19:45
Aveal
(@aveal)
Top level Admin

@jebo А можете проект скинуть? Неохота создавать...

ОтветитьЦитата
Создатель темы Размещено : 04.02.2025 11:03
 Jebo
(@jebo)
Level 1

@aveal , конечно!

ОтветитьЦитата
Размещено : 04.02.2025 11:41
Aveal
(@aveal)
Top level Admin

А в принципе запись/чтение нормально функционируют? Если без fat_fs через SD_write() записать пару секторов и потом через SD_read() считать данные - будут совпадать с записанными?

И если с этим все ок, то чуть модифицировать, чтобы точное значение res узнать:

res = f_mount(&fileSystem, SDPath, 1);

if(res == FR_OK)
{
    uint8_t path[13] = "testfile.txt";
    path[12] = '\0';
    res = f_open(&testFile, (char*)path, FA_WRITE | FA_CREATE_ALWAYS);
    res = f_write(&testFile, testBuffer, 16, &testBytes);
    res = f_close(&testFile);
}

В целом, похоже что find_volume() выдает FR_DISK_ERR, а это возвращает нас к первой мысли, что в принципе с чтением и записью что-то не так...

ОтветитьЦитата
Создатель темы Размещено : 04.02.2025 12:07
 Jebo
(@jebo)
Level 1

@aveal , только начал разбираться с microSD. Сейчас вкурю что такое sd_write, sd_read, испытаю и по результатам отпишусь.

ОтветитьЦитата
Размещено : 04.02.2025 12:20
 Jebo
(@jebo)
Level 1
Не нашел точного описания функций. Не мудрствовал, создал массив, заполнил его и просто вписал подряд 2 функции:
 
unsigned char buff[4096];
unsigned char buff1[4096];


DRESULT tmp1=0, tmp2=0;
int l, n=0;


for(l=0;l<4096;l++, n++)
  {
    if(n==256)
      n=0;
    buff[l]=n;
  }


tmp1=SD_write(SDPath, buff, 0x0, 1);
tmp2=SD_read(SDPath, buff1, 0x0, 1);
 
Первый параметр насколько я понял из описания не используется и я просто вписал SDPath.
Пробовал менять блок на 4096 и опять на 512 - разницы нет, не пашет.
Смотрел лог. анализатором. Если только SD_write SD_read, то на ножках Clk, D0/Cmd, D1, D2 - ничего нет. 
Если запустить функцию f_mount, то есть Clk и D0/Cmd, но D1, D2 - пусто.
Пытался отлаживать SD_write и видел что возвращает "HAL_SD_ERROR_BUSY".
ОтветитьЦитата
Размещено : 04.02.2025 16:13
 Jebo
(@jebo)
Level 1

Запись от: @jebo

Смотрел лог. анализатором. Если только SD_write SD_read, то на ножках Clk, D0/Cmd, D1, D2 - ничего нет. 
Если запустить функцию f_mount, то есть Clk и D0/Cmd, но D1, D2 - пусто.
Пытался отлаживать SD_write и видел что возвращает "HAL_SD_ERROR_BUSY".

Ошибся(

Вот так правильно:

Смотрел лог. анализатором. Если только SD_write SD_read, то на ножках Clk, Cmd, D0, D1 - ничего нет. 
Если запустить функцию f_mount, то есть Clk и Cmd, но D0, D1 - пусто.
Пытался отлаживать SD_write и видел что возвращает "HAL_SD_ERROR_BUSY".

 

ОтветитьЦитата
Размещено : 04.02.2025 16:33
 Jebo
(@jebo)
Level 1

Ошибка была с моей стороны и едва ли вы могли ее предугадать. Я сразу подсоединил логический анализатор чтобы смотреть сигналы и с прошлого проекта не убрал подтяжку к земле с каналов. Почему-то засаживало только канал D0, при этом Cmd и Clk почему-то было видно. Иначе бы я раньше догадался.

Я убрал подтяжку и сразу все заработало.

 

Извиняюсь что потратил ваше время, Aveal. 😟 

ОтветитьЦитата
Размещено : 04.02.2025 18:46
Aveal
(@aveal)
Top level Admin

@jebo Нет проблем, рад, что заработало 👍

ОтветитьЦитата
Создатель темы Размещено : 05.02.2025 10:41
(@romanio2023)
New member

Помогите пожалуйста . 
Создаю проект но все время проблема . Не видятся функции в майне обьявленные в других файлах..
Инклюды указал и на заголовки и в заголовка... функции экстерн... но все равно не видит ... причем странно некоторые видит а некоторые нет хотя все однотипно...
в свойствах проекта пути указал. русских букв в путях нет.
В чем моя ошибка?
https://drive.google.com/file/d/12oJHp8TfdL8DN2PnlyA0DCXRDutlgw7x/view?usp=sharing

image

и почему две верхнии ошибки относятся к маке , а нижняя обособленна ... хотя тип ошибки один и тот-же

ОтветитьЦитата
Размещено : 12.02.2025 22:38
Aveal
(@aveal)
Top level Admin

@romanio2023 Приветствую!

В настройках проекта надо добавить папки:

изображение

Это основное, ну и плюс я поменял пути на относительные:

изображение

И hi2c1 там 2 раза объявлено, extern можно добавить.

изображение
ОтветитьЦитата
Создатель темы Размещено : 13.02.2025 17:50
Страница 18 / 19
Поделиться: