diff --git a/termin3/aufgabe2/LaborRechnersysteme3.ioc b/termin3/aufgabe2/LaborRechnersysteme3.ioc new file mode 100644 index 0000000..b7dee0e --- /dev/null +++ b/termin3/aufgabe2/LaborRechnersysteme3.ioc @@ -0,0 +1,381 @@ +#MicroXplorer Configuration settings - do not modify +Mcu.Family=STM32F4 +PA11.GPIO_Speed=GPIO_SPEED_FREQ_LOW +SH.GPXTI1.0=GPIO_EXTI1 +ProjectManager.MainLocation=Core/Src +PC3.GPIO_Mode=GPIO_MODE_AF_PP +PH0-OSC_IN.Locked=true +PD12.GPIO_Label=LD4 [Green Led] +PA6.Mode=Full_Duplex_Master +USB_DEVICE.CLASS_NAME_FS=CDC +PC7.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode +PH0-OSC_IN.Signal=RCC_OSC_IN +RCC.CortexFreq_Value=168000000 +PC10.GPIO_PuPd=GPIO_NOPULL +ProjectManager.KeepUserCode=true +Mcu.UserName=STM32F407VGTx +PB10.GPIO_Speed=GPIO_SPEED_FREQ_LOW +SPI1.VirtualType=VM_MASTER +PB6.GPIO_Mode=GPIO_MODE_AF_OD +PB10.GPIO_PuPd=GPIO_NOPULL +PC12.Locked=true +PA10.GPIO_PuPd=GPIO_NOPULL +PC10.Locked=true +PD15.GPIO_Speed=GPIO_SPEED_FREQ_LOW +RCC.PLLCLKFreq_Value=168000000 +PC10.Signal=I2S3_CK +PC12.Signal=I2S3_SD +PA14.GPIO_Label=SWCLK +RCC.PLLQCLKFreq_Value=48000000 +PC7.Locked=true +I2S3.IPParameters=AudioFreq-Half_Duplex_Master,ErrorAudioFreq-Half_Duplex_Master,RealAudioFreq-Half_Duplex_Master,RealAudioFreq,ErrorAudioFreq,Instance,VirtualMode,FullDuplexMode +PA7.GPIO_Mode=GPIO_MODE_AF_PP +PA12.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_I2C1_Init-I2C1-false-HAL-true,4-MX_I2S3_Init-I2S3-false-HAL-true,5-MX_SPI1_Init-SPI1-false-HAL-true,6-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false +PC0.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label +PA9.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_Mode +PA11.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode +PC0.GPIO_Label=OTG_FS_PowerSwitchOn +PC3.Locked=true +PA11.Mode=Device_Only +RCC.RTCFreq_Value=32000 +PH0-OSC_IN.GPIOParameters=GPIO_Label +PA6.GPIO_Label=SPI1_MISO [LIS302DL_SDO] +PB6.GPIO_Label=Audio_SCL [CS43L22_SCL] +USB_DEVICE.VirtualMode-CDC_FS=Cdc +PC10.GPIO_Speed=GPIO_SPEED_FREQ_LOW +PD4.Locked=true +PA11.GPIO_PuPd=GPIO_NOPULL +PC15-OSC32_OUT.GPIO_Label=PC15-OSC32_OUT +PinOutPanel.RotationAngle=0 +PC3.GPIO_Speed=GPIO_SPEED_FREQ_LOW +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +ProjectManager.StackSize=0x400 +PA6.GPIO_Mode=GPIO_MODE_AF_PP +SPI1.Mode-Full_Duplex_Master=SPI_MODE_MASTER +PD13.Signal=GPIO_Output +Mcu.IP4=SPI1 +RCC.FCLKCortexFreq_Value=168000000 +Mcu.IP5=SYS +PD13.Locked=true +Mcu.IP2=NVIC +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:true\:false +Mcu.IP3=RCC +PD14.GPIO_Speed=GPIO_SPEED_FREQ_LOW +Mcu.IP0=I2C1 +PA12.Locked=true +Mcu.IP1=I2S3 +PA12.Signal=USB_OTG_FS_DP +Mcu.UserConstants= +PD15.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label +PA4.Mode=Half_Duplex_Master +Mcu.ThirdPartyNb=0 +SPI1.Direction=SPI_DIRECTION_2LINES +I2S3.AudioFreq-Half_Duplex_Master=I2S_AUDIOFREQ_96K +RCC.HCLKFreq_Value=168000000 +Mcu.IPNb=8 +RCC.I2SClocksFreq_Value=96000000 +ProjectManager.PreviousToolchain= +PD4.Signal=GPIO_Output +RCC.APB2TimFreq_Value=168000000 +PB6.Signal=I2C1_SCL +RCC.VcooutputI2S=96000000 +PC7.Signal=I2S3_MCK +PB6.Mode=I2C +PC3.Signal=I2S2_SD +Mcu.Pin6=PC3 +Mcu.Pin7=PA0-WKUP +Mcu.Pin8=PA4 +Mcu.Pin9=PA5 +PE1.Signal=GPXTI1 +RCC.AHBFreq_Value=168000000 +PH0-OSC_IN.Mode=HSE-External-Oscillator +PH0-OSC_IN.GPIO_Label=PH0-OSC_IN +Mcu.Pin0=PE3 +Mcu.Pin1=PC14-OSC32_IN +Mcu.Pin2=PC15-OSC32_OUT +PA9.GPIO_Mode=GPIO_MODE_INPUT +Mcu.Pin3=PH0-OSC_IN +Mcu.Pin4=PH1-OSC_OUT +PA0-WKUP.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI +Mcu.Pin5=PC0 +ProjectManager.ProjectBuild=false +RCC.HSE_VALUE=8000000 +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:true\:false +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:true\:false +PA4.GPIO_PuPd=GPIO_NOPULL +PB2.Signal=GPIO_Input +PA4.Locked=true +NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:true\:true +PA4.GPIO_Speed=GPIO_SPEED_FREQ_LOW +ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.26.2 +MxDb.Version=DB.6.0.21 +I2S3.ErrorAudioFreq=-2.34 % +PA6.GPIO_PuPd=GPIO_NOPULL +ProjectManager.BackupPrevious=false +PC14-OSC32_IN.Mode=LSE-External-Oscillator +RCC.VCOInputFreq_Value=1000000 +PA14.Mode=Serial_Wire +USB_DEVICE.MANUFACTURER_STRING-CDC_FS=DHBW Horb +PA5.GPIO_PuPd=GPIO_NOPULL +I2S3.ErrorAudioFreq-Half_Duplex_Master=0.8 % +File.Version=6 +PA10.GPIO_Label=OTG_FS_ID +PC7.GPIO_Mode=GPIO_MODE_AF_PP +PE3.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label +PH1-OSC_OUT.Locked=true +PD5.GPIO_Mode=GPIO_MODE_INPUT +PB3.GPIOParameters=GPIO_Label +PE3.Locked=true +PD14.GPIO_PuPd=GPIO_NOPULL +PE1.Locked=true +PB6.Locked=true +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:true\:false +PB6.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode +ProjectManager.HalAssertFull=false +PB2.GPIO_PuPd=GPIO_NOPULL +PC14-OSC32_IN.GPIOParameters=GPIO_Label +SPI1.CalculateBaudRate-Full_Duplex_Master=42.0 MBits/s +ProjectManager.ProjectName=LaborRechnersysteme3 +PA13.GPIOParameters=GPIO_Label +PH1-OSC_OUT.Mode=HSE-External-Oscillator +RCC.MCO2PinFreq_Value=168000000 +PD13.GPIO_Label=LD3 [Orange Led] +Mcu.Package=LQFP100 +PB9.Signal=I2C1_SDA +PA6.Signal=SPI1_MISO +PA7.Locked=true +PA5.Locked=true +PD12.Signal=GPIO_Output +PA14.Locked=true +PD5.GPIO_Label=OTG_FS_OverCurrent +PD5.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_Mode +NVIC.OTG_FS_IRQn=true\:0\:0\:false\:false\:true\:true\:true +ProjectManager.ToolChainLocation= +PD15.GPIO_PuPd=GPIO_NOPULL +PD14.Locked=true +RCC.LSI_VALUE=32000 +SH.GPXTI0.0=GPIO_EXTI0 +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +PA10.Signal=USB_OTG_FS_ID +PB9.GPIO_PuPd=GPIO_NOPULL +USB_OTG_FS.VirtualMode=Device_Only +VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Signal=USB_DEVICE_VS_USB_DEVICE_CDC_FS +PA5.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode +PA10.GPIO_Speed=GPIO_SPEED_FREQ_LOW +RCC.APB2CLKDivider=RCC_HCLK_DIV2 +PB9.GPIO_Speed=GPIO_SPEED_FREQ_LOW +RCC.APB1TimFreq_Value=84000000 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:true\:false +PC14-OSC32_IN.GPIO_Label=PC14-OSC32_IN +USB_OTG_FS.IPParameters=VirtualMode +PB10.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode +PC12.GPIO_PuPd=GPIO_NOPULL +PC15-OSC32_OUT.GPIOParameters=GPIO_Label +PA6.GPIO_Speed=GPIO_SPEED_FREQ_LOW +PC0.GPIO_PuPd=GPIO_NOPULL +PA12.GPIO_PuPd=GPIO_NOPULL +PD5.Locked=true +PA4.GPIO_Label=I2S3_WS [CS43L22_LRCK] +PD15.Signal=GPIO_Output +ProjectManager.CustomerFirmwarePackage= +PC0.PinState=GPIO_PIN_SET +PC14-OSC32_IN.Locked=true +PA12.GPIO_Speed=GPIO_SPEED_FREQ_LOW +PB3.Locked=true +PA5.Mode=Full_Duplex_Master +PB3.GPIO_Label=SWO +PA6.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode +PC15-OSC32_OUT.Mode=LSE-External-Oscillator +I2S3.FullDuplexMode=I2S_FULLDUPLEXMODE_DISABLE +ProjectManager.ProjectFileName=LaborRechnersysteme3.ioc +PD12.GPIO_Speed=GPIO_SPEED_FREQ_LOW +PD15.GPIO_Label=LD6 [Blue Led] +PA7.Mode=Full_Duplex_Master +PB9.GPIO_Label=Audio_SDA [CS43L22_SDA] +PC10.GPIO_Label=I2S3_SCK [CS43L22_SCLK] +Mcu.PinsNb=35 +ProjectManager.NoMain=false +SPI1.IPParameters=CalculateBaudRate-Full_Duplex_Master,BaudRatePrescaler-Full_Duplex_Master,Mode-Full_Duplex_Master,Mode,VirtualType,Direction +USB_DEVICE.VirtualModeFS=Cdc_FS +PA9.GPIO_Label=VBUS_FS +PB6.GPIO_PuPd=GPIO_NOPULL +PC10.Mode=Half_Duplex_Master +PD13.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label +SH.GPXTI0.ConfNb=1 +PA11.GPIO_Label=OTG_FS_DM +ProjectManager.DefaultFWLocation=true +PE1.GPIO_PuPd=GPIO_NOPULL +PD5.Signal=GPIO_Input +ProjectManager.DeletePrevious=true +PC0.Signal=GPIO_Output +PE1.GPIO_ModeDefaultEXTI=GPIO_MODE_EVT_RISING +RCC.APB1CLKDivider=RCC_HCLK_DIV4 +PC14-OSC32_IN.Signal=RCC_OSC32_IN +PB10.Locked=true +boardIOC=true +USB_DEVICE.IPParameters=VirtualMode-CDC_FS,VirtualModeFS,CLASS_NAME_FS,MANUFACTURER_STRING-CDC_FS +PA9.GPIO_PuPd=GPIO_NOPULL +PA0-WKUP.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING +PA12.GPIO_Label=OTG_FS_DP +RCC.FamilyName=M +PA0-WKUP.GPIO_Label=B1 [Blue PushButton] +PA0-WKUP.Signal=GPXTI0 +PA0-WKUP.Locked=true +PA10.GPIO_Mode=GPIO_MODE_AF_PP +PB9.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode +PD12.Locked=true +PC3.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode +PC12.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode +PA13.Signal=SYS_JTMS-SWDIO +PC10.GPIO_Mode=GPIO_MODE_AF_PP +PD4.GPIO_PuPd=GPIO_NOPULL +PA11.Locked=true +PA9.Mode=Activate_VBUS +PC0.GPIO_Speed=GPIO_SPEED_FREQ_LOW +PB10.GPIO_Mode=GPIO_MODE_AF_PP +I2S3.RealAudioFreq-Half_Duplex_Master=96.774 KHz +PC15-OSC32_OUT.Locked=true +PD12.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label +ProjectManager.TargetToolchain=STM32CubeIDE +PB10.GPIO_Label=CLK_IN [MP45DT02_CLK] +VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Mode=CDC_FS +PB9.Mode=I2C +PB2.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_Mode +PA9.Signal=USB_OTG_FS_VBUS +PB9.Locked=true +I2S3.VirtualMode=I2S_MODE_MASTER +ProjectManager.RegisterCallBack= +PC7.GPIO_PuPd=GPIO_NOPULL +PC15-OSC32_OUT.Signal=RCC_OSC32_OUT +PA7.GPIO_PuPd=GPIO_NOPULL +PB10.Signal=I2S2_CK +RCC.VCOI2SOutputFreq_Value=192000000 +PA5.Signal=SPI1_SCK +PC12.Mode=Half_Duplex_Master +board=STM32F407G-DISC1 +PD13.GPIO_Speed=GPIO_SPEED_FREQ_LOW +PC7.GPIO_Speed=GPIO_SPEED_FREQ_LOW +RCC.VCOOutputFreq_Value=336000000 +PE1.GPIO_Label=MEMS_INT2 [LIS302DL_INT2] +ProjectManager.LastFirmware=true +PA7.GPIO_Speed=GPIO_SPEED_FREQ_LOW +PB9.GPIO_Mode=GPIO_MODE_AF_OD +PA12.GPIO_Mode=GPIO_MODE_AF_PP +PA4.GPIO_Mode=GPIO_MODE_AF_PP +RCC.APB2Freq_Value=84000000 +PB2.GPIO_Mode=GPIO_MODE_INPUT +MxCube.Version=6.2.1 +SPI1.Mode=SPI_MODE_MASTER +PD4.GPIO_Label=Audio_RST [CS43L22_RESET] +PD4.GPIO_Speed=GPIO_SPEED_FREQ_LOW +Mcu.Pin30=PB6 +PA10.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode +PD4.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label +VP_SYS_VS_Systick.Mode=SysTick +RCC.EthernetFreq_Value=168000000 +Mcu.Pin33=VP_SYS_VS_Systick +PE3.GPIO_PuPd=GPIO_NOPULL +PH1-OSC_OUT.Signal=RCC_OSC_OUT +Mcu.Pin34=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS +Mcu.Pin31=PB9 +PD13.GPIO_PuPd=GPIO_NOPULL +Mcu.Pin32=PE1 +PA9.Locked=true +PD5.GPIO_PuPd=GPIO_NOPULL +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:true\:false +PD14.GPIO_Label=LD5 [Red Led] +PA4.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode +PC10.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode +PH1-OSC_OUT.GPIO_Label=PH1-OSC_OUT +PA13.Mode=Serial_Wire +ProjectManager.FreePins=false +RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQ,PLLQCLKFreq_Value,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VcooutputI2S +ProjectManager.AskForMigrate=true +Mcu.Name=STM32F407V(E-G)Tx +Mcu.Pin26=PC12 +Mcu.Pin27=PD4 +RCC.RTCHSEDivFreq_Value=4000000 +PA13.GPIO_Label=SWDIO +Mcu.Pin24=PA14 +ProjectManager.UnderRoot=true +Mcu.Pin25=PC10 +PB2.Locked=true +PC7.GPIO_Label=I2S3_MCK [CS43L22_MCLK] +PD14.Signal=GPIO_Output +Mcu.Pin28=PD5 +Mcu.IP6=USB_DEVICE +Mcu.Pin29=PB3 +Mcu.IP7=USB_OTG_FS +ProjectManager.CoupleFile=false +RCC.48MHZClocksFreq_Value=48000000 +PB3.Signal=SYS_JTDO-SWO +NVIC.EXTI0_IRQn=true\:0\:0\:false\:false\:true\:true\:true +PA4.Signal=I2S3_WS +PD14.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label +RCC.SYSCLKFreq_VALUE=168000000 +Mcu.Pin22=PA12 +PC12.GPIO_Mode=GPIO_MODE_AF_PP +Mcu.Pin23=PA13 +PA7.GPIO_Label=SPI1_MOSI [LIS302DL_SDA/SDI/SDO] +Mcu.Pin20=PA10 +Mcu.Pin21=PA11 +PA12.Mode=Device_Only +PA5.GPIO_Label=SPI1_SCK [LIS302DL_SCL/SPC] +PA10.Locked=true +NVIC.ForceEnableDMAVector=true +KeepUserPlacement=false +PE3.GPIO_Speed=GPIO_SPEED_FREQ_LOW +PA14.GPIOParameters=GPIO_Label +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:true\:false +PH1-OSC_OUT.GPIOParameters=GPIO_Label +PA13.Locked=true +PC12.GPIO_Label=I2S3_SD [CS43L22_SDIN] +ProjectManager.CompilerOptimize=6 +PD15.Locked=true +PA11.Signal=USB_OTG_FS_DM +PA14.Signal=SYS_JTCK-SWCLK +PB2.GPIO_Label=BOOT1 +ProjectManager.HeapSize=0x200 +Mcu.Pin15=PD13 +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:true\:false +Mcu.Pin16=PD14 +Mcu.Pin13=PB10 +Mcu.Pin14=PD12 +Mcu.Pin19=PA9 +ProjectManager.ComputerToolchain=false +Mcu.Pin17=PD15 +RCC.HSI_VALUE=16000000 +Mcu.Pin18=PC7 +PA5.GPIO_Speed=GPIO_SPEED_FREQ_LOW +RCC.PLLQ=7 +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_0 +Mcu.Pin11=PA7 +I2S3.RealAudioFreq=93.75 KHz +Mcu.Pin12=PB2 +RCC.PLLM=8 +RCC.PLLN=336 +Mcu.Pin10=PA6 +PE3.Signal=GPIO_Output +PE3.GPIO_Label=CS_I2C/SPI [LIS302DL_CS_I2C/SPI] +PC3.GPIO_Label=PDM_OUT [MP45DT02_DOUT] +PA0-WKUP.GPIO_PuPd=GPIO_NOPULL +I2S3.Instance=SPI$Index +PC7.Mode=Master_Clock_Activated +PA11.GPIO_Mode=GPIO_MODE_AF_PP +PB6.GPIO_Speed=GPIO_SPEED_FREQ_LOW +SH.GPXTI1.ConfNb=1 +RCC.APB1Freq_Value=42000000 +PA5.GPIO_Mode=GPIO_MODE_AF_PP +PC12.GPIO_Speed=GPIO_SPEED_FREQ_LOW +SPI1.BaudRatePrescaler-Full_Duplex_Master=SPI_BAUDRATEPRESCALER_2 +PA7.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode +PC0.Locked=true +ProjectManager.DeviceId=STM32F407VGTx +ProjectManager.LibraryCopy=1 +PC3.GPIO_PuPd=GPIO_NOPULL +PD12.GPIO_PuPd=GPIO_NOPULL +PE1.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI +PA7.Signal=SPI1_MOSI +PA6.Locked=true +isbadioc=false diff --git a/termin3/aufgabe2/main.c b/termin3/aufgabe2/main.c new file mode 100644 index 0000000..d1af084 --- /dev/null +++ b/termin3/aufgabe2/main.c @@ -0,0 +1,407 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2024 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under Ultimate Liberty license + * SLA0044, the "License"; You may not use this file except in compliance with + * the License. You may obtain a copy of the License at: + * www.st.com/SLA0044 + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "usb_device.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +#include "usbd_cdc_if.h" +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +I2C_HandleTypeDef hi2c1; + +I2S_HandleTypeDef hi2s3; + +SPI_HandleTypeDef hspi1; + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_I2C1_Init(void); +static void MX_I2S3_Init(void); +static void MX_SPI1_Init(void); +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + /* USER CODE BEGIN 1 */ + + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_I2C1_Init(); + MX_I2S3_Init(); + MX_SPI1_Init(); + MX_USB_DEVICE_Init(); + /* USER CODE BEGIN 2 */ + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + // Verzögerungsschleife + for (volatile uint32_t i = 0; i < 10000000; i++); + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + 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 = 8; + RCC_OscInitStruct.PLL.PLLN = 336; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 7; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |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; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) + { + Error_Handler(); + } + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2S; + PeriphClkInitStruct.PLLI2S.PLLI2SN = 192; + PeriphClkInitStruct.PLLI2S.PLLI2SR = 2; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @brief I2C1 Initialization Function + * @param None + * @retval None + */ +static void MX_I2C1_Init(void) +{ + + /* USER CODE BEGIN I2C1_Init 0 */ + + /* USER CODE END I2C1_Init 0 */ + + /* USER CODE BEGIN I2C1_Init 1 */ + + /* USER CODE END I2C1_Init 1 */ + hi2c1.Instance = I2C1; + hi2c1.Init.ClockSpeed = 100000; + hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; + hi2c1.Init.OwnAddress1 = 0; + hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; + hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; + hi2c1.Init.OwnAddress2 = 0; + hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; + hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; + if (HAL_I2C_Init(&hi2c1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN I2C1_Init 2 */ + + /* USER CODE END I2C1_Init 2 */ + +} + +/** + * @brief I2S3 Initialization Function + * @param None + * @retval None + */ +static void MX_I2S3_Init(void) +{ + + /* USER CODE BEGIN I2S3_Init 0 */ + + /* USER CODE END I2S3_Init 0 */ + + /* USER CODE BEGIN I2S3_Init 1 */ + + /* USER CODE END I2S3_Init 1 */ + hi2s3.Instance = SPI3; + hi2s3.Init.Mode = I2S_MODE_MASTER_TX; + hi2s3.Init.Standard = I2S_STANDARD_PHILIPS; + hi2s3.Init.DataFormat = I2S_DATAFORMAT_16B; + hi2s3.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE; + hi2s3.Init.AudioFreq = I2S_AUDIOFREQ_96K; + hi2s3.Init.CPOL = I2S_CPOL_LOW; + hi2s3.Init.ClockSource = I2S_CLOCK_PLL; + hi2s3.Init.FullDuplexMode = I2S_FULLDUPLEXMODE_DISABLE; + if (HAL_I2S_Init(&hi2s3) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN I2S3_Init 2 */ + + /* USER CODE END I2S3_Init 2 */ + +} + +/** + * @brief SPI1 Initialization Function + * @param None + * @retval None + */ +static void MX_SPI1_Init(void) +{ + + /* USER CODE BEGIN SPI1_Init 0 */ + + /* USER CODE END SPI1_Init 0 */ + + /* USER CODE BEGIN SPI1_Init 1 */ + + /* USER CODE END SPI1_Init 1 */ + /* SPI1 parameter configuration*/ + hspi1.Instance = SPI1; + hspi1.Init.Mode = SPI_MODE_MASTER; + hspi1.Init.Direction = SPI_DIRECTION_2LINES; + hspi1.Init.DataSize = SPI_DATASIZE_8BIT; + hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; + hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; + hspi1.Init.NSS = SPI_NSS_SOFT; + hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; + hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; + hspi1.Init.TIMode = SPI_TIMODE_DISABLE; + hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + hspi1.Init.CRCPolynomial = 10; + if (HAL_SPI_Init(&hspi1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN SPI1_Init 2 */ + + /* USER CODE END SPI1_Init 2 */ + +} + +/** + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOE_CLK_ENABLE(); + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOH_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(CS_I2C_SPI_GPIO_Port, CS_I2C_SPI_Pin, GPIO_PIN_RESET); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(OTG_FS_PowerSwitchOn_GPIO_Port, OTG_FS_PowerSwitchOn_Pin, GPIO_PIN_SET); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOD, LD4_Pin|LD3_Pin|LD5_Pin|LD6_Pin + |Audio_RST_Pin, GPIO_PIN_RESET); + + /*Configure GPIO pin : CS_I2C_SPI_Pin */ + GPIO_InitStruct.Pin = CS_I2C_SPI_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(CS_I2C_SPI_GPIO_Port, &GPIO_InitStruct); + + /*Configure GPIO pin : OTG_FS_PowerSwitchOn_Pin */ + GPIO_InitStruct.Pin = OTG_FS_PowerSwitchOn_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(OTG_FS_PowerSwitchOn_GPIO_Port, &GPIO_InitStruct); + + /*Configure GPIO pin : PDM_OUT_Pin */ + GPIO_InitStruct.Pin = PDM_OUT_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF5_SPI2; + HAL_GPIO_Init(PDM_OUT_GPIO_Port, &GPIO_InitStruct); + + /*Configure GPIO pin : B1_Pin */ + GPIO_InitStruct.Pin = B1_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct); + + /*Configure GPIO pin : BOOT1_Pin */ + GPIO_InitStruct.Pin = BOOT1_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(BOOT1_GPIO_Port, &GPIO_InitStruct); + + /*Configure GPIO pin : CLK_IN_Pin */ + GPIO_InitStruct.Pin = CLK_IN_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF5_SPI2; + HAL_GPIO_Init(CLK_IN_GPIO_Port, &GPIO_InitStruct); + + /*Configure GPIO pins : LD4_Pin LD3_Pin LD5_Pin LD6_Pin + Audio_RST_Pin */ + GPIO_InitStruct.Pin = LD4_Pin|LD3_Pin|LD5_Pin|LD6_Pin + |Audio_RST_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /*Configure GPIO pin : OTG_FS_OverCurrent_Pin */ + GPIO_InitStruct.Pin = OTG_FS_OverCurrent_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(OTG_FS_OverCurrent_GPIO_Port, &GPIO_InitStruct); + + /*Configure GPIO pin : MEMS_INT2_Pin */ + GPIO_InitStruct.Pin = MEMS_INT2_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_EVT_RISING; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(MEMS_INT2_GPIO_Port, &GPIO_InitStruct); + + /* EXTI interrupt init*/ + HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(EXTI0_IRQn); + +} + +/* USER CODE BEGIN 4 */ + +/* USER CODE END 4 */ + +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + __disable_irq(); + while (1) + { + } + /* USER CODE END Error_Handler_Debug */ +} + +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t *file, uint32_t line) +{ + /* USER CODE BEGIN 6 */ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + /* USER CODE END 6 */ +} +#endif /* USE_FULL_ASSERT */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/termin3/aufgabe2/stm32f4xx_it.c b/termin3/aufgabe2/stm32f4xx_it.c new file mode 100644 index 0000000..5c34fc5 --- /dev/null +++ b/termin3/aufgabe2/stm32f4xx_it.c @@ -0,0 +1,233 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2024 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under Ultimate Liberty license + * SLA0044, the "License"; You may not use this file except in compliance with + * the License. You may obtain a copy of the License at: + * www.st.com/SLA0044 + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32f4xx_it.h" +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* External variables --------------------------------------------------------*/ +extern PCD_HandleTypeDef hpcd_USB_OTG_FS; +/* USER CODE BEGIN EV */ + +/* USER CODE END EV */ + +/******************************************************************************/ +/* Cortex-M4 Processor Interruption and Exception Handlers */ +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + while (1) + { + } + /* USER CODE END NonMaskableInt_IRQn 1 */ +} + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_HardFault_IRQn 0 */ + /* USER CODE END W1_HardFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Memory management fault. + */ +void MemManage_Handler(void) +{ + /* USER CODE BEGIN MemoryManagement_IRQn 0 */ + + /* USER CODE END MemoryManagement_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */ + /* USER CODE END W1_MemoryManagement_IRQn 0 */ + } +} + +/** + * @brief This function handles Pre-fetch fault, memory access fault. + */ +void BusFault_Handler(void) +{ + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_BusFault_IRQn 0 */ + /* USER CODE END W1_BusFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Undefined instruction or illegal state. + */ +void UsageFault_Handler(void) +{ + /* USER CODE BEGIN UsageFault_IRQn 0 */ + + /* USER CODE END UsageFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ + /* USER CODE END W1_UsageFault_IRQn 0 */ + } +} + +/** + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVCall_IRQn 0 */ + + /* USER CODE END SVCall_IRQn 0 */ + /* USER CODE BEGIN SVCall_IRQn 1 */ + + /* USER CODE END SVCall_IRQn 1 */ +} + +/** + * @brief This function handles Debug monitor. + */ +void DebugMon_Handler(void) +{ + /* USER CODE BEGIN DebugMonitor_IRQn 0 */ + + /* USER CODE END DebugMonitor_IRQn 0 */ + /* USER CODE BEGIN DebugMonitor_IRQn 1 */ + + /* USER CODE END DebugMonitor_IRQn 1 */ +} + +/** + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ + /* USER CODE BEGIN PendSV_IRQn 0 */ + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + +/******************************************************************************/ +/* STM32F4xx Peripheral Interrupt Handlers */ +/* Add here the Interrupt Handlers for the used peripherals. */ +/* For the available peripheral interrupt handler names, */ +/* please refer to the startup file (startup_stm32f4xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles EXTI line0 interrupt. + */ +void EXTI0_IRQHandler(void) +{ + /* USER CODE BEGIN EXTI0_IRQn 0 */ + + /* USER CODE END EXTI0_IRQn 0 */ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); + /* USER CODE BEGIN EXTI0_IRQn 1 */ + + /* USER CODE END EXTI0_IRQn 1 */ +} + +/** + * @brief This function handles USB On The Go FS global interrupt. + */ +void OTG_FS_IRQHandler(void) +{ + /* USER CODE BEGIN OTG_FS_IRQn 0 */ + + /* USER CODE END OTG_FS_IRQn 0 */ + HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS); + /* USER CODE BEGIN OTG_FS_IRQn 1 */ + + /* USER CODE END OTG_FS_IRQn 1 */ +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/termin3/aufgabe2/usbd_cdc_if.c b/termin3/aufgabe2/usbd_cdc_if.c new file mode 100644 index 0000000..62af46c --- /dev/null +++ b/termin3/aufgabe2/usbd_cdc_if.c @@ -0,0 +1,335 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : usbd_cdc_if.c + * @version : v1.0_Cube + * @brief : Usb device for Virtual Com Port. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2024 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under Ultimate Liberty license + * SLA0044, the "License"; You may not use this file except in compliance with + * the License. You may obtain a copy of the License at: + * www.st.com/SLA0044 + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_cdc_if.h" + +/* USER CODE BEGIN INCLUDE */ +#include "main.h" +/* USER CODE END INCLUDE */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ + +/* USER CODE BEGIN PV */ +/* Private variables ---------------------------------------------------------*/ + +/* USER CODE END PV */ + +/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY + * @brief Usb device library. + * @{ + */ + +/** @addtogroup USBD_CDC_IF + * @{ + */ + +/** @defgroup USBD_CDC_IF_Private_TypesDefinitions USBD_CDC_IF_Private_TypesDefinitions + * @brief Private types. + * @{ + */ + +/* USER CODE BEGIN PRIVATE_TYPES */ + +/* USER CODE END PRIVATE_TYPES */ + +/** + * @} + */ + +/** @defgroup USBD_CDC_IF_Private_Defines USBD_CDC_IF_Private_Defines + * @brief Private defines. + * @{ + */ + +/* USER CODE BEGIN PRIVATE_DEFINES */ +/* USER CODE END PRIVATE_DEFINES */ + +/** + * @} + */ + +/** @defgroup USBD_CDC_IF_Private_Macros USBD_CDC_IF_Private_Macros + * @brief Private macros. + * @{ + */ + +/* USER CODE BEGIN PRIVATE_MACRO */ + +/* USER CODE END PRIVATE_MACRO */ + +/** + * @} + */ + +/** @defgroup USBD_CDC_IF_Private_Variables USBD_CDC_IF_Private_Variables + * @brief Private variables. + * @{ + */ +/* Create buffer for reception and transmission */ +/* It's up to user to redefine and/or remove those define */ +/** Received data over USB are stored in this buffer */ +uint8_t UserRxBufferFS[APP_RX_DATA_SIZE]; + +/** Data to send over USB CDC are stored in this buffer */ +uint8_t UserTxBufferFS[APP_TX_DATA_SIZE]; + +/* USER CODE BEGIN PRIVATE_VARIABLES */ + +/* USER CODE END PRIVATE_VARIABLES */ + +/** + * @} + */ + +/** @defgroup USBD_CDC_IF_Exported_Variables USBD_CDC_IF_Exported_Variables + * @brief Public variables. + * @{ + */ + +extern USBD_HandleTypeDef hUsbDeviceFS; + +/* USER CODE BEGIN EXPORTED_VARIABLES */ + +/* USER CODE END EXPORTED_VARIABLES */ + +/** + * @} + */ + +/** @defgroup USBD_CDC_IF_Private_FunctionPrototypes USBD_CDC_IF_Private_FunctionPrototypes + * @brief Private functions declaration. + * @{ + */ + +static int8_t CDC_Init_FS(void); +static int8_t CDC_DeInit_FS(void); +static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length); +static int8_t CDC_Receive_FS(uint8_t* pbuf, uint32_t *Len); +static int8_t CDC_TransmitCplt_FS(uint8_t *pbuf, uint32_t *Len, uint8_t epnum); + +/* USER CODE BEGIN PRIVATE_FUNCTIONS_DECLARATION */ + +/* USER CODE END PRIVATE_FUNCTIONS_DECLARATION */ + +/** + * @} + */ + +USBD_CDC_ItfTypeDef USBD_Interface_fops_FS = +{ + CDC_Init_FS, + CDC_DeInit_FS, + CDC_Control_FS, + CDC_Receive_FS, + CDC_TransmitCplt_FS +}; + +/* Private functions ---------------------------------------------------------*/ +/** + * @brief Initializes the CDC media low layer over the FS USB IP + * @retval USBD_OK if all operations are OK else USBD_FAIL + */ +static int8_t CDC_Init_FS(void) +{ + /* USER CODE BEGIN 3 */ + /* Set Application Buffers */ + USBD_CDC_SetTxBuffer(&hUsbDeviceFS, UserTxBufferFS, 0); + USBD_CDC_SetRxBuffer(&hUsbDeviceFS, UserRxBufferFS); + return (USBD_OK); + /* USER CODE END 3 */ +} + +/** + * @brief DeInitializes the CDC media low layer + * @retval USBD_OK if all operations are OK else USBD_FAIL + */ +static int8_t CDC_DeInit_FS(void) +{ + /* USER CODE BEGIN 4 */ + return (USBD_OK); + /* USER CODE END 4 */ +} + +/** + * @brief Manage the CDC class requests + * @param cmd: Command code + * @param pbuf: Buffer containing command data (request parameters) + * @param length: Number of data to be sent (in bytes) + * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL + */ +static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length) +{ + /* USER CODE BEGIN 5 */ + switch(cmd) + { + case CDC_SEND_ENCAPSULATED_COMMAND: + + break; + + case CDC_GET_ENCAPSULATED_RESPONSE: + + break; + + case CDC_SET_COMM_FEATURE: + + break; + + case CDC_GET_COMM_FEATURE: + + break; + + case CDC_CLEAR_COMM_FEATURE: + + break; + + /*******************************************************************************/ + /* Line Coding Structure */ + /*-----------------------------------------------------------------------------*/ + /* Offset | Field | Size | Value | Description */ + /* 0 | dwDTERate | 4 | Number |Data terminal rate, in bits per second*/ + /* 4 | bCharFormat | 1 | Number | Stop bits */ + /* 0 - 1 Stop bit */ + /* 1 - 1.5 Stop bits */ + /* 2 - 2 Stop bits */ + /* 5 | bParityType | 1 | Number | Parity */ + /* 0 - None */ + /* 1 - Odd */ + /* 2 - Even */ + /* 3 - Mark */ + /* 4 - Space */ + /* 6 | bDataBits | 1 | Number Data bits (5, 6, 7, 8 or 16). */ + /*******************************************************************************/ + case CDC_SET_LINE_CODING: + + break; + + case CDC_GET_LINE_CODING: + + break; + + case CDC_SET_CONTROL_LINE_STATE: + + break; + + case CDC_SEND_BREAK: + + break; + + default: + break; + } + + return (USBD_OK); + /* USER CODE END 5 */ +} + +/** + * @brief Data received over USB OUT endpoint are sent over CDC interface + * through this function. + * + * @note + * This function will issue a NAK packet on any OUT packet received on + * USB endpoint until exiting this function. If you exit this function + * before transfer is complete on CDC interface (ie. using DMA controller) + * it will result in receiving more data while previous ones are still + * not sent. + * + * @param Buf: Buffer of data to be received + * @param Len: Number of data received (in bytes) + * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL + */ +static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len) +{ + /* USER CODE BEGIN 6 */ + USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]); + USBD_CDC_ReceivePacket(&hUsbDeviceFS); + // Schaltet LED4 bei jedem empfangenen Paket um + HAL_GPIO_TogglePin(LD4_GPIO_Port, LD4_Pin); + // Sendet die empfangenen Daten zurück + CDC_Transmit_FS(Buf, *Len); + return (USBD_OK); + /* USER CODE END 6 */ +} + +/** + * @brief CDC_Transmit_FS + * Data to send over USB IN endpoint are sent over CDC interface + * through this function. + * @note + * + * + * @param Buf: Buffer of data to be sent + * @param Len: Number of data to be sent (in bytes) + * @retval USBD_OK if all operations are OK else USBD_FAIL or USBD_BUSY + */ +uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len) +{ + uint8_t result = USBD_OK; + /* USER CODE BEGIN 7 */ + USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData; + if (hcdc->TxState != 0){ + return USBD_BUSY; + } + USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf, Len); + result = USBD_CDC_TransmitPacket(&hUsbDeviceFS); + /* USER CODE END 7 */ + return result; +} + +/** + * @brief CDC_TransmitCplt_FS + * Data transmited callback + * + * @note + * This function is IN transfer complete callback used to inform user that + * the submitted Data is successfully sent over USB. + * + * @param Buf: Buffer of data to be received + * @param Len: Number of data received (in bytes) + * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL + */ +static int8_t CDC_TransmitCplt_FS(uint8_t *Buf, uint32_t *Len, uint8_t epnum) +{ + uint8_t result = USBD_OK; + /* USER CODE BEGIN 13 */ + UNUSED(Buf); + UNUSED(Len); + UNUSED(epnum); + /* USER CODE END 13 */ + return result; +} + +/* USER CODE BEGIN PRIVATE_FUNCTIONS_IMPLEMENTATION */ + +/* USER CODE END PRIVATE_FUNCTIONS_IMPLEMENTATION */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/