1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
22
23
24
28
29
34
39
40
41
46
47
48
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
85
86
87
88
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
112
113
114
115
116
117
120
121
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
151
152
156
157
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
191
192
193
194
195
198
206
210
222
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
308
/* ... */
#include "waveplayer.h"
#include "waverecorder.h"
Includes
FATFS USBH_FatFs;
#define LTDC_BACKGROUND_LAYER 0
#define LTDC_FOREGROUND_LAYER 1
Private define
USBH_HandleTypeDef hUSBHost;
AUDIO_ApplicationTypeDef AppliState = APPLICATION_IDLE;
static volatile uint32_t MfxToggleLed = 0;
Private variables
static void USBH_UserProcess(USBH_HandleTypeDef *phost, uint8_t id);
static void SystemClock_Config(void);
static void AUDIO_InitApplication(void);
Private function prototypes
/* ... */
int main(void)
{
/* ... */
HAL_Init();
SystemClock_Config();
AUDIO_InitApplication();
USBH_Init(&hUSBHost, USBH_UserProcess, 0);
USBH_RegisterClass(&hUSBHost, USBH_MSC_CLASS);
USBH_Start(&hUSBHost);
while (1)
{
USBH_Process(&hUSBHost);
AUDIO_MenuProcess();
if ( MfxToggleLed == 1)
{
BSP_LED_Toggle(LED4);
MfxToggleLed = 0;
}if (MfxToggleLed == 1) { ... }
}while (1) { ... }
}{ ... }
/* ... */
void Toggle_Leds(void)
{
static uint32_t ticks = 0;
if(ticks++ > 400)
{
/* ... */
MfxToggleLed = 1;
#if !defined(USE_STM32469I_EVAL_REVA)
/* ... */
BSP_LED_Toggle(LED1);/* ... */
#endif
ticks = 0;
}if (ticks++ > 400) { ... }
}{ ... }
/* ... */
/* ... */
static void AUDIO_InitApplication(void)
{
uint8_t lcd_status = LCD_OK;
BSP_PB_Init(BUTTON_KEY, BUTTON_MODE_EXTI);
BSP_IO_Init();
BSP_LED_Init(LED1);
BSP_LED_Init(LED2);
BSP_LED_Init(LED3);
BSP_LED_Init(LED4);
BSP_JOY_Init(JOY_MODE_EXTI);
if (BSP_SDRAM_Init() != SDRAM_OK)
{
while (1)
{
}while (1) { ... }
}if (BSP_SDRAM_Init() != SDRAM_OK) { ... }
/* ... */
/* ... */
BSP_LCD_Init();
while(lcd_status != LCD_OK);
BSP_LCD_LayerDefaultInit(0, LCD_FB_START_ADDRESS);
BSP_LCD_SelectLayer(0);
LCD_LOG_Init();
LCD_LOG_SetHeader((uint8_t *)"Audio Playback and Record Application");
LCD_UsrLog("USB Host library started.\n");
USBH_UsrLog("Starting Audio Demo");
AUDIO_PLAYER_Init();
AUDIO_MenuInit();
}{ ... }
/* ... */
static void USBH_UserProcess(USBH_HandleTypeDef *phost, uint8_t id)
{
switch(id)
{
case HOST_USER_SELECT_CONFIGURATION:
break;
case HOST_USER_SELECT_CONFIGURATION:
case HOST_USER_DISCONNECTION:
AppliState = APPLICATION_DISCONNECT;
if(f_mount(NULL, "", 0) != FR_OK)
{
LCD_ErrLog("ERROR : Cannot DeInitialize FatFs! \n");
}if (f_mount(NULL, "", 0) != FR_OK) { ... }
break;
case HOST_USER_DISCONNECTION:
case HOST_USER_CLASS_ACTIVE:
AppliState = APPLICATION_READY;
break;
case HOST_USER_CLASS_ACTIVE:
case HOST_USER_CONNECTION:
if(FATFS_LinkDriver(&USBH_Driver, (char*)"0:/") != 0)
{
}if (FATFS_LinkDriver(&USBH_Driver, (char*)"0:/") != 0) { ... }
if(f_mount(&USBH_FatFs, "", 0) != FR_OK)
{
LCD_ErrLog("ERROR : Cannot Initialize FatFs! \n");
}if (f_mount(&USBH_FatFs, "", 0) != FR_OK) { ... }
AppliState = APPLICATION_START;
break;
case HOST_USER_CONNECTION:
default:
break; default
}switch (id) { ... }
}{ ... }
/* ... */
static void SystemClock_Config(void)
{
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;
__HAL_RCC_PWR_CLK_ENABLE();
/* ... */
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 25;
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 7;
RCC_OscInitStruct.PLL.PLLR = 6;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
HAL_PWREx_EnableOverDrive();
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_CK48;
PeriphClkInitStruct.Clk48ClockSelection = RCC_CK48CLKSOURCE_PLLQ;
HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);
/* ... */
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
}{ ... }
#ifdef USE_FULL_ASSERT
/* ... */
void assert_failed(uint8_t* file, uint32_t line)
{
/* ... */
while (1)
{
}while (1) { ... }
}assert_failed (uint8_t* file, uint32_t line) { ... }
/* ... */#endifPrivate functions