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

[Решено] STM32F407 diskavery + I2S не работает от слова совсем.

(@dimaxa)
New member

Всем привет, помогите с пресловутым 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.

Объясните пожалуйста дурачку что не так делаю.

Цитата
Создатель темы Размещено : 04.01.2023 09:09
Aveal
(@aveal)
Top level Admin

Привет, можешь проект выложить?

ОтветитьЦитата
Размещено : 09.01.2023 10:53
(@dimaxa)
New member

@aveal Привет. Могу. У меня сейчас есть продвижения, но все равно вообще не понятное творится.

В кратце: в настройках I2S сделал передачу данных старшим битом вперед, стояло стандартный кодек филипс. Логическим анализатором слизал инициализацию 43СL22 с прошивки в виде бинарника проигрывание музыки. В общем стал появляться всякий шум писк, но блин! Все не так! Все!

Как я понимаю я к примеру из массива отправляю например плавно возрастающие значения и у меня на выходе осциллограф должен показать что-то типа плавно возрастающей с обрывом в конце, то есть типа пил. Но на выходе просто мелкий шум, типа как магнитофоны шумят когда паузу нажимают. Хотя логический анализатор показывает что данные прилетают верные. Потом подключил переменный резистор на ADC и через DMA сливаю с него в I2S данные, возникают какие-то писки свисты. В общем капец какой-то. 

Подчищу код от мусора, ибо сейчас там караул и выложу с фото осциллографа что на выходе у микросхемы.

Я в отчаянии, 5 дней и просто вопросов больше чем ответов, и никто в инете с ней особо кроме как станадартной библиотекой не умеет работать.

ОтветитьЦитата
Создатель темы Размещено : 09.01.2023 19:01
(@dimaxa)
New member

В общем в архиве исходник в 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 МГц нету, оно появляется после окончания инициализации, это все слизано с рабочей прошивки, если ее прошить и не подключать флешку, то в наушниках играет короткая музыкальная заставка и мигает синий светодиод. Если сразу не поет, надо нажать ресет.

 2 раза передается
 инициализации

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

ОтветитьЦитата
Создатель темы Размещено : 10.01.2023 13:10
Aveal
(@aveal)
Top level Admin

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

ОтветитьЦитата
Размещено : 10.01.2023 16:34
(@dimaxa)
New member

@aveal 3 часа мучений и вроде есть положительный результат. 

Ваша инициализация слегка шипит, прям еле еле, при вращении переменного резистора в наушниках слышно как меняется выходной потенциал, а осциллограф показывает синусоиду. 

I2S работает в режиме DMA, через него заливаются данные с ADC.

С моей инициализацией шипение раз так в 100 сильнее, просто белый шум.

Сейчас настроил чтоб потенциометр задавал частоту прерывания таймера, попробую теперь вывести хоть какой-то звук.

 

В общем ОГРОМНОЕ СПАСИБО!

ОтветитьЦитата
Создатель темы Размещено : 10.01.2023 21:31
Aveal
(@aveal)
Top level Admin

@dimaxa Отлично, рад что продвинулось 👍 

ОтветитьЦитата
Размещено : 11.01.2023 13:04
Поделиться: