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

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

Страница 1 / 2
(@dimaxa)
Level 1

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

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

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

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

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

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

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

В общем в архиве исходник в 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)
Level 1

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

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

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

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

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

 

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

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

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

ОтветитьЦитата
Размещено : 11.01.2023 13:04
(@dimaxa)
Level 1

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

Если закоментированную строку запустить, то с ADC данные идут, при вращении резистора социллограф выдает почти синусоиду, то есть все корректно передается, но как только с массива передаю, полная хрень получается. потенциометром регулирую частоту, она меняется, но вместо синусоиды там типа синусоида которая еще пилой промодулирована. Я в тупике 🙁

 Инициализация переферии выполнена кубом 4-й версии. 

ОтветитьЦитата
Создатель темы Размещено : 12.02.2024 13:51
(@dimaxa)
Level 1

В в порт 232 выдаю данные с переменной массива, там синусоида идет, а в наушниках фигня

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

@dimaxa а если постоянный период для TIM2 задать для теста, в районе 9 мкс?

но вместо синусоиды там типа синусоида которая еще пилой промодулирована

А есть изображение этого эффекта?

ОтветитьЦитата
Размещено : 12.02.2024 14:26
(@dimaxa)
Level 1

@aveal Сейчас с работы пишу, вечером сделаю фотку

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

@dimaxa 👍

ОтветитьЦитата
Размещено : 12.02.2024 14:39
(@dimaxa)
Level 1

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

ОтветитьЦитата
Создатель темы Размещено : 12.02.2024 18:49
(@dimaxa)
Level 1

Хм, читаю сейчас про I2S и наткнулся на такую строку

HAL_I2S_Transmit_DMA(&hi2s2, (uint16_t*)wavReadBuffer2, WAV_BUFFER_SIZE/2);

Так вот у меня

WAV_BUFFER_SIZE/2

не 256, а 1. Но вчера пробовал и 2, 32, 64 и 256, осциллограф показал какие-то холмы и горы вместо синусоиды и частоты переменником переставала регулироваться.

и почему в этой записи

(uint16_t*)wavReadBuffer2

нет значка & перед wavReadBuffer2 ? У меня без этого значка вообще не работает. Голова уже кругом идет, может я туплю уже и не вижу очевидного, но что есть то есть. 🙁

 

 

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

Запись от: @dimaxa

(uint16_t*)wavReadBuffer2

Имя массива эквивалентно указателю на первый элемент, поэтому & не нужен, могло быть &wavReadBuffer2[0]. Попробуй все-таки зафиксировать жестко период TIM2, без потенциометра.

 

 

ОтветитьЦитата
Размещено : 13.02.2024 11:29
Страница 1 / 2
Поделиться: