圏9研究所 工作室

圏9研究所の開発情報資料など

STM32F103 BluePill USBマイク その2:TinyUSB audio_test

1.概要
 STM32CubeIDEにTinyUSBを導入して audio_test を動かす

2.構成
1)回路構成
 BluePillボード : USB → MacBook Air
  audio_test はソフトで作った鋸波データをUSBに出力する example
  マイクが無くてもデータは出力される

3.STM32CubeIDEプロジェクト作成
1)MCU/MPU
 STM32F103C8T/CBT

2)STM32CubeMX設定

タブ

項目

設定

Pinout & Configuration

System Core

NVIC

 

USB high priority or CAN TX interrupts

USB low priority or CAN RX0 interrupts

RCC

 

High Speed Clock(HSE) : Crystal/Ceramic Resonator

SYS

 

Debug : Serial Wire

Connectivity

USB

 

Device(FS) Middlewareは選択しない

Clock Configuration

 

 

 

HSE:8MHz, SYSCLK:72MHz, USB:48MHz

Project Manager

Linker setting

 

 

Minimum Heap Size:0x1000

Minimum Stack Size:0x1000

 

4.TinyUSB のファイルをSTM32CubeIDEに導入
1)TinyUSB ダウンロード

github.com

2)各フォルダー及びファイルの処理一覧
(1)STM32CubeMX生成ファイル
 main.c            TinyUSB の example/device/audio_test/src/main.c のコードを統合修正
 stm32f1xx_it.c    TinyUSB 割込関数追記

(2)TinyUSB

tinyusb-master フォルダー

ファイル

保存先

処理

examples

/device/audio_test/src

 

main.c

Core/Src

STM32CubeMXが生成するmain.c統合修正

tusb_config.h

MCU設定追記

#define CFG_TUSB_MCU OPT_MCU_STM32F1

usb_descriptors.c

修正なし

src

/common, /device,

/host, /osal

 

Core

修正なし プロジェクトへインポート

/class/audio

 

/portable/st

 

 

 

 

tusb_option.h

tusb.c

tusb.h

 

(3)ファイル構成

 

3)ファイル統合修正
(1)main.c
 USER CODE Includes 他
 まとめてIncludesエリアへコピー

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
//#include <stdlib.h>	//必要に応じてインクルードする
//#include <stdio.h>	//必要に応じてインクルードする
//#include <string.h>	//必要に応じてインクルードする

//#include “bsp/board.h”	//STM32CubeMXで生成したコードを使う
#include "tusb.h"

//--------------------------------------------------------------------+
// MACRO CONSTANT TYPEDEF PROTYPES
//--------------------------------------------------------------------+

#ifndef AUDIO_SAMPLE_RATE
#define AUDIO_SAMPLE_RATE   48000
#endif
・
・
・
void led_blinking_task(void);
void audio_task(void);

/* USER CODE END Includes */

 

 USER CODE 2, WHILE

 /* USER CODE BEGIN 2 */

 //board_init();	//ボード設定はSTM32CubeMXで生成したコードを使うためコメントアウト

  // init device stack on configured roothub port
  tud_init(BOARD_TUD_RHPORT);

  // Init values
  sampFreq = AUDIO_SAMPLE_RATE;
  clkValid = 1;

  sampleFreqRng.wNumSubRanges = 1;
  sampleFreqRng.subrange[0].bMin = AUDIO_SAMPLE_RATE;
  sampleFreqRng.subrange[0].bMax = AUDIO_SAMPLE_RATE;
  sampleFreqRng.subrange[0].bRes = 0;

  /* USER CODE END 2 */

 /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	    tud_task(); // tinyusb device task
	    //led_blinking_task();		//USB状態表示 別途実装する
	    audio_task();
    /* USER CODE END WHILE */

 USER CODE 4

/* USER CODE BEGIN 4 */

//--------------------------------------------------------------------+
// Device callbacks
//--------------------------------------------------------------------+

// Invoked when device is mounted
void tud_mount_cb(void)
{
  blink_interval_ms = BLINK_MOUNTED;
}
・
・
・
//--------------------------------------------------------------------+
// BLINKING TASK
//--------------------------------------------------------------------+
void led_blinking_task(void)
{
  static uint32_t start_ms = 0;
  static bool led_state = false;

  // Blink every interval ms
  if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time
  start_ms += blink_interval_ms;

  board_led_write(led_state);
  led_state = 1 - led_state; // toggle
}

/* USER CODE END 4 */