STM Урок 48. USB DEVICE AUDIO. Часть 3



Урок 48

 

Часть 3

 

USB DEVICE AUDIO

 

Предыдущая часть Программирование МК STM32 Следующий урок

 

В прошлой части нашего урока мы написали ещё несколько функций и подключили их в обработчики команд драйвера звуковой карты.

Вставим ещё одну функцию в файл audioplay.c

 

//——————————————————

uint8_t AudioPlay_SetVolume(uint8_t Volume)

{

  uint8_t ret = AUDIO_OK;

  /* Call the codec volume control function with converted volume value */

  if(cs43l22_SetVolume(AUDIO_I2C_ADDRESS, Volume) != 0)

  {

    ret =  AUDIO_ERROR;

  }

  /* Return AUDIO_OK when all operations are correctly done */

  return ret;

}

//——————————————————

 

 

Вставим прототип данной функции в файл audioplay.h

 

void AudioPlay_ChangeBuffer(uint16_t *pData, uint16_t Size);

uint8_t AudioPlay_SetVolume(uint8_t Volume);

В файле usbd_audio_if.c в обработчике AUDIO_VolumeCtl_FS вызовем эту функцию

static int8_t AUDIO_VolumeCtl_FS (uint8_t vol)

{

  /* USER CODE BEGIN 3 */

  AudioPlay_SetVolume(vol);

  return (USBD_OK);

  /* USER CODE END 3 */

}

 

Вставим ещё одну функцию в файл audioplay.c

 

//——————————————————

uint8_t AudioPlay_SetMute(uint32_t Cmd)

{

  uint8_t ret = AUDIO_OK;

  /* Call the Codec Mute function */

  if(cs43l22_SetMute(AUDIO_I2C_ADDRESS, Cmd) != 0)

  {

    ret = AUDIO_ERROR;

  }

  /* Return AUDIO_OK when all operations are correctly done */

  return ret;        

}

//——————————————————

 

Напишем для нее прототип

 

uint8_t AudioPlay_SetVolume(uint8_t Volume);

uint8_t AudioPlay_SetMute(uint32_t Cmd);

 

 

Вставим вызов функции в файле usbd_audio_if.c в одноименный обработчик

 

static int8_t AUDIO_MuteCtl_FS (uint8_t cmd)

{

  /* USER CODE BEGIN 4 */

  AudioPlay_SetMute(cmd);

  return (USBD_OK);

  /* USER CODE END 4 */

}

 

В файле audioplay.c в обработчиках добавим вызовы данных обработчиков в библиотеке USB

 

//——————————————————

void AudioPlay_HalfTransfer_Callback(void)

{

        HalfTransfer_CallBack_FS();

}

//——————————————————

void AudioPlay_TransferComplete_CallBack(void)

{

        TransferComplete_CallBack_FS();

}

 

Соберем проект и прошьем контроллер.

Также после прошивки желательно зайти в параметры устройств воспроизведения и установить данное устройство по умолчанию

 

image10

 

 

Предыдущая часть Программирование МК STM32 Следующий урок

 

Исходный код

 

 

Техническая документация на Аудио ЦАП CS43L22

 

 

Купить отладочную плату можно здесь STM32F4-DISCOVERY

 

 

Смотреть ВИДЕОУРОК

 

STM32 USB DEVICE AUDIO

4 комментария на “STM Урок 48. USB DEVICE AUDIO. Часть 3
  1. Евгений:

    Приветствую. Могли бы Вы объяснить чем функции Callback-и отличаются от IRQHendler-ов которые в файле _it.c.

    • Вызов функций Callback встроен в функции IRQHendler, но перед данными вызовами отфильтрованы уже нужные флаги, то есть обработка идёт прерывания с нужным флагом. Например, если пользоваться хендлером в случае, если нам надо отследить окончание счёта таймера, то мы туда будем попадать и в других случаях, а если колбэком — то только по окончанию счёта или по совпадению.

  2. Valery:

    Не могу понять 🙁
    Собрал исходники проекта (все собралось без ошибок) но плата не видится в диспетчере устройств.

  3. Alex:

    Доброго дня, а как сделать чтобы плата работала как звуковой вход?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*