Всем привет, помогите с пресловутым I2S, 2 дня ничего не получается, уже на грани нервного срыва, у всех что-то работает у меня ну не в какую
Генерирую исходник STM32CubeMX для keil 4, ножки настаиваю согласно схеме diskavery.
После генерации кода, ничего не трогаю, а только в тело основного цикла вставляю
HAL_I2S_Transmit_DMA(&hi2s3, (uint16_t*)Audio_Buffer, 1000); и полная тишина! а вот если так сделать
HAL_I2S_Transmit_DMA(&hi2s3, (uint16_t*)255, 1000); порт оживает и начинает генерировать.
Что не так? Почему он не генерирует с переменной Audio_Buffer.
Объясните пожалуйста дурачку что не так делаю.
Привет, можешь проект выложить?
@aveal Привет. Могу. У меня сейчас есть продвижения, но все равно вообще не понятное творится.
В кратце: в настройках I2S сделал передачу данных старшим битом вперед, стояло стандартный кодек филипс. Логическим анализатором слизал инициализацию 43СL22 с прошивки в виде бинарника проигрывание музыки. В общем стал появляться всякий шум писк, но блин! Все не так! Все!
Как я понимаю я к примеру из массива отправляю например плавно возрастающие значения и у меня на выходе осциллограф должен показать что-то типа плавно возрастающей с обрывом в конце, то есть типа пил. Но на выходе просто мелкий шум, типа как магнитофоны шумят когда паузу нажимают. Хотя логический анализатор показывает что данные прилетают верные. Потом подключил переменный резистор на ADC и через DMA сливаю с него в I2S данные, возникают какие-то писки свисты. В общем капец какой-то.
Подчищу код от мусора, ибо сейчас там караул и выложу с фото осциллографа что на выходе у микросхемы.
Я в отчаянии, 5 дней и просто вопросов больше чем ответов, и никто в инете с ней особо кроме как станадартной библиотекой не умеет работать.
В общем в архиве исходник в keil 4 и Cubemx. При вращении переменного резистора 4,7 к0м питание от +3,3 В в наушниках раздаются всякие свисты шумы.
Сделал фотку отрезка инициализации от рабочего прошивочного файла. Почему-то при инициализации, команды передаются по 2 раза.
Например:
1 адрес 0x4A регистр 0х02 данные 0х01
2 адрес 0x4A регистр 0х02
3 адрес 0x4A регистр 0х01
И так передаются все команды настройки. Странно почему, инициализировал только по пункту 1, без дальнейшего отдельного дублирования команд. В общем на фото видно.
Так же на следующей фото видно что при инициализации микросхемы по I2C на выводе MCLK тактирования 12 МГц нету, оно появляется после окончания инициализации, это все слизано с рабочей прошивки, если ее прошить и не подключать флешку, то в наушниках играет короткая музыкальная заставка и мигает синий светодиод. Если сразу не поет, надо нажать ресет.
https://cloud.mail.ru/public/R1yC/c8R5Lv8nq В архиве исходник, в корне *.hex прошивка играющая заставку если не подключена флешка
В общем вопрос, как проиграть или фрагмент мелодии или сгенерировать какой-то сигнал, к примеру синусоиду.
Инициализацию делал так: Возможно в исходнике будут отличия, игрался с регистрами, это ни на что не повлияло по сути
адрес DAC регистр дата
0х4А 0х02 0x01
0х4А 0х04 0xAF
0х4А 0х05 0x81
0х4А 0х06 0x04
0х4А 0х20 0xCB
0х4А 0х21 0xCB
0х4А 0х02 0x9E включение питания
0х4А 0х0A 0x00
0х4А 0х0E 0x04
0х4А 0х27 0x00
0х4А 0х1F 0x0F
0х4А 0х1A 0x0A
0х4А 0х1B 0x0A
Попробуй минимальный-простейший пример запустить, типа как тут я делал - ссылка. Инициализацию опять же можно взять оттуда, делал сто лет назад, но точно помню, что все работало четко - то есть высота нот соответствовала подаваемым сигналам.
@aveal 3 часа мучений и вроде есть положительный результат.
Ваша инициализация слегка шипит, прям еле еле, при вращении переменного резистора в наушниках слышно как меняется выходной потенциал, а осциллограф показывает синусоиду.
I2S работает в режиме DMA, через него заливаются данные с ADC.
С моей инициализацией шипение раз так в 100 сильнее, просто белый шум.
Сейчас настроил чтоб потенциометр задавал частоту прерывания таймера, попробую теперь вывести хоть какой-то звук.
В общем ОГРОМНОЕ СПАСИБО!