Урок 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();
}
Соберем проект и прошьем контроллер.
Также после прошивки желательно зайти в параметры устройств воспроизведения и установить данное устройство по умолчанию
Предыдущая часть Программирование МК STM32 Следующий урок
Техническая документация на Аудио ЦАП CS43L22
Купить отладочную плату можно здесь STM32F4-DISCOVERY
Смотреть ВИДЕОУРОК
Приветствую. Могли бы Вы объяснить чем функции Callback-и отличаются от IRQHendler-ов которые в файле _it.c.
Вызов функций Callback встроен в функции IRQHendler, но перед данными вызовами отфильтрованы уже нужные флаги, то есть обработка идёт прерывания с нужным флагом. Например, если пользоваться хендлером в случае, если нам надо отследить окончание счёта таймера, то мы туда будем попадать и в других случаях, а если колбэком — то только по окончанию счёта или по совпадению.
Не могу понять 🙁
Собрал исходники проекта (все собралось без ошибок) но плата не видится в диспетчере устройств.
Доброго дня, а как сделать чтобы плата работала как звуковой вход?