diff --git a/IOC/407ZET6_H2S.ioc b/IOC/407ZET6_H2S.ioc new file mode 100644 index 0000000..6ff415b --- /dev/null +++ b/IOC/407ZET6_H2S.ioc @@ -0,0 +1,477 @@ +#MicroXplorer Configuration settings - do not modify +CAD.formats= +CAD.pinconfig= +CAD.provider= +Dma.Request0=USART1_RX +Dma.Request1=USART1_TX +Dma.Request2=USART2_RX +Dma.Request3=USART2_TX +Dma.Request4=USART3_RX +Dma.Request5=USART3_TX +Dma.Request6=SDIO_RX +Dma.Request7=SDIO_TX +Dma.RequestsNb=8 +Dma.SDIO_RX.6.Direction=DMA_PERIPH_TO_MEMORY +Dma.SDIO_RX.6.FIFOMode=DMA_FIFOMODE_ENABLE +Dma.SDIO_RX.6.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL +Dma.SDIO_RX.6.Instance=DMA2_Stream3 +Dma.SDIO_RX.6.MemBurst=DMA_MBURST_INC4 +Dma.SDIO_RX.6.MemDataAlignment=DMA_MDATAALIGN_WORD +Dma.SDIO_RX.6.MemInc=DMA_MINC_ENABLE +Dma.SDIO_RX.6.Mode=DMA_PFCTRL +Dma.SDIO_RX.6.PeriphBurst=DMA_PBURST_INC4 +Dma.SDIO_RX.6.PeriphDataAlignment=DMA_PDATAALIGN_WORD +Dma.SDIO_RX.6.PeriphInc=DMA_PINC_DISABLE +Dma.SDIO_RX.6.Priority=DMA_PRIORITY_LOW +Dma.SDIO_RX.6.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,FIFOThreshold,MemBurst,PeriphBurst +Dma.SDIO_TX.7.Direction=DMA_MEMORY_TO_PERIPH +Dma.SDIO_TX.7.FIFOMode=DMA_FIFOMODE_ENABLE +Dma.SDIO_TX.7.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL +Dma.SDIO_TX.7.Instance=DMA2_Stream6 +Dma.SDIO_TX.7.MemBurst=DMA_MBURST_INC4 +Dma.SDIO_TX.7.MemDataAlignment=DMA_MDATAALIGN_WORD +Dma.SDIO_TX.7.MemInc=DMA_MINC_ENABLE +Dma.SDIO_TX.7.Mode=DMA_PFCTRL +Dma.SDIO_TX.7.PeriphBurst=DMA_PBURST_INC4 +Dma.SDIO_TX.7.PeriphDataAlignment=DMA_PDATAALIGN_WORD +Dma.SDIO_TX.7.PeriphInc=DMA_PINC_DISABLE +Dma.SDIO_TX.7.Priority=DMA_PRIORITY_LOW +Dma.SDIO_TX.7.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,FIFOThreshold,MemBurst,PeriphBurst +Dma.USART1_RX.0.Direction=DMA_PERIPH_TO_MEMORY +Dma.USART1_RX.0.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART1_RX.0.Instance=DMA2_Stream2 +Dma.USART1_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART1_RX.0.MemInc=DMA_MINC_ENABLE +Dma.USART1_RX.0.Mode=DMA_NORMAL +Dma.USART1_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART1_RX.0.PeriphInc=DMA_PINC_DISABLE +Dma.USART1_RX.0.Priority=DMA_PRIORITY_LOW +Dma.USART1_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.USART1_TX.1.Direction=DMA_MEMORY_TO_PERIPH +Dma.USART1_TX.1.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART1_TX.1.Instance=DMA2_Stream7 +Dma.USART1_TX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART1_TX.1.MemInc=DMA_MINC_ENABLE +Dma.USART1_TX.1.Mode=DMA_NORMAL +Dma.USART1_TX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART1_TX.1.PeriphInc=DMA_PINC_DISABLE +Dma.USART1_TX.1.Priority=DMA_PRIORITY_LOW +Dma.USART1_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.USART2_RX.2.Direction=DMA_PERIPH_TO_MEMORY +Dma.USART2_RX.2.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART2_RX.2.Instance=DMA1_Stream5 +Dma.USART2_RX.2.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART2_RX.2.MemInc=DMA_MINC_ENABLE +Dma.USART2_RX.2.Mode=DMA_NORMAL +Dma.USART2_RX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART2_RX.2.PeriphInc=DMA_PINC_DISABLE +Dma.USART2_RX.2.Priority=DMA_PRIORITY_LOW +Dma.USART2_RX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.USART2_TX.3.Direction=DMA_MEMORY_TO_PERIPH +Dma.USART2_TX.3.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART2_TX.3.Instance=DMA1_Stream6 +Dma.USART2_TX.3.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART2_TX.3.MemInc=DMA_MINC_ENABLE +Dma.USART2_TX.3.Mode=DMA_NORMAL +Dma.USART2_TX.3.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART2_TX.3.PeriphInc=DMA_PINC_DISABLE +Dma.USART2_TX.3.Priority=DMA_PRIORITY_LOW +Dma.USART2_TX.3.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.USART3_RX.4.Direction=DMA_PERIPH_TO_MEMORY +Dma.USART3_RX.4.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART3_RX.4.Instance=DMA1_Stream1 +Dma.USART3_RX.4.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART3_RX.4.MemInc=DMA_MINC_ENABLE +Dma.USART3_RX.4.Mode=DMA_NORMAL +Dma.USART3_RX.4.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART3_RX.4.PeriphInc=DMA_PINC_DISABLE +Dma.USART3_RX.4.Priority=DMA_PRIORITY_LOW +Dma.USART3_RX.4.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.USART3_TX.5.Direction=DMA_MEMORY_TO_PERIPH +Dma.USART3_TX.5.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART3_TX.5.Instance=DMA1_Stream3 +Dma.USART3_TX.5.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART3_TX.5.MemInc=DMA_MINC_ENABLE +Dma.USART3_TX.5.Mode=DMA_NORMAL +Dma.USART3_TX.5.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART3_TX.5.PeriphInc=DMA_PINC_DISABLE +Dma.USART3_TX.5.Priority=DMA_PRIORITY_LOW +Dma.USART3_TX.5.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +FATFS.BSP.number=1 +FATFS.IPParameters=_CODE_PAGE,_USE_LFN,_USE_LABEL,_MAX_SS,_FS_EXFAT +FATFS._CODE_PAGE=936 +FATFS._FS_EXFAT=1 +FATFS._MAX_SS=4096 +FATFS._USE_LABEL=1 +FATFS._USE_LFN=2 +FATFS0.BSP.STBoard=false +FATFS0.BSP.api=Unknown +FATFS0.BSP.component= +FATFS0.BSP.condition= +FATFS0.BSP.instance=PA15 +FATFS0.BSP.ip=GPIO +FATFS0.BSP.mode=Input +FATFS0.BSP.name=Detect_SDIO +FATFS0.BSP.semaphore= +FATFS0.BSP.solution=PA15 +FREERTOS.FootprintOK=true +FREERTOS.IPParameters=Tasks01,FootprintOK,configCHECK_FOR_STACK_OVERFLOW,configUSE_IDLE_HOOK,configUSE_TICK_HOOK +FREERTOS.Tasks01=defaultTask,24,1024,StartDefaultTask,As weak,NULL,Dynamic,NULL,NULL +FREERTOS.configCHECK_FOR_STACK_OVERFLOW=2 +FREERTOS.configUSE_IDLE_HOOK=1 +FREERTOS.configUSE_TICK_HOOK=1 +File.Version=6 +GPIO.groupedBy=Group By Peripherals +KeepUserPlacement=false +Mcu.CPN=STM32F407ZET6 +Mcu.Family=STM32F4 +Mcu.IP0=DMA +Mcu.IP1=FATFS +Mcu.IP10=UART4 +Mcu.IP11=USART1 +Mcu.IP12=USART2 +Mcu.IP13=USART3 +Mcu.IP14=USART6 +Mcu.IP15=USB_DEVICE +Mcu.IP16=USB_OTG_HS +Mcu.IP2=FREERTOS +Mcu.IP3=I2C1 +Mcu.IP4=NVIC +Mcu.IP5=RCC +Mcu.IP6=SDIO +Mcu.IP7=SYS +Mcu.IP8=TIM2 +Mcu.IP9=TIM7 +Mcu.IPNb=17 +Mcu.Name=STM32F407Z(E-G)Tx +Mcu.Package=LQFP144 +Mcu.Pin0=PE4 +Mcu.Pin1=PE5 +Mcu.Pin10=PA4 +Mcu.Pin11=PA6 +Mcu.Pin12=PA7 +Mcu.Pin13=PB2 +Mcu.Pin14=PE12 +Mcu.Pin15=PE13 +Mcu.Pin16=PE14 +Mcu.Pin17=PE15 +Mcu.Pin18=PB10 +Mcu.Pin19=PB11 +Mcu.Pin2=PE6 +Mcu.Pin20=PB14 +Mcu.Pin21=PB15 +Mcu.Pin22=PG4 +Mcu.Pin23=PG5 +Mcu.Pin24=PC6 +Mcu.Pin25=PC7 +Mcu.Pin26=PC8 +Mcu.Pin27=PC9 +Mcu.Pin28=PA9 +Mcu.Pin29=PA10 +Mcu.Pin3=PF0 +Mcu.Pin30=PA13 +Mcu.Pin31=PA14 +Mcu.Pin32=PA15 +Mcu.Pin33=PC10 +Mcu.Pin34=PC11 +Mcu.Pin35=PC12 +Mcu.Pin36=PD2 +Mcu.Pin37=PB4 +Mcu.Pin38=PB5 +Mcu.Pin39=PB6 +Mcu.Pin4=PH0-OSC_IN +Mcu.Pin40=PB7 +Mcu.Pin41=PE0 +Mcu.Pin42=PE1 +Mcu.Pin43=VP_FATFS_VS_SDIO +Mcu.Pin44=VP_FREERTOS_VS_CMSIS_V2 +Mcu.Pin45=VP_SYS_VS_tim6 +Mcu.Pin46=VP_TIM2_VS_ClockSourceINT +Mcu.Pin47=VP_TIM7_VS_ClockSourceINT +Mcu.Pin48=VP_USB_DEVICE_VS_USB_DEVICE_MSC_HS +Mcu.Pin5=PH1-OSC_OUT +Mcu.Pin6=PA0-WKUP +Mcu.Pin7=PA1 +Mcu.Pin8=PA2 +Mcu.Pin9=PA3 +Mcu.PinsNb=49 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F407ZETx +MxCube.Version=6.9.2 +MxDb.Version=DB.6.0.92 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.DMA1_Stream1_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA1_Stream3_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA1_Stream5_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA1_Stream6_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA2_Stream2_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA2_Stream3_IRQn=true\:10\:0\:true\:false\:true\:true\:false\:true\:true +NVIC.DMA2_Stream6_IRQn=true\:10\:0\:true\:false\:true\:true\:false\:true\:true +NVIC.DMA2_Stream7_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.OTG_HS_IRQn=true\:11\:0\:true\:false\:true\:true\:false\:true\:true +NVIC.PendSV_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SDIO_IRQn=true\:9\:0\:true\:false\:true\:true\:true\:true\:true +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false\:false +NVIC.SavedPendsvIrqHandlerGenerated=true +NVIC.SavedSvcallIrqHandlerGenerated=true +NVIC.SavedSystickIrqHandlerGenerated=true +NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:true\:false +NVIC.TIM2_IRQn=true\:5\:0\:false\:false\:false\:true\:true\:true\:true +NVIC.TIM6_DAC_IRQn=true\:15\:0\:false\:false\:true\:false\:false\:true\:true +NVIC.TIM7_IRQn=true\:5\:0\:false\:false\:false\:true\:true\:true\:true +NVIC.TimeBase=TIM6_DAC_IRQn +NVIC.TimeBaseIP=TIM6 +NVIC.UART4_IRQn=true\:5\:0\:false\:false\:false\:true\:true\:true\:true +NVIC.USART1_IRQn=true\:5\:0\:false\:false\:false\:true\:true\:true\:true +NVIC.USART2_IRQn=true\:5\:0\:false\:false\:false\:true\:true\:true\:true +NVIC.USART3_IRQn=true\:5\:0\:false\:false\:false\:true\:true\:true\:true +NVIC.USART6_IRQn=true\:7\:0\:true\:false\:false\:true\:true\:true\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +PA0-WKUP.Mode=Asynchronous +PA0-WKUP.Signal=UART4_TX +PA1.Mode=Asynchronous +PA1.Signal=UART4_RX +PA10.Mode=Asynchronous +PA10.Signal=USART1_RX +PA13.Mode=Serial_Wire +PA13.Signal=SYS_JTMS-SWDIO +PA14.Mode=Serial_Wire +PA14.Signal=SYS_JTCK-SWCLK +PA15.GPIOParameters=GPIO_Label +PA15.GPIO_Label=CDZ +PA15.Locked=true +PA15.Signal=GPIO_Input +PA2.Locked=true +PA2.Mode=Asynchronous +PA2.Signal=USART2_TX +PA3.Locked=true +PA3.Mode=Asynchronous +PA3.Signal=USART2_RX +PA4.GPIOParameters=GPIO_Label +PA4.GPIO_Label=MAX3242_EN +PA4.Locked=true +PA4.Signal=GPIO_Output +PA6.GPIOParameters=GPIO_Label +PA6.GPIO_Label=SENSOR2_EN +PA6.Locked=true +PA6.Signal=GPIO_Output +PA7.GPIOParameters=GPIO_Label +PA7.GPIO_Label=SENSOR4_EN +PA7.Locked=true +PA7.Signal=GPIO_Output +PA9.Mode=Asynchronous +PA9.Signal=USART1_TX +PB10.Locked=true +PB10.Mode=Asynchronous +PB10.Signal=USART3_TX +PB11.Locked=true +PB11.Mode=Asynchronous +PB11.Signal=USART3_RX +PB14.Mode=Device_Only_FS +PB14.Signal=USB_OTG_HS_DM +PB15.Mode=Device_Only_FS +PB15.Signal=USB_OTG_HS_DP +PB2.GPIOParameters=GPIO_Label +PB2.GPIO_Label=BOOT1 +PB2.Locked=true +PB2.Signal=GPIO_Input +PB4.GPIOParameters=GPIO_Label +PB4.GPIO_Label=ADDR +PB4.Locked=true +PB4.Signal=GPIO_Output +PB5.GPIOParameters=GPIO_Label +PB5.GPIO_Label=RDY +PB5.Locked=true +PB5.Signal=GPIO_Output +PB6.GPIOParameters=GPIO_Pu +PB6.GPIO_Pu=GPIO_PULLUP +PB6.Mode=I2C +PB6.Signal=I2C1_SCL +PB7.GPIOParameters=GPIO_Pu +PB7.GPIO_Pu=GPIO_PULLUP +PB7.Mode=I2C +PB7.Signal=I2C1_SDA +PC10.Mode=SD_4_bits_Wide_bus +PC10.Signal=SDIO_D2 +PC11.Mode=SD_4_bits_Wide_bus +PC11.Signal=SDIO_D3 +PC12.Mode=SD_4_bits_Wide_bus +PC12.Signal=SDIO_CK +PC6.Locked=true +PC6.Mode=Asynchronous +PC6.Signal=USART6_TX +PC7.Locked=true +PC7.Mode=Asynchronous +PC7.Signal=USART6_RX +PC8.Mode=SD_4_bits_Wide_bus +PC8.Signal=SDIO_D0 +PC9.Mode=SD_4_bits_Wide_bus +PC9.Signal=SDIO_D1 +PD2.Mode=SD_4_bits_Wide_bus +PD2.Signal=SDIO_CMD +PE0.GPIOParameters=GPIO_Label +PE0.GPIO_Label=LED0 +PE0.Locked=true +PE0.Signal=GPIO_Output +PE1.GPIOParameters=GPIO_Label +PE1.GPIO_Label=LED1 +PE1.Locked=true +PE1.Signal=GPIO_Output +PE12.GPIOParameters=GPIO_Label +PE12.GPIO_Label=SENSOR3_EN +PE12.Locked=true +PE12.Signal=GPIO_Output +PE13.GPIOParameters=GPIO_Label +PE13.GPIO_Label=DE485 +PE13.Locked=true +PE13.Signal=GPIO_Output +PE14.GPIOParameters=GPIO_Label +PE14.GPIO_Label=HDPLX +PE14.Locked=true +PE14.Signal=GPIO_Output +PE15.GPIOParameters=GPIO_Label +PE15.GPIO_Label=SEL_232/485 +PE15.Locked=true +PE15.Signal=GPIO_Output +PE4.GPIOParameters=GPIO_Label +PE4.GPIO_Label=EN_1302 +PE4.Locked=true +PE4.Signal=GPIO_Output +PE5.GPIOParameters=GPIO_Label,GPIO_ModeDefaultOutputPP +PE5.GPIO_Label=DA_1302 +PE5.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_OD +PE5.Locked=true +PE5.Signal=GPIO_Output +PE6.GPIOParameters=GPIO_Label +PE6.GPIO_Label=SCLK_1302 +PE6.Locked=true +PE6.Signal=GPIO_Output +PF0.GPIOParameters=GPIO_Label +PF0.GPIO_Label=PUMP_EN +PF0.Locked=true +PF0.Signal=GPIO_Output +PG4.GPIOParameters=GPIO_Label +PG4.GPIO_Label=SENSOR6_EN +PG4.Locked=true +PG4.Signal=GPIO_Output +PG5.GPIOParameters=GPIO_Label +PG5.GPIO_Label=R/W +PG5.Locked=true +PG5.Signal=GPIO_Output +PH0-OSC_IN.Mode=HSE-External-Oscillator +PH0-OSC_IN.Signal=RCC_OSC_IN +PH1-OSC_OUT.Mode=HSE-External-Oscillator +PH1-OSC_OUT.Signal=RCC_OSC_OUT +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=true +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32F407ZETx +ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.27.1 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x1000 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=0 +ProjectManager.MainLocation=Core/Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=H2S.ioc +ProjectManager.ProjectName=H2S +ProjectManager.ProjectStructure= +ProjectManager.RegisterCallBack= +ProjectManager.StackSize=0x1500 +ProjectManager.TargetToolchain=Makefile +ProjectManager.ToolChainLocation= +ProjectManager.UAScriptAfterPath= +ProjectManager.UAScriptBeforePath= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_I2C1_Init-I2C1-false-HAL-true,5-MX_SDIO_SD_Init-SDIO-false-HAL-true,6-MX_UART4_Init-UART4-false-HAL-true,7-MX_USART1_UART_Init-USART1-false-HAL-true,8-MX_USART2_UART_Init-USART2-false-HAL-true,9-MX_USART3_UART_Init-USART3-false-HAL-true,10-MX_USART6_UART_Init-USART6-false-HAL-true,11-MX_TIM7_Init-TIM7-false-HAL-true,12-MX_FATFS_Init-FATFS-false-HAL-false,13-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false,14-MX_TIM2_Init-TIM2-false-HAL-true +RCC.48MHZClocksFreq_Value=48000000 +RCC.AHBFreq_Value=168000000 +RCC.APB1CLKDivider=RCC_HCLK_DIV4 +RCC.APB1Freq_Value=42000000 +RCC.APB1TimFreq_Value=84000000 +RCC.APB2CLKDivider=RCC_HCLK_DIV2 +RCC.APB2Freq_Value=84000000 +RCC.APB2TimFreq_Value=168000000 +RCC.CortexFreq_Value=168000000 +RCC.EthernetFreq_Value=168000000 +RCC.FCLKCortexFreq_Value=168000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=168000000 +RCC.HSE_VALUE=8000000 +RCC.HSI_VALUE=16000000 +RCC.I2SClocksFreq_Value=192000000 +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,LSE_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 +RCC.LSE_VALUE=32768 +RCC.LSI_VALUE=32000 +RCC.MCO2PinFreq_Value=168000000 +RCC.PLLCLKFreq_Value=168000000 +RCC.PLLM=4 +RCC.PLLN=168 +RCC.PLLQ=7 +RCC.PLLQCLKFreq_Value=48000000 +RCC.RTCFreq_Value=32000 +RCC.RTCHSEDivFreq_Value=4000000 +RCC.SYSCLKFreq_VALUE=168000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.VCOI2SOutputFreq_Value=384000000 +RCC.VCOInputFreq_Value=2000000 +RCC.VCOOutputFreq_Value=336000000 +RCC.VcooutputI2S=192000000 +SDIO.ClockDiv=6 +SDIO.IPParameters=ClockDiv +TIM2.IPParameters=Prescaler,Period +TIM2.Period=10000-1 +TIM2.Prescaler=8400-1 +TIM7.IPParameters=Prescaler,Period +TIM7.Period=50-1 +TIM7.Prescaler=8400-1 +UART4.IPParameters=VirtualMode +UART4.VirtualMode=Asynchronous +USART1.IPParameters=VirtualMode +USART1.VirtualMode=VM_ASYNC +USART2.IPParameters=VirtualMode +USART2.VirtualMode=VM_ASYNC +USART3.BaudRate=9600 +USART3.IPParameters=VirtualMode,BaudRate +USART3.VirtualMode=VM_ASYNC +USART6.BaudRate=19200 +USART6.IPParameters=VirtualMode,BaudRate +USART6.VirtualMode=VM_ASYNC +USB_DEVICE.CLASS_NAME_HS=MSC +USB_DEVICE.IPParameters=VirtualMode-MSC_HS,VirtualModeHS,CLASS_NAME_HS,MSC_MEDIA_PACKET-MSC_HS +USB_DEVICE.MSC_MEDIA_PACKET-MSC_HS=4096 +USB_DEVICE.VirtualMode-MSC_HS=Msc +USB_DEVICE.VirtualModeHS=Msc_HS +USB_OTG_HS.IPParameters=VirtualMode-Device_Only_FS +USB_OTG_HS.VirtualMode-Device_Only_FS=Device_Only_FS +VP_FATFS_VS_SDIO.Mode=SDIO +VP_FATFS_VS_SDIO.Signal=FATFS_VS_SDIO +VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2 +VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2 +VP_SYS_VS_tim6.Mode=TIM6 +VP_SYS_VS_tim6.Signal=SYS_VS_tim6 +VP_TIM2_VS_ClockSourceINT.Mode=Internal +VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT +VP_TIM7_VS_ClockSourceINT.Mode=Enable_Timer +VP_TIM7_VS_ClockSourceINT.Signal=TIM7_VS_ClockSourceINT +VP_USB_DEVICE_VS_USB_DEVICE_MSC_HS.Mode=MSC_HS +VP_USB_DEVICE_VS_USB_DEVICE_MSC_HS.Signal=USB_DEVICE_VS_USB_DEVICE_MSC_HS +board=custom +rtos.0.ip=FREERTOS diff --git a/IOC/407ZGT6_UnderWater.ioc b/IOC/407ZGT6_UnderWater.ioc new file mode 100644 index 0000000..0e0e4f4 --- /dev/null +++ b/IOC/407ZGT6_UnderWater.ioc @@ -0,0 +1,464 @@ +#MicroXplorer Configuration settings - do not modify +CAD.formats= +CAD.pinconfig= +CAD.provider= +Dma.Request0=SDIO_RX +Dma.Request1=SDIO_TX +Dma.Request2=USART1_RX +Dma.Request3=USART1_TX +Dma.Request4=USART2_RX +Dma.Request5=USART2_TX +Dma.Request6=USART3_RX +Dma.Request7=USART3_TX +Dma.RequestsNb=8 +Dma.SDIO_RX.0.Direction=DMA_PERIPH_TO_MEMORY +Dma.SDIO_RX.0.FIFOMode=DMA_FIFOMODE_ENABLE +Dma.SDIO_RX.0.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL +Dma.SDIO_RX.0.Instance=DMA2_Stream3 +Dma.SDIO_RX.0.MemBurst=DMA_MBURST_INC4 +Dma.SDIO_RX.0.MemDataAlignment=DMA_MDATAALIGN_WORD +Dma.SDIO_RX.0.MemInc=DMA_MINC_ENABLE +Dma.SDIO_RX.0.Mode=DMA_PFCTRL +Dma.SDIO_RX.0.PeriphBurst=DMA_PBURST_INC4 +Dma.SDIO_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_WORD +Dma.SDIO_RX.0.PeriphInc=DMA_PINC_DISABLE +Dma.SDIO_RX.0.Priority=DMA_PRIORITY_LOW +Dma.SDIO_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,FIFOThreshold,MemBurst,PeriphBurst +Dma.SDIO_TX.1.Direction=DMA_MEMORY_TO_PERIPH +Dma.SDIO_TX.1.FIFOMode=DMA_FIFOMODE_ENABLE +Dma.SDIO_TX.1.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL +Dma.SDIO_TX.1.Instance=DMA2_Stream6 +Dma.SDIO_TX.1.MemBurst=DMA_MBURST_INC4 +Dma.SDIO_TX.1.MemDataAlignment=DMA_MDATAALIGN_WORD +Dma.SDIO_TX.1.MemInc=DMA_MINC_ENABLE +Dma.SDIO_TX.1.Mode=DMA_PFCTRL +Dma.SDIO_TX.1.PeriphBurst=DMA_PBURST_INC4 +Dma.SDIO_TX.1.PeriphDataAlignment=DMA_PDATAALIGN_WORD +Dma.SDIO_TX.1.PeriphInc=DMA_PINC_DISABLE +Dma.SDIO_TX.1.Priority=DMA_PRIORITY_LOW +Dma.SDIO_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,FIFOThreshold,MemBurst,PeriphBurst +Dma.USART1_RX.2.Direction=DMA_PERIPH_TO_MEMORY +Dma.USART1_RX.2.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART1_RX.2.Instance=DMA2_Stream2 +Dma.USART1_RX.2.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART1_RX.2.MemInc=DMA_MINC_ENABLE +Dma.USART1_RX.2.Mode=DMA_NORMAL +Dma.USART1_RX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART1_RX.2.PeriphInc=DMA_PINC_DISABLE +Dma.USART1_RX.2.Priority=DMA_PRIORITY_LOW +Dma.USART1_RX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.USART1_TX.3.Direction=DMA_MEMORY_TO_PERIPH +Dma.USART1_TX.3.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART1_TX.3.Instance=DMA2_Stream7 +Dma.USART1_TX.3.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART1_TX.3.MemInc=DMA_MINC_ENABLE +Dma.USART1_TX.3.Mode=DMA_NORMAL +Dma.USART1_TX.3.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART1_TX.3.PeriphInc=DMA_PINC_DISABLE +Dma.USART1_TX.3.Priority=DMA_PRIORITY_LOW +Dma.USART1_TX.3.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.USART2_RX.4.Direction=DMA_PERIPH_TO_MEMORY +Dma.USART2_RX.4.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART2_RX.4.Instance=DMA1_Stream5 +Dma.USART2_RX.4.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART2_RX.4.MemInc=DMA_MINC_ENABLE +Dma.USART2_RX.4.Mode=DMA_NORMAL +Dma.USART2_RX.4.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART2_RX.4.PeriphInc=DMA_PINC_DISABLE +Dma.USART2_RX.4.Priority=DMA_PRIORITY_LOW +Dma.USART2_RX.4.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.USART2_TX.5.Direction=DMA_MEMORY_TO_PERIPH +Dma.USART2_TX.5.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART2_TX.5.Instance=DMA1_Stream6 +Dma.USART2_TX.5.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART2_TX.5.MemInc=DMA_MINC_ENABLE +Dma.USART2_TX.5.Mode=DMA_NORMAL +Dma.USART2_TX.5.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART2_TX.5.PeriphInc=DMA_PINC_DISABLE +Dma.USART2_TX.5.Priority=DMA_PRIORITY_LOW +Dma.USART2_TX.5.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.USART3_RX.6.Direction=DMA_PERIPH_TO_MEMORY +Dma.USART3_RX.6.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART3_RX.6.Instance=DMA1_Stream1 +Dma.USART3_RX.6.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART3_RX.6.MemInc=DMA_MINC_ENABLE +Dma.USART3_RX.6.Mode=DMA_NORMAL +Dma.USART3_RX.6.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART3_RX.6.PeriphInc=DMA_PINC_DISABLE +Dma.USART3_RX.6.Priority=DMA_PRIORITY_LOW +Dma.USART3_RX.6.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.USART3_TX.7.Direction=DMA_MEMORY_TO_PERIPH +Dma.USART3_TX.7.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART3_TX.7.Instance=DMA1_Stream3 +Dma.USART3_TX.7.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART3_TX.7.MemInc=DMA_MINC_ENABLE +Dma.USART3_TX.7.Mode=DMA_NORMAL +Dma.USART3_TX.7.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART3_TX.7.PeriphInc=DMA_PINC_DISABLE +Dma.USART3_TX.7.Priority=DMA_PRIORITY_LOW +Dma.USART3_TX.7.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +FATFS.BSP.number=1 +FATFS.IPParameters=_CODE_PAGE,_USE_LFN,_MAX_SS +FATFS._CODE_PAGE=936 +FATFS._MAX_SS=4096 +FATFS._USE_LFN=2 +FATFS0.BSP.STBoard=false +FATFS0.BSP.api=Unknown +FATFS0.BSP.component= +FATFS0.BSP.condition= +FATFS0.BSP.instance=PA15 +FATFS0.BSP.ip=GPIO +FATFS0.BSP.mode=Input +FATFS0.BSP.name=Detect_SDIO +FATFS0.BSP.semaphore= +FATFS0.BSP.solution=PA15 +FREERTOS.FootprintOK=true +FREERTOS.IPParameters=Tasks01,FootprintOK +FREERTOS.Tasks01=defaultTask,24,1024,StartDefaultTask,As weak,NULL,Dynamic,NULL,NULL +File.Version=6 +GPIO.groupedBy=Group By Peripherals +KeepUserPlacement=false +Mcu.CPN=STM32F407ZGT6 +Mcu.Family=STM32F4 +Mcu.IP0=CRC +Mcu.IP1=DMA +Mcu.IP10=TIM7 +Mcu.IP11=UART4 +Mcu.IP12=USART1 +Mcu.IP13=USART2 +Mcu.IP14=USART3 +Mcu.IP15=USART6 +Mcu.IP16=USB_OTG_FS +Mcu.IP17=USB_OTG_HS +Mcu.IP2=FATFS +Mcu.IP3=FREERTOS +Mcu.IP4=I2C1 +Mcu.IP5=NVIC +Mcu.IP6=RCC +Mcu.IP7=SDIO +Mcu.IP8=SYS +Mcu.IP9=TIM2 +Mcu.IPNb=18 +Mcu.Name=STM32F407Z(E-G)Tx +Mcu.Package=LQFP144 +Mcu.Pin0=PE4 +Mcu.Pin1=PE5 +Mcu.Pin10=PA4 +Mcu.Pin11=PC4 +Mcu.Pin12=PC5 +Mcu.Pin13=PE12 +Mcu.Pin14=PE13 +Mcu.Pin15=PE14 +Mcu.Pin16=PE15 +Mcu.Pin17=PB10 +Mcu.Pin18=PB11 +Mcu.Pin19=PB14 +Mcu.Pin2=PE6 +Mcu.Pin20=PB15 +Mcu.Pin21=PG4 +Mcu.Pin22=PG5 +Mcu.Pin23=PC6 +Mcu.Pin24=PC7 +Mcu.Pin25=PC8 +Mcu.Pin26=PC9 +Mcu.Pin27=PA9 +Mcu.Pin28=PA10 +Mcu.Pin29=PA11 +Mcu.Pin3=PF0 +Mcu.Pin30=PA12 +Mcu.Pin31=PA13 +Mcu.Pin32=PA14 +Mcu.Pin33=PA15 +Mcu.Pin34=PC10 +Mcu.Pin35=PC11 +Mcu.Pin36=PC12 +Mcu.Pin37=PD2 +Mcu.Pin38=PB4 +Mcu.Pin39=PB5 +Mcu.Pin4=PH0-OSC_IN +Mcu.Pin40=PB6 +Mcu.Pin41=PB7 +Mcu.Pin42=PE0 +Mcu.Pin43=PE1 +Mcu.Pin44=VP_CRC_VS_CRC +Mcu.Pin45=VP_FATFS_VS_SDIO +Mcu.Pin46=VP_FREERTOS_VS_CMSIS_V2 +Mcu.Pin47=VP_SYS_VS_tim6 +Mcu.Pin48=VP_TIM2_VS_ClockSourceINT +Mcu.Pin49=VP_TIM7_VS_ClockSourceINT +Mcu.Pin5=PH1-OSC_OUT +Mcu.Pin6=PA0-WKUP +Mcu.Pin7=PA1 +Mcu.Pin8=PA2 +Mcu.Pin9=PA3 +Mcu.PinsNb=50 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F407ZGTx +MxCube.Version=6.9.2 +MxDb.Version=DB.6.0.92 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.DMA1_Stream1_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA1_Stream3_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA1_Stream5_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA1_Stream6_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA2_Stream2_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA2_Stream3_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA2_Stream6_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA2_Stream7_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.I2C1_ER_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.I2C1_EV_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.PendSV_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SDIO_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false\:false +NVIC.SavedPendsvIrqHandlerGenerated=true +NVIC.SavedSvcallIrqHandlerGenerated=true +NVIC.SavedSystickIrqHandlerGenerated=true +NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:true\:false +NVIC.TIM2_IRQn=true\:5\:0\:false\:false\:false\:false\:true\:true\:true +NVIC.TIM6_DAC_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true\:true +NVIC.TIM7_IRQn=true\:5\:0\:false\:false\:false\:true\:true\:true\:true +NVIC.TimeBase=TIM6_DAC_IRQn +NVIC.TimeBaseIP=TIM6 +NVIC.UART4_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.USART1_IRQn=true\:5\:0\:false\:false\:false\:true\:true\:true\:true +NVIC.USART2_IRQn=true\:5\:0\:false\:false\:false\:true\:true\:true\:true +NVIC.USART3_IRQn=true\:5\:0\:false\:false\:false\:true\:true\:true\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +PA0-WKUP.Mode=Asynchronous +PA0-WKUP.Signal=UART4_TX +PA1.Mode=Asynchronous +PA1.Signal=UART4_RX +PA10.Mode=Asynchronous +PA10.Signal=USART1_RX +PA11.Mode=Device_Only +PA11.Signal=USB_OTG_FS_DM +PA12.Mode=Device_Only +PA12.Signal=USB_OTG_FS_DP +PA13.Mode=Serial_Wire +PA13.Signal=SYS_JTMS-SWDIO +PA14.Mode=Serial_Wire +PA14.Signal=SYS_JTCK-SWCLK +PA15.GPIOParameters=GPIO_Label +PA15.GPIO_Label=CDZ +PA15.Locked=true +PA15.Signal=GPIO_Input +PA2.Mode=Asynchronous +PA2.Signal=USART2_TX +PA3.Mode=Asynchronous +PA3.Signal=USART2_RX +PA4.GPIOParameters=PinState,GPIO_PuPd,GPIO_Label +PA4.GPIO_Label=UART_EN +PA4.GPIO_PuPd=GPIO_PULLDOWN +PA4.Locked=true +PA4.PinState=GPIO_PIN_RESET +PA4.Signal=GPIO_Output +PA9.Mode=Asynchronous +PA9.Signal=USART1_TX +PB10.Mode=Asynchronous +PB10.Signal=USART3_TX +PB11.Mode=Asynchronous +PB11.Signal=USART3_RX +PB14.Mode=Device_Only_FS +PB14.Signal=USB_OTG_HS_DM +PB15.Mode=Device_Only_FS +PB15.Signal=USB_OTG_HS_DP +PB4.GPIOParameters=GPIO_Label +PB4.GPIO_Label=ADDR +PB4.Locked=true +PB4.Signal=GPIO_Input +PB5.GPIOParameters=GPIO_Label +PB5.GPIO_Label=RDY +PB5.Locked=true +PB5.Signal=GPIO_Input +PB6.GPIOParameters=GPIO_Pu +PB6.GPIO_Pu=GPIO_PULLUP +PB6.Locked=true +PB6.Mode=I2C +PB6.Signal=I2C1_SCL +PB7.GPIOParameters=GPIO_Pu +PB7.GPIO_Pu=GPIO_PULLUP +PB7.Locked=true +PB7.Mode=I2C +PB7.Signal=I2C1_SDA +PC10.Mode=SD_4_bits_Wide_bus +PC10.Signal=SDIO_D2 +PC11.Mode=SD_4_bits_Wide_bus +PC11.Signal=SDIO_D3 +PC12.Mode=SD_4_bits_Wide_bus +PC12.Signal=SDIO_CK +PC4.GPIOParameters=GPIO_Label +PC4.GPIO_Label=SENSOR4_EN +PC4.Locked=true +PC4.Signal=GPIO_Output +PC5.GPIOParameters=GPIO_Label +PC5.GPIO_Label=SENSOR2_EN +PC5.Locked=true +PC5.Signal=GPIO_Output +PC6.Locked=true +PC6.Mode=Asynchronous +PC6.Signal=USART6_TX +PC7.Locked=true +PC7.Mode=Asynchronous +PC7.Signal=USART6_RX +PC8.Mode=SD_4_bits_Wide_bus +PC8.Signal=SDIO_D0 +PC9.Mode=SD_4_bits_Wide_bus +PC9.Signal=SDIO_D1 +PD2.Mode=SD_4_bits_Wide_bus +PD2.Signal=SDIO_CMD +PE0.GPIOParameters=PinState,GPIO_Label +PE0.GPIO_Label=LED0 +PE0.Locked=true +PE0.PinState=GPIO_PIN_SET +PE0.Signal=GPIO_Output +PE1.GPIOParameters=PinState,GPIO_Label +PE1.GPIO_Label=LED1 +PE1.Locked=true +PE1.PinState=GPIO_PIN_SET +PE1.Signal=GPIO_Output +PE12.GPIOParameters=GPIO_Label +PE12.GPIO_Label=SENSOR3_EN +PE12.Locked=true +PE12.Signal=GPIO_Output +PE13.GPIOParameters=GPIO_Label +PE13.GPIO_Label=DE485 +PE13.Locked=true +PE13.Signal=GPIO_Output +PE14.GPIOParameters=GPIO_Label +PE14.GPIO_Label=HDPLX +PE14.Locked=true +PE14.Signal=GPIO_Output +PE15.GPIOParameters=GPIO_Label +PE15.GPIO_Label=SEL_232/485 +PE15.Locked=true +PE15.Signal=GPIO_Output +PE4.GPIOParameters=GPIO_Label +PE4.GPIO_Label=EN_1302 +PE4.Locked=true +PE4.Signal=GPIO_Output +PE5.GPIOParameters=GPIO_Label,GPIO_ModeDefaultOutputPP +PE5.GPIO_Label=DA_1302 +PE5.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_OD +PE5.Locked=true +PE5.Signal=GPIO_Output +PE6.GPIOParameters=GPIO_Label +PE6.GPIO_Label=SCLK_1302 +PE6.Locked=true +PE6.Signal=GPIO_Output +PF0.GPIOParameters=GPIO_Label +PF0.GPIO_Label=PUMP_EN +PF0.Locked=true +PF0.Signal=GPIO_Output +PG4.GPIOParameters=GPIO_Label +PG4.GPIO_Label=SENSOR6_EN +PG4.Locked=true +PG4.Signal=GPIO_Output +PG5.GPIOParameters=GPIO_Label +PG5.GPIO_Label=R_W +PG5.Locked=true +PG5.Signal=GPIO_Analog +PH0-OSC_IN.Mode=HSE-External-Oscillator +PH0-OSC_IN.Signal=RCC_OSC_IN +PH1-OSC_OUT.Mode=HSE-External-Oscillator +PH1-OSC_OUT.Signal=RCC_OSC_OUT +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=true +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32F407ZGTx +ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.27.1 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x800 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=0 +ProjectManager.MainLocation=Core/Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=407ZGT6_UnderWater.ioc +ProjectManager.ProjectName=407ZGT6_UnderWater +ProjectManager.ProjectStructure= +ProjectManager.RegisterCallBack= +ProjectManager.StackSize=0x1000 +ProjectManager.TargetToolchain=Makefile +ProjectManager.ToolChainLocation= +ProjectManager.UAScriptAfterPath= +ProjectManager.UAScriptBeforePath= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_I2C1_Init-I2C1-false-HAL-true,5-MX_SDIO_SD_Init-SDIO-false-HAL-true,6-MX_UART4_Init-UART4-false-HAL-true,7-MX_USART1_UART_Init-USART1-false-HAL-true,8-MX_USART2_UART_Init-USART2-false-HAL-true,9-MX_USART3_UART_Init-USART3-false-HAL-true,10-MX_USART6_UART_Init-USART6-false-HAL-true,11-MX_USB_OTG_FS_PCD_Init-USB_OTG_FS-false-HAL-true,12-MX_USB_OTG_HS_PCD_Init-USB_OTG_HS-false-HAL-true,13-MX_TIM2_Init-TIM2-false-HAL-true,14-MX_TIM7_Init-TIM7-false-HAL-true,15-MX_FATFS_Init-FATFS-false-HAL-false,16-MX_CRC_Init-CRC-false-HAL-true +RCC.48MHZClocksFreq_Value=48000000 +RCC.AHBFreq_Value=168000000 +RCC.APB1CLKDivider=RCC_HCLK_DIV4 +RCC.APB1Freq_Value=42000000 +RCC.APB1TimFreq_Value=84000000 +RCC.APB2CLKDivider=RCC_HCLK_DIV2 +RCC.APB2Freq_Value=84000000 +RCC.APB2TimFreq_Value=168000000 +RCC.CortexFreq_Value=168000000 +RCC.EthernetFreq_Value=168000000 +RCC.FCLKCortexFreq_Value=168000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=168000000 +RCC.HSE_VALUE=8000000 +RCC.HSI_VALUE=16000000 +RCC.I2SClocksFreq_Value=192000000 +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,LSE_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 +RCC.LSE_VALUE=32768 +RCC.LSI_VALUE=32000 +RCC.MCO2PinFreq_Value=168000000 +RCC.PLLCLKFreq_Value=168000000 +RCC.PLLM=4 +RCC.PLLN=168 +RCC.PLLQ=7 +RCC.PLLQCLKFreq_Value=48000000 +RCC.RTCFreq_Value=32000 +RCC.RTCHSEDivFreq_Value=4000000 +RCC.SYSCLKFreq_VALUE=168000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.VCOI2SOutputFreq_Value=384000000 +RCC.VCOInputFreq_Value=2000000 +RCC.VCOOutputFreq_Value=336000000 +RCC.VcooutputI2S=192000000 +UART4.IPParameters=VirtualMode +UART4.VirtualMode=Asynchronous +USART1.IPParameters=VirtualMode +USART1.VirtualMode=VM_ASYNC +USART2.IPParameters=VirtualMode +USART2.VirtualMode=VM_ASYNC +USART3.IPParameters=VirtualMode +USART3.VirtualMode=VM_ASYNC +USART6.BaudRate=19200 +USART6.IPParameters=VirtualMode,BaudRate +USART6.VirtualMode=VM_ASYNC +USB_OTG_FS.IPParameters=VirtualMode +USB_OTG_FS.VirtualMode=Device_Only +USB_OTG_HS.IPParameters=VirtualMode-Device_Only_FS +USB_OTG_HS.VirtualMode-Device_Only_FS=Device_Only_FS +VP_CRC_VS_CRC.Mode=CRC_Activate +VP_CRC_VS_CRC.Signal=CRC_VS_CRC +VP_FATFS_VS_SDIO.Mode=SDIO +VP_FATFS_VS_SDIO.Signal=FATFS_VS_SDIO +VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2 +VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2 +VP_SYS_VS_tim6.Mode=TIM6 +VP_SYS_VS_tim6.Signal=SYS_VS_tim6 +VP_TIM2_VS_ClockSourceINT.Mode=Internal +VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT +VP_TIM7_VS_ClockSourceINT.Mode=Enable_Timer +VP_TIM7_VS_ClockSourceINT.Signal=TIM7_VS_ClockSourceINT +board=custom +rtos.0.ip=FREERTOS diff --git a/base/Src/myrtos.c b/base/Src/myrtos.c index 0fc20d5..c5f69ec 100644 --- a/base/Src/myrtos.c +++ b/base/Src/myrtos.c @@ -44,6 +44,7 @@ void RTOS_Port(void) // EV_EXECUTE, /*!< Execute function. */ // EV_FRAME_SENT /*!< Frame sent. */ // } eMBEventType; +// myEvent01Handle = osEventFlagsNew(&myEvent01_attributes); // osEventFlagsSet(modbusEventHandle,eEvent); // osEventFlagsClear (osEventFlagsId_t ef_id, uint32_t flags) // recvedEvent = osEventFlagsWait (modbusEventHandle, diff --git a/device/Inc/i2c_ads1115.h b/device/Inc/bsp_i2c_ads1115.h similarity index 80% rename from device/Inc/i2c_ads1115.h rename to device/Inc/bsp_i2c_ads1115.h index 3340907..80b8b87 100644 --- a/device/Inc/i2c_ads1115.h +++ b/device/Inc/bsp_i2c_ads1115.h @@ -1,41 +1,43 @@ //i2c_ads1115.h -#ifndef __IIC_ADS1115_H -#define __IIC_ADS1115_H +#ifndef __BSP_IIC_ADS1115_H +#define __BSP_IIC_ADS1115_H #include "FreeRTOS.h" #include "task.h" #include "main.h" #include "cmsis_os.h" #include "i2c.h" -#define ADS1115_WRITE_ADDRESS 0x90 -#define ADS1115_READ_ADDRESS 0x91 +#define ADS1115_WRITE_ADDRESS 0x92 +#define ADS1115_READ_ADDRESS 0x93 //以下两个预处理作为配置寄存器预处理要更改其配在这里更改 //也可以添加新的预处理对不同通道的采集或者选取不同的采样速率等 /*事件开始 set, 事件完成 clear */ typedef enum { - ADS1115_Event_READY, - ADS1115_Event_INIT, - ADS1115_Event_SET_REGISTER, - ADS1115_Event_SET_POINT_ADDR, - ADS1115_Event_RCV_DATA, + ADS1115_Event_READY, /*!< Startup finished. */ + ADS1115_Event_INIT, +// ADS1115_Event_INIT_SUCCESS, + ADS1115_Event_Get_Data, + ADS1115_Event_Get_Data_Convert_Register, + ADS1115_Event_Get_Data_RCV, + ADS1115_Event_TRANS_ONLY, + ADS1115_Event_TRANS_FOR_DATA, + ADS1115_Event_DATA_RCV, } ADS1115_Event_TypeDef; typedef enum { ADS1115_WORK_STATE_WAITING, - ADS1115_WORK_STATE_READY, + ADS1115_WORK_STATE_START, ADS1115_WORK_STATE_INIT, - ADS1115_WORK_STATE_INIT_SUCCESS, - ADS1115_WORK_STATE_SET_REGISTER, - ADS1115_WORK_STATE_SET_REGISTER_SUCCESS, - ADS1115_WORK_STATE_SET_POINT_ADDR, - ADS1115_WORK_STATE_SET_POINT_ADDR_SUCCESS, - ADS1115_WORK_STATE_RCV_DATA, - ADS1115_WORK_STATE_RCV_DATA_SUCCESS, - ADS1115_WORK_STATE_DATA_OK, + ADS1115_WORK_STATE_GET_DATA_READY, + ADS1115_WORK_STATE_GET_DATA_START, + ADS1115_WORK_STATE_GET_DATA, + ADS1115_WORK_STATE_GET_DATA_Convert_Register, + ADS1115_WORK_STATE_GET_DATA_RCV, + ADS1115_WORK_STATE_GET_DATA_FLOAT, + ADS1115_WORK_STATE_GET_DATA_OK, ADS1115_WORK_STATE_ERROR, - ADS1115_WORK_STATE_TIMEOUT, ADS1115_WORK_STATE_STOP }ADS1115_WORK_STATE_TypeDef; @@ -117,40 +119,39 @@ typedef enum typedef enum { ADS1115_REG_CONFIG_COMP_MODE_TRADITIONAL = (0x0U << 4),//默认 - ADS1115_REG_CONFIG_COMP_MODE_WINDOW = (0x1U << 4) + ADS1115_REG_CONFIG_COMP_MODE_WINDOW = (0x1U << 4) } ADS1115_REG_CONFIG_COMP_MODE_TypeDef; typedef enum { - ADS1115_REG_CONFIG_COMP_POL_LOW = (0x0U << 3),//默认 - ADS1115_REG_CONFIG_COMP_POL_HIG = (0x1U << 3) + ADS1115_REG_CONFIG_COMP_POL_LOW = (0x0U << 3),//默认 + ADS1115_REG_CONFIG_COMP_POL_HIG = (0x1U << 3) } ADS1115_REG_CONFIG_COMP_POL_TypeDef; typedef enum { - ADS1115_REG_CONFIG_COMP_LAT_NONLATCH = (0x0U << 2), - ADS1115_REG_CONFIG_COMP_LAT_LATCH = (0x1U << 2) + ADS1115_REG_CONFIG_COMP_LAT_NONLATCH = (0x0U << 2), + ADS1115_REG_CONFIG_COMP_LAT_LATCH = (0x1U << 2) } ADS1115_REG_CONFIG_COMP_LAT_TypeDef; typedef enum { - ADS1115_REG_CONFIG_COMP_QUE_ONE = (0x0U << 0), - ADS1115_REG_CONFIG_COMP_QUE_TWO = (0x1U << 0), - ADS1115_REG_CONFIG_COMP_QUE_THR = (0x2U << 0), - ADS1115_REG_CONFIG_COMP_QUE_DIS = (0x3U << 0) + ADS1115_REG_CONFIG_COMP_QUE_ONE= (0x0U << 0), + ADS1115_REG_CONFIG_COMP_QUE_TWO= (0x1U << 0), + ADS1115_REG_CONFIG_COMP_QUE_THR= (0x2U << 0), + ADS1115_REG_CONFIG_COMP_QUE_DIS= (0x3U << 0) } ADS1115_REG_CONFIG_COMP_QUE_TypeDef; + typedef struct{ int (*init)(void); void (*port)(void); - int (*test)(void); void (*start)(void); - void (*stop)(void); I2C_HandleTypeDef *hi2c; uint8_t config_os; @@ -167,44 +168,27 @@ typedef struct{ volatile uint8_t config_L; uint8_t reg_data[3]; ADS1115_OUTPUT_UNIT_TypeDef unit; - - uint32_t time_ticks; - volatile uint8_t event_flags; - volatile ADS1115_WORK_STATE_TypeDef state; - uint8_t result[2]; + uint16_t result_int16; // 多组可用于 + double voltage_mv; + volatile ADS1115_WORK_STATE_TypeDef state; }ADS1115_TypeDef; extern ADS1115_TypeDef my_ads1115; -int ads1115_init(); -void ads1115_port(); -int ads1115_test(); -void ads1115_start(); -void ads1115_stop(); +int ads1115_init(void); +void ads1115_port(void); int ads1115_setup(ADS1115_REG_CONFIG_MUX_Diff_TypeDef mux); -void ads1115_set_event_flags(ADS1115_Event_TypeDef evt); -void ads1115_set_state(ADS1115_WORK_STATE_TypeDef state); // void ads1115_config_register(I2C_HandleTypeDef *ads1115_I2cHandle,uint8_t pointADD,uint8_t configH,uint8_t configL); int16_t ads1115_read_data( ); double ads1115_get_voltage_val( ); -double ADS1115_Get_Voltage_From_U16( uint16_t voltage); -uint16_t ADS1115_Get_Coeff_BY_128( ); +void ads1115_get_data_start(void); #endif - -/** - * @brief 使用说明 - * init 初始化 - * 读数据, ads1115_setup 设置寄存器通道。 指向转换寄存器, 然后读取 - * 设置的是 多路复用 - * - * @details - */ - - /***************/ //配置寄存器说明 + + //config register /*CRH[15:8](R/W) BIT 15 14 13 12 11 10 9 8 @@ -245,7 +229,7 @@ CRL[7:0] (R/W) * ----------------------------------------------------------------------------------- * 8 | MODE | 工作模式 * | | 0 : 连续转换 - * | | 1 : 单次转换 + * | | 1 : 单词转换 * ----------------------------------------------------------------------------------- * 7:5 | DR [2:0] | 采样频率 * | | 000 : 8 SPS diff --git a/device/Inc/device_port.c b/device/Inc/device_port.c new file mode 100644 index 0000000..4e41a3a --- /dev/null +++ b/device/Inc/device_port.c @@ -0,0 +1,169 @@ + +#include "main.h" +#include "cmsis_os.h" +#include "elog.h" + +#if 1 + +extern void get_h2s_3(float *concentration, double voltage, double t); +extern void get_h2s_2(double *concentration, double voltage, double t); +extern void usart6_receive_enable(); +extern void usart6_send_enable(); +extern void max3243_enable(); +extern void max3160_232_FULL_mode(); +extern void max3160_485_send_mode(); +extern void max3160_485_receive_mode(); +extern void uart2_power_enable(); +extern void uart3_power_enable(); +extern void uart4_power_enable(); +extern void uart6_power_enable(); + +//gpio status +extern void max485_GPIO_Status(); +extern void max3160_GPIO_Status(); + + +void usart6_receive_enable() +{ + /*GPIO默认低电平*/ + HAL_GPIO_WritePin(R_W_GPIO_Port,R_W_Pin, RESET); +} + + +void usart6_send_enable() +{ + HAL_GPIO_WritePin(R_W_GPIO_Port,R_W_Pin, SET); +} + +void max485_GPIO_Status() +{ + /*232_485选择 -拉高 , DPLX 拉低 全双, DE 拉高接收 默认高电平 */ + log_i(" max485 gpio de -> %d", + HAL_GPIO_ReadPin(R_W_GPIO_Port,R_W_Pin ) ); +} + +void max3243_enable() +{ + /* 使能 3243 工作, 系统默认低电平, 启动开启工作*/ + HAL_GPIO_WritePin(MAX3243_EN_GPIO_Port,MAX3243_EN_Pin, SET); + // HAL_GPIO_WritePin(UART_EN_GPIO_Port,UART_EN_Pin, SET); +} + + +void max3160_232_FULL_mode() +{ + /*232_485选择 : 232-拉低 , DPLX 拉低 全双*/ + HAL_GPIO_WritePin(SEL_232_485_GPIO_Port,SEL_232_485_Pin, RESET); + HAL_GPIO_WritePin(HDPLX_GPIO_Port,HDPLX_Pin, RESET); +} + +void max3160_485_send_mode() +{ + /*232_485选择: 485-拉高 , DPLX 拉高 半双 , DE 拉低使能发送 */ + HAL_GPIO_WritePin(SEL_232_485_GPIO_Port,SEL_232_485_Pin, SET); + HAL_GPIO_WritePin(HDPLX_GPIO_Port,HDPLX_Pin, RESET); + HAL_GPIO_WritePin(DE485_GPIO_Port, DE485_Pin, SET); +} + +void max3160_485_receive_mode() +{ + /*232_485选择 -拉高 , DPLX 拉低 全双, DE 拉高接收 默认高电平 */ + HAL_GPIO_WritePin(SEL_232_485_GPIO_Port,SEL_232_485_Pin, SET); + HAL_GPIO_WritePin(HDPLX_GPIO_Port,HDPLX_Pin, SET); + HAL_GPIO_WritePin(DE485_GPIO_Port, DE485_Pin, RESET); +} + +void max3160_GPIO_Status() +{ + /*232_485选择 -拉高 , DPLX 拉低 全双, DE 拉高接收 默认高电平 */ + log_i(" max3160 gpio status >> sel -> %d hdplx -> %d de -> %d", + HAL_GPIO_ReadPin(SEL_232_485_GPIO_Port,SEL_232_485_Pin ), + HAL_GPIO_ReadPin(HDPLX_GPIO_Port,HDPLX_Pin ), + HAL_GPIO_ReadPin(DE485_GPIO_Port, DE485_Pin ) + ); +} + +void uart2_power_enable() +{ + HAL_GPIO_WritePin(SENSOR2_EN_GPIO_Port,SENSOR2_EN_Pin, SET); +} + +void uart3_power_enable() +{ + HAL_GPIO_WritePin(SENSOR3_EN_GPIO_Port,SENSOR3_EN_Pin, SET); +} + +void uart4_power_enable() +{ + HAL_GPIO_WritePin(SENSOR4_EN_GPIO_Port,SENSOR4_EN_Pin, SET); +} + +void uart6_power_enable() +{ + HAL_GPIO_WritePin(SENSOR6_EN_GPIO_Port,SENSOR6_EN_Pin, SET); +} + + +double get_h2s(double voltage, double t) +{ + /* + H2S_con = a20 *voltage *ET + Et = a3*T^3 + a2*T^2 + a1*T + a0 温度补偿因子 + Sulphide_con = H2S_con * G + a20: 20度时 电压值 0.007939553 20度时得斜率 + voltage 毫伏 + */ + double a0 = 3.149951E+00; + double a1 = -1.768957E-01; + double a2 = 3.656828E-03; + double a3 = -1.176627E-05; + + double a20 = 7.939553E-03; + double Ug = 7.0E+00; + + return ( voltage - Ug) * a20 *( a3*t*t*t+ a2*t*t + a1*t + a0 ); + +} + +void get_h2s_2(double *concentration, double voltage, double t) +{ + /* + H2S_con = a20 *voltage *ET + Et = a3*T^3 + a2*T^2 + a1*T + a0 温度补偿因子 + Sulphide_con = H2S_con * G + a20: 20度时 电压值 0.007939553 20度时得斜率 + voltage 毫伏 + */ + double a0 = 3.149951E+00; + double a1 = -1.768957E-01; + double a2 = 3.656828E-03; + double a3 = -1.176627E-05; + + double a20 = 7.939553E-03; + double Ug = 7.0E+00; + + *concentration = ( voltage - Ug) * a20 *( a3*t*t*t+ a2*t*t + a1*t + a0 ); +} + + +void get_h2s_3(float *concentration, double voltage, double t) +{ + /* + H2S_con = a20 *voltage *ET + Et = a3*T^3 + a2*T^2 + a1*T + a0 温度补偿因子 + Sulphide_con = H2S_con * G + a20: 20度时 电压值 0.007939553 20度时得斜率 + voltage 毫伏 + */ + double a0 = 3.149951E+00; + double a1 = -1.768957E-01; + double a2 = 3.656828E-03; + double a3 = -1.176627E-05; + + double a20 = 7.939553E-03; + double Ug = 7.0E+00; + + *concentration = ( voltage - Ug) * a20 *( a3*t*t*t+ a2*t*t + a1*t + a0 ); +} + +#endif \ No newline at end of file diff --git a/device/Src/bsp_i2c_ads1115.c b/device/Src/bsp_i2c_ads1115.c new file mode 100644 index 0000000..c6b0d38 --- /dev/null +++ b/device/Src/bsp_i2c_ads1115.c @@ -0,0 +1,530 @@ +// i2c_ads1115.c +#include "bsp_i2c_ads1115.h" +#include "stdlib.h" +#include "stdio.h" +#include "elog.h" + +/* + 多路测量的话, 需要配置不同的 config_H config_L +*/ + +static I2C_HandleTypeDef *pADS1115_I2C = &hi2c1; + +osThreadId_t ads1115TaskHandle; +const osThreadAttr_t ads1115Task_attributes = { + .name = "ads1115Task", + .stack_size = 256 * 4, + .priority = (osPriority_t) osPriorityNormal, +}; + +osEventFlagsId_t ads1115EventHandle; +const osEventFlagsAttr_t ads1115Event_attributes = { + .name = "ads1115Event" +}; + +uint16_t resultbuf[1] = {0}; +double result_double = 0; + +// ads1115EventHandle = osEventFlagsNew (&ads1115Event_attributes); +// typedef enum +// { +// EV_READY, /*!< Startup finished. */ +// EV_FRAME_RECEIVED, /*!< Frame received. */ +// EV_EXECUTE, /*!< Execute function. */ +// EV_FRAME_SENT /*!< Frame sent. */ +// } eMBEventType; +// osEventFlagsSet(modbusEventHandle,eEvent); + // osEventFlagsClear (osEventFlagsId_t ef_id, uint32_t flags) +// recvedEvent = osEventFlagsWait (modbusEventHandle, +// EV_READY | EV_FRAME_RECEIVED | EV_EXECUTE | +// EV_FRAME_SENT, /* 接收任务感兴趣的事件 */ +// 0, +// portMAX_DELAY); /* 指定超时事件,无限等待 */ + +ADS1115_TypeDef my_ads1115 = +{ + ads1115_init, + ads1115_port, + ads1115_get_data_start, + NULL, + ADS1115_REG_CONFIG_OS_START, + ADS1115_REG_CONFIG_MUX_SINGLE_0, + ADS1115_REG_CONFIG_PGA_4, + ADS1115_REG_CONFIG_MODE_SINGLE, + ADS1115_REG_CONFIG_DR_128, + ADS1115_REG_CONFIG_COMP_MODE_TRADITIONAL, + ADS1115_REG_CONFIG_COMP_POL_LOW, + ADS1115_REG_CONFIG_COMP_LAT_NONLATCH, + ADS1115_REG_CONFIG_COMP_QUE_DIS, + 0, + 0, + 0, + { 0, 0, 0 }, + ADS1115_OUTPUT_UNIT_mv, // 默认输出毫伏 + 0, + 0.0, + ADS1115_WORK_STATE_WAITING, +}; + +void ads1115_task(void) +{ + uint8_t rx_data[2] = {0}; + uint32_t event_flags = 0; + int st; + + for ( ; ; ) + { + switch (my_ads1115.state) + { + case ADS1115_WORK_STATE_WAITING: + // log_e( " ADS1115 waiting ********** " ); + osDelay(20); + break; + case ADS1115_WORK_STATE_START: + break; + + case ADS1115_WORK_STATE_INIT: + log_e( " ADS1115 init ********** %d" ,pADS1115_I2C->State ); + + my_ads1115.config_H = my_ads1115.config_os|my_ads1115.config_mux + |my_ads1115.config_PGA|my_ads1115.config_MODE; + my_ads1115.config_L = my_ads1115.config_DR|my_ads1115.config_COMP_MODE|my_ads1115.config_COMP_POL + |my_ads1115.config_COMP_LAT|my_ads1115.config_COMP_QUE ; + + my_ads1115.reg_data[0] = 0x01; // point addr 8bit 配置寄存器 + my_ads1115.reg_data[1] = my_ads1115.config_H; // config_reg 高位 + my_ads1115.reg_data[2] = my_ads1115.config_L; // config_reg 低位 + + // while( HAL_I2C_Master_Transmit(pADS1115_I2C, ADS1115_WRITE_ADDRESS, my_ads1115.reg_data, 3 ,1000)!= HAL_OK) + // { + // if (HAL_I2C_GetError(pADS1115_I2C) != HAL_I2C_ERROR_AF) + // { + // log_w("ads1115 0x01 Reg error!!!\r\n"); + // } + // } + st = HAL_I2C_Master_Transmit(pADS1115_I2C, ADS1115_WRITE_ADDRESS, my_ads1115.reg_data, 3 ,1000); + // st = HAL_I2C_Master_Transmit_IT(pADS1115_I2C, ADS1115_WRITE_ADDRESS, my_ads1115.reg_data, 3 ); + + if ( st != HAL_OK) + { + log_w( " ADS1115 init ********** trans error " ); + my_ads1115.state = ADS1115_WORK_STATE_ERROR;; + break; + } + my_ads1115.state =ADS1115_WORK_STATE_GET_DATA_READY; + + // event_flags = osEventFlagsWait ( ads1115EventHandle, ADS1115_Event_INIT, 0 , portMAX_DELAY ); + // if (event_flags && ADS1115_Event_INIT) + // { + // my_ads1115.state =ADS1115_WORK_STATE_READY_GET_DATA; + // } + + continue; + case ADS1115_WORK_STATE_GET_DATA_READY: + // log_w( " ADS1115 Ready ********** %d" ,pADS1115_I2C->State ); + + osDelay(20); + break; + case ADS1115_WORK_STATE_GET_DATA_START: + log_w( " ADS1115 GET_DATA_START ********** %d" ,pADS1115_I2C->State ); + my_ads1115.result_int16 = 0; + my_ads1115.voltage_mv = 0.0; + while( HAL_I2C_Master_Transmit(pADS1115_I2C, ADS1115_WRITE_ADDRESS, my_ads1115.reg_data, 3 ,1000)!= HAL_OK) + { + if (HAL_I2C_GetError(pADS1115_I2C) != HAL_I2C_ERROR_AF) + { + log_w("ads1115 01 Register error!!!\r\n"); + } + } + my_ads1115.state = ADS1115_WORK_STATE_GET_DATA_Convert_Register; + continue; + case ADS1115_WORK_STATE_GET_DATA_Convert_Register: + log_i( " ADS1115 Ready ********** Convert_Register " ); + + while (HAL_I2C_Master_Transmit(pADS1115_I2C, ADS1115_WRITE_ADDRESS, 0x00, 1, 2000) != HAL_OK) + { + if (HAL_I2C_GetError(pADS1115_I2C) != HAL_I2C_ERROR_AF) + { + printf("ads1115 convert Register error!!!\r\n"); + } + } + my_ads1115.state = ADS1115_WORK_STATE_GET_DATA_RCV; + + + // // osEventFlagsClear( ads1115TaskHandle, ADS1115_Event_Get_Data ); + // st = HAL_I2C_Master_Transmit (pADS1115_I2C, ADS1115_WRITE_ADDRESS, 0x00, 1 ,1000); + // if ( st != HAL_OK) + // { + // log_e( " ADS1115 init ********** Convert_Register error " ); + // my_ads1115.state = ADS1115_WORK_STATE_ERROR; + // break; + // } + // if ( HAL_I2C_GetError(pADS1115_I2C) != HAL_I2C_ERROR_AF ) + // { + // log_e("ads1115 read data error!!!\r\n"); + // break; + // } + // my_ads1115.state =ADS1115_WORK_STATE_GET_DATA_RCV; + // if (HAL_I2C_Master_Transmit_IT(pADS1115_I2C, ADS1115_WRITE_ADDRESS, 0x00, 1 ) != HAL_OK) { + // my_ads1115.state =ADS1115_WORK_STATE_ERROR; + // } + // if ( HAL_I2C_GetError(pADS1115_I2C) != HAL_I2C_ERROR_AF ) + // { + // printf("ads1115 convert Register error!!!\r\n"); + // } + + // event_flags = osEventFlagsWait ( ads1115EventHandle, + // ADS1115_Event_Get_Data_Convert_Register, 0 , portMAX_DELAY ); + // if (event_flags && ADS1115_Event_Get_Data_Convert_Register) + // { + // my_ads1115.state = ADS1115_WORK_STATE_GET_DATA_RCV; + // } + + continue; + case ADS1115_WORK_STATE_GET_DATA_RCV: + log_i( " ADS1115 Ready ********** _DATA_RCV " ); + + int16_t data; + // uint8_t rx_data[2] = {0}; + memset( rx_data,0,2); + + // 读两位 + // while (HAL_I2C_Master_Receive(pADS1115_I2C, ADS1115_READ_ADDRESS, (uint8_t*)resultbuf, 2, 2000) != HAL_OK) + while (HAL_I2C_Master_Receive(pADS1115_I2C, ADS1115_READ_ADDRESS, rx_data, 2, 2000) != HAL_OK) + { + if ( HAL_I2C_GetError(pADS1115_I2C) != HAL_I2C_ERROR_AF ) + { + log_e("ads1115 read data error!!!\r\n"); + } + } + my_ads1115.result_int16 = rx_data[0] * 256 + rx_data[1]; + + + log_w( " readout : %d %02X %02X %04X",my_ads1115.result_int16 , rx_data[0], rx_data[1],*(uint16_t*)rx_data); + + my_ads1115.state = ADS1115_WORK_STATE_GET_DATA_FLOAT; + continue; + osDelay(80); + + // st=HAL_I2C_Master_Receive_IT(pADS1115_I2C, ADS1115_READ_ADDRESS, (uint8_t*)resultbuf, 2 ); + // if ( st != HAL_OK) + // { + // log_e( " ADS1115 init ********** _DATA_RCV error " ); + // my_ads1115.state = ADS1115_WORK_STATE_ERROR; + // break; + // } + // if ( HAL_I2C_GetError(pADS1115_I2C) != HAL_I2C_ERROR_AF ) + // { + // log_e("ads1115 read data error!!!\r\n"); + // break; + // } + // my_ads1115.state =ADS1115_WORK_STATE_GET_DATA_OK; + // osEventFlagsClear( ads1115TaskHandle, ADS1115_Event_Get_Data_Convert_Register ); + // if ( HAL_I2C_Master_Receive_IT(pADS1115_I2C, ADS1115_READ_ADDRESS, (uint8_t*)resultbuf, 2 ) != HAL_OK ) + // { + // my_ads1115.state =ADS1115_WORK_STATE_ERROR; + // } + + // if ( HAL_I2C_GetError(pADS1115_I2C) != HAL_I2C_ERROR_AF ) + // { + // printf("ads1115 read data error!!!\r\n"); + // } + + // event_flags = osEventFlagsWait ( ads1115EventHandle, + // ADS1115_Event_Get_Data_RCV, 0 , portMAX_DELAY ); + // if (event_flags && ADS1115_Event_Get_Data_RCV) + // { + // my_ads1115.state = ADS1115_WORK_STATE_GET_DATA_OK; + // } + continue; + case ADS1115_WORK_STATE_GET_DATA_FLOAT: + log_i( " ADS1115 Ready ********** DATA_FLOAT %d" ,my_ads1115.result_int16 ); + // osEventFlagsClear( ads1115TaskHandle, ADS1115_Event_Get_Data_RCV ); + double val; + if ( (my_ads1115.result_int16 == 0x7FFF) | (my_ads1115.result_int16 == 0X8000)) // 是否超量程了 + { + resultbuf[0] = 0; + // printf("over PGA\r\n"); + } + switch ((0x0E & my_ads1115.config_H) >> 1) // 量程对应的分辨率 + { + case (0x00): + val = (double)my_ads1115.result_int16 * 187.5 / 1000.0; // + break; + case (0x01): + val = (double)my_ads1115.result_int16 * 125 / 1000.0; + break; + case (0x02): + val = (double)my_ads1115.result_int16 * 62.5 / 1000.0; + break; + case (0x03): + val = (double)my_ads1115.result_int16 * 31.25 / 1000.0; + break; + case (0x04): + val = (double)my_ads1115.result_int16 * 15.625 / 1000.0; + break; + case (0x05): + val = (double)my_ads1115.result_int16 * 7.8125 / 1000.0; + break; + } + my_ads1115.voltage_mv = (my_ads1115.unit == ADS1115_OUTPUT_UNIT_mv)?val:(val/1000.0); + log_i( " f %06f",my_ads1115.voltage_mv); + my_ads1115.state = ADS1115_WORK_STATE_GET_DATA_OK ; + break; + case ADS1115_WORK_STATE_GET_DATA_OK: + osDelay(10); + break; + case ADS1115_WORK_STATE_ERROR: + log_w( " ADS1115 error ..... " ); + // my_ads1115.state = ADS1115_WORK_STATE_WAITING ; + osDelay(10); + break; + case ADS1115_WORK_STATE_STOP: + log_w( " ADS1115 stop..... " ); + // my_ads1115.state = ADS1115_WORK_STATE_WAITING ; + osDelay(10); + break; + default: + break; + } + + osDelay(200); + } + // for (;;) + // { + // // 启用中断发送,判断状态, + // // 地址中断, 确认是哪I2C 设备通讯 + // /* code */ + // /* TODO 统一的超时机制 */ + + // /* 事件来管理 */ + // event_flags = osEventFlagsWait ( + // ads1115EventHandle + // , ADS1115_Event_READY|ADS1115_Event_INIT|ADS1115_Event_TRANS_ONLY|ADS1115_Event_DATA_RCV + // , 0 + // , portMAX_DELAY ); + // if ( event_flags & (ADS1115_Event_READY|ADS1115_Event_INIT) + // == (ADS1115_Event_READY|ADS1115_Event_INIT) ) + // { + // // if (HAL_I2C_GetError(&hi2c1)!= HAL_I2C_ERROR_AF) + // // { + // // Error_Handler(); + // // } + // // if (HAL_I2C_GetState(&hi2c1)!= HAL_I2C_STATE_READY) + // // { + // // Error_Handler(); + // // } + + // osEventFlagsClear(ads1115EventHandle, ADS1115_Event_INIT); + // osEventFlagsSet(ads1115EventHandle, ADS1115_Event_INIT_SUCCESS); + // } + + // if ( event_flags & ( ADS1115_Event_READY|ADS1115_Event_TRANS_ONLY ) + // == (ADS1115_Event_READY|ADS1115_Event_TRANS_ONLY) ) + // { + // osEventFlagsClear(ads1115EventHandle, ADS1115_Event_TRANS_ONLY); + + // } + + // if ( event_flags & ( ADS1115_Event_READY|ADS1115_Event_TRANS_FOR_DATA ) + // == (ADS1115_Event_READY|ADS1115_Event_TRANS_FOR_DATA) ) + // { + // osEventFlagsClear(ads1115EventHandle, ADS1115_Event_TRANS_FOR_DATA); + // osEventFlagsSet(ads1115EventHandle, ADS1115_Event_DATA_RCV); + + // } + // if ( event_flags & ( ADS1115_Event_READY|ADS1115_Event_DATA_RCV ) + // == ( ADS1115_Event_READY|ADS1115_Event_DATA_RCV ) ) + // { + // osEventFlagsClear( ads1115EventHandle, ADS1115_Event_DATA_RCV ); + // } + // // __HAL_I2C_GET_FLAG(&hi2c1, I2C_FLAG_TXE) ; + // osDelay(20); + // } +} + +void ads1115_port(void) +{ + ads1115TaskHandle = osThreadNew(ads1115_task, NULL, &ads1115Task_attributes); + ads1115EventHandle = osEventFlagsNew (&ads1115Event_attributes); +} + +/** + * @brief + * @param [in] ads1115_I2cHandle + * @param [in] pointADD -- 读的寄存器地址 + * @param [in] configH + * @param [in] configL + * + * @details + */ +int ads1115_init(void) +{ + uint8_t reg_data[3]; + my_ads1115.hi2c= pADS1115_I2C; + my_ads1115.config_H = my_ads1115.config_os|my_ads1115.config_mux + |my_ads1115.config_PGA|my_ads1115.config_MODE; + my_ads1115.config_L = my_ads1115.config_DR|my_ads1115.config_COMP_MODE|my_ads1115.config_COMP_POL + |my_ads1115.config_COMP_LAT|my_ads1115.config_COMP_QUE ; + + // log_i( " %02X %02X %02X", 0x01,my_ads1115.config_H,my_ads1115.config_L ); + my_ads1115.reg_data[0] = 0x01; // point addr 8bit 配置寄存器 + my_ads1115.reg_data[1] = my_ads1115.config_H; // config_reg 高位 + my_ads1115.reg_data[2] = my_ads1115.config_L; // config_reg 低位 + // log_i( " %02X %02X %02X", my_ads1115.reg_data[0],my_ads1115.reg_data[1],my_ads1115.reg_data[2] ); + + // TODO 阻塞式 仅init 使用 + // my_ads1115.state = ADS1115_WORK_STATE_INIT; + // osEventFlagsSet ( ads1115TaskHandle, ADS1115_Event_INIT ); + if (HAL_I2C_Master_Transmit(pADS1115_I2C, ADS1115_WRITE_ADDRESS, my_ads1115.reg_data, 3,1000 ) != HAL_OK) + { + return -1; + } + return 0; + +} + +int ads1115_setup(ADS1115_REG_CONFIG_MUX_Diff_TypeDef mux) +{ + my_ads1115.config_H &= ~0x70; + my_ads1115.config_H &= mux; + return 0; +} + +int16_t ads1115_read_data( ) +{ + int16_t data; + uint8_t rx_data[2] = {0}; + + // TODO 阻塞式, 改为 DMA 中断模式 + // 读寄存器 0x00 十六位 + while (HAL_I2C_Master_Transmit(pADS1115_I2C, ADS1115_WRITE_ADDRESS, 0x00, 1, 2000) != HAL_OK) + { + if (HAL_I2C_GetError(pADS1115_I2C) != HAL_I2C_ERROR_AF) + { + printf("ads1115 convert Register error!!!\r\n"); + } + } + // 读两位 + while (HAL_I2C_Master_Receive(pADS1115_I2C, ADS1115_READ_ADDRESS, rx_data, 2, 2000) != HAL_OK) + { + if ( HAL_I2C_GetError(pADS1115_I2C) != HAL_I2C_ERROR_AF ) + { + printf("ads1115 read data error!!!\r\n"); + } + } + data = rx_data[0] * 256 + rx_data[1]; + return data; +} + +double ads1115_get_voltage_val( ) +{ + double val; + int16_t ad_val; + // TODO 去掉延时,使用寄存器的指示, setup 和读取数据分开执行 + // ads1115_setup( pADS1115_I2C, pointADD, configH, configL ); + ads1115_setup( ADS1115_REG_CONFIG_MUX_SINGLE_0 ); + + HAL_Delay(10); + ad_val = ads1115_read_data( pADS1115_I2C ); + if ( (ad_val == 0x7FFF) | (ad_val == 0X8000)) // 是否超量程了 + { + ad_val = 0; + // printf("over PGA\r\n"); + } + switch ((0x0E & my_ads1115.config_H) >> 1) // 量程对应的分辨率 + { + case (0x00): + val = (double)ad_val * 187.5 / 1000.0; // + break; + case (0x01): + val = (double)ad_val * 125 / 1000.0; + break; + case (0x02): + val = (double)ad_val * 62.5 / 1000.0; + break; + case (0x03): + val = (double)ad_val * 31.25 / 1000.0; + break; + case (0x04): + val = (double)ad_val * 15.625 / 1000.0; + break; + case (0x05): + val = (double)ad_val * 7.8125 / 1000.0; + break; + } + + return (my_ads1115.unit == ADS1115_OUTPUT_UNIT_mv)?val:(val/1000.0); + +} + + +void ads1115_get_data_start(void) +{ + // log_w( " ADS1115 ********** start.. " ); + // osEventFlagsSet( ads1115TaskHandle, ADS1115_Event_Get_Data ); + my_ads1115.state =ADS1115_WORK_STATE_GET_DATA_START; +} + + +void I2C1_EV_IRQHandler(void) +{ + + // if (__HAL_I2C_GET_FLAG(&hi2c1, I2C_FLAG_TC) != RESET) + // { + // log_i( " i2c master send cplt ******"); + // } + + log_i( " i2c master send cplt ******"); + + HAL_I2C_EV_IRQHandler(&hi2c1); + +} + + +void I2C1_ER_IRQHandler(void) +{ + + HAL_I2C_ER_IRQHandler(&hi2c1); + +} + + +// void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c) +// { +// log_i( " i2c master send cplt ------------------- "); +// if (my_ads1115.state = ADS1115_WORK_STATE_INIT) +// { +// osEventFlagsSet( ads1115TaskHandle, ADS1115_Event_INIT ); +// } +// if (my_ads1115.state = ADS1115_WORK_STATE_GET_DATA_Convert_Register) +// { +// osEventFlagsSet( ads1115TaskHandle, ADS1115_Event_Get_Data_Convert_Register ); +// } +// // //发送完成回调函数 +// // { +// // //一些其他操作 +// // } +// // HAL_I2C_Master_Receive_IT(&I2cHandle,i2c_slave_recv,I2C_REC_BYTES); +// // { +// // //一些其他操作 +// // } +// } + +// void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c) +// { +// log_i( " i2c master rx cplt ------------------- "); +// // //接收完成回调函数 +// // { +// // //一些其他操作 +// // } +// // HAL_I2C_Slave_Transmit_IT(&I2cHandle,send_buffer,send_cnt); +// // { +// // //一些其他操作 +// // } +// } + +// void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c) +// { +// //错误异常回调函数 +// } \ No newline at end of file diff --git a/device/Src/i2c_ads1115.c b/device/Src/i2c_ads1115.c deleted file mode 100644 index d060bec..0000000 --- a/device/Src/i2c_ads1115.c +++ /dev/null @@ -1,492 +0,0 @@ -// i2c_ads1115.c -#include "i2c_ads1115.h" -#include "stdlib.h" -#include "stdio.h" -#include "elog.h" - -/* - 多路测量的话, 需要配置不同的 config_H config_L -*/ - -static I2C_HandleTypeDef *pADS1115_I2C = &hi2c1; - -osThreadId_t ads1115TaskHandle; -const osThreadAttr_t ads1115Task_attributes = { - .name = "ads1115Task", - .stack_size = 256 * 4, - .priority = (osPriority_t) osPriorityNormal, -}; - -osEventFlagsId_t ads1115EventHandle; -const osEventFlagsAttr_t ads1115Event_attributes = { - .name = "ads1115Event", -}; - -// ads1115EventHandle = osEventFlagsNew (&ads1115Event_attributes); -// typedef enum -// { -// EV_READY, /*!< Startup finished. */ -// EV_FRAME_RECEIVED, /*!< Frame received. */ -// EV_EXECUTE, /*!< Execute function. */ -// EV_FRAME_SENT /*!< Frame sent. */ -// } eMBEventType; -// osEventFlagsSet(modbusEventHandle,eEvent); - // osEventFlagsClear (osEventFlagsId_t ef_id, uint32_t flags) -// recvedEvent = osEventFlagsWait (modbusEventHandle, -// EV_READY | EV_FRAME_RECEIVED | EV_EXECUTE | -// EV_FRAME_SENT, /* 接收任务感兴趣的事件 */ -// 0, -// portMAX_DELAY); /* 指定超时事件,无限等待 */ - -ADS1115_TypeDef my_ads1115 = - { - ads1115_init, - ads1115_port, - ads1115_test, - ads1115_start, - ads1115_stop, - NULL, - ADS1115_REG_CONFIG_OS_START, - ADS1115_REG_CONFIG_MUX_SINGLE_0, - ADS1115_REG_CONFIG_PGA_4, - ADS1115_REG_CONFIG_MODE_SINGLE, - ADS1115_REG_CONFIG_DR_128, - ADS1115_REG_CONFIG_COMP_MODE_TRADITIONAL, - ADS1115_REG_CONFIG_COMP_POL_LOW, - ADS1115_REG_CONFIG_COMP_LAT_NONLATCH, - ADS1115_REG_CONFIG_COMP_QUE_DIS, - 0, // point addr - 0, // config_H - 0, // config_L - { 0, 0, 0 }, // reg_data[3] - ADS1115_OUTPUT_UNIT_mv, // 默认输出毫伏 - 0, // event_flags - 0, // state - {0,0}, // result -}; - -void ads1115_task(void) -{ - uint8_t event_flags; - uint8_t reg_data[3] ={0}; - for (;;) - { - switch ( my_ads1115.state ) - { - case ADS1115_WORK_STATE_WAITING: - osDelay(20); - break; - - // Init - case ADS1115_WORK_STATE_INIT: - // log_i("ads1115 init .... %d ", osEventFlagsGet( ads1115EventHandle)); - - if ( osEventFlagsGet( ads1115EventHandle) == 0 ) - { - osEventFlagsSet( ads1115EventHandle, ADS1115_Event_INIT ); - - my_ads1115.reg_data[0] = 0x01; // point addr 8bit 配置寄存器 - my_ads1115.reg_data[1] = my_ads1115.config_H; // config_reg 高位 - my_ads1115.time_ticks = osKernelGetTickCount( ); - if ( HAL_I2C_Master_Transmit_IT( pADS1115_I2C, ADS1115_WRITE_ADDRESS, my_ads1115.reg_data, 3 ) != HAL_OK) - { - // log_e( "ads1115 set register failure while reading!!!" ); - my_ads1115.state == ADS1115_WORK_STATE_ERROR ; - } - } - if ( (osKernelGetTickCount() - my_ads1115.time_ticks) > 5 *1000) - { - my_ads1115.state == ADS1115_WORK_STATE_TIMEOUT ; - } - break; - case ADS1115_WORK_STATE_INIT_SUCCESS: - // log_i("ads1115 init success ... " ); - osEventFlagsClear( ads1115EventHandle, ADS1115_Event_INIT ); - osEventFlagsSet( ads1115EventHandle, ADS1115_Event_READY ); - break; - - // SET REGISTER - case ADS1115_WORK_STATE_SET_REGISTER: - // log_i("ads1115 set register .... %d ", osEventFlagsGet( ads1115EventHandle)); - - if ( osEventFlagsGet( ads1115EventHandle) == 0 ) - { - osEventFlagsSet( ads1115EventHandle, ADS1115_Event_SET_REGISTER ); - - my_ads1115.reg_data[0] = 0x01; // point addr 8bit 配置寄存器 - my_ads1115.reg_data[1] = my_ads1115.config_H; // config_reg 高位 - my_ads1115.time_ticks = osKernelGetTickCount( ); - if ( HAL_I2C_Master_Transmit_IT( pADS1115_I2C, ADS1115_WRITE_ADDRESS, my_ads1115.reg_data, 3 ) != HAL_OK) - { - // log_e("ads1115 set register failure while reading!!!"); - my_ads1115.state = ADS1115_WORK_STATE_ERROR ; - } - } - if ( (osKernelGetTickCount() - my_ads1115.time_ticks) > 5 *1000) - { - my_ads1115.state = ADS1115_WORK_STATE_TIMEOUT ; - } - break; - case ADS1115_WORK_STATE_SET_REGISTER_SUCCESS: - // log_e("ads1115 set register.....succ"); - osEventFlagsClear( ads1115EventHandle, ADS1115_Event_SET_REGISTER ); - osEventFlagsSet( ads1115EventHandle, ADS1115_Event_READY ); - my_ads1115.state = ADS1115_WORK_STATE_SET_POINT_ADDR ; - break; - - // SET POINT ADDR - case ADS1115_WORK_STATE_SET_POINT_ADDR: - // log_i("ads1115 set point addr .... %d ", osEventFlagsGet( ads1115EventHandle)); - if ( osEventFlagsGet( ads1115EventHandle) == 0 ) - { - osEventFlagsSet( ads1115EventHandle, ADS1115_Event_SET_POINT_ADDR ); - my_ads1115.time_ticks = osKernelGetTickCount( ); - if ( HAL_I2C_Master_Transmit_IT(pADS1115_I2C, ADS1115_WRITE_ADDRESS, 0x00, 1 ) != HAL_OK ) - { - // log_e("ads1115 set register failure while reading!!!"); - my_ads1115.state = ADS1115_WORK_STATE_ERROR ; - } - } - if ( (osKernelGetTickCount() - my_ads1115.time_ticks) > 5 *1000 ) - { - my_ads1115.state = ADS1115_WORK_STATE_TIMEOUT ; - } - break; - case ADS1115_WORK_STATE_SET_POINT_ADDR_SUCCESS: - // log_e("ads1115 set point addr.....succ"); - osEventFlagsClear( ads1115EventHandle, ADS1115_Event_SET_POINT_ADDR ); - osEventFlagsSet( ads1115EventHandle, ADS1115_Event_READY ); - my_ads1115.state = ADS1115_WORK_STATE_RCV_DATA ; - break; - - // RCV DATA - case ADS1115_WORK_STATE_RCV_DATA: - // log_i("ads1115 rcv data .... %d ", osEventFlagsGet( ads1115EventHandle)); - if ( osEventFlagsGet( ads1115EventHandle) == 0 ) - { - // log_e("ads1115 set rcv data *** ....."); - my_ads1115.time_ticks = osKernelGetTickCount( ); - osEventFlagsSet( ads1115EventHandle, ADS1115_Event_RCV_DATA ); - if ( HAL_I2C_Master_Receive_IT( pADS1115_I2C, ADS1115_READ_ADDRESS, my_ads1115.result , 2 ) != HAL_OK ) - { - // log_e("ads1115 set register failure while reading!!!"); - my_ads1115.state = ADS1115_WORK_STATE_ERROR ; - } - } - if ( (osKernelGetTickCount() - my_ads1115.time_ticks) > 5 *1000 ) - { - my_ads1115.state = ADS1115_WORK_STATE_TIMEOUT ; - } - break; - case ADS1115_WORK_STATE_RCV_DATA_SUCCESS: - // log_w("ads1115 rcv data .....succ result : %d ", my_ads1115.result ); - osEventFlagsClear( ads1115EventHandle, ADS1115_Event_RCV_DATA ); - osEventFlagsSet( ads1115EventHandle, ADS1115_Event_READY ); - my_ads1115.state = ADS1115_WORK_STATE_DATA_OK ; - - // log_i( "ad val : %d ", 256*my_ads1115.result[0] +my_ads1115.result[1] ); - break; - case ADS1115_WORK_STATE_DATA_OK: - osDelay(20); - break; - case ADS1115_WORK_STATE_ERROR: - log_e("ads1115 error!!!"); - break; - case ADS1115_WORK_STATE_TIMEOUT: - log_e("ads1115 timeout!!!"); - break; - case ADS1115_WORK_STATE_STOP: - break; - default: - break; - } - osDelay( 20 ); - - } -} - -void ads1115_port(void) -{ - ads1115TaskHandle = osThreadNew(ads1115_task, NULL, &ads1115Task_attributes); - ads1115EventHandle = osEventFlagsNew ( &ads1115Event_attributes ); -} - -/** - * @brief - * @param [in] ads1115_I2cHandle - * @param [in] pointADD -- 读的寄存器地址 - * @param [in] configH - * @param [in] configL - * - * @details - */ -int ads1115_init() -{ - uint8_t reg_data[3]; - my_ads1115.hi2c= pADS1115_I2C; - my_ads1115.config_H = my_ads1115.config_os|my_ads1115.config_mux - |my_ads1115.config_PGA|my_ads1115.config_MODE; - my_ads1115.config_L = my_ads1115.config_DR|my_ads1115.config_COMP_MODE|my_ads1115.config_COMP_POL - |my_ads1115.config_COMP_LAT|my_ads1115.config_COMP_QUE ; - my_ads1115.reg_data[0] = 0x01; // point addr 8bit 配置寄存器 0x01 - my_ads1115.reg_data[1] = my_ads1115.config_H; // config_reg 高位 - my_ads1115.reg_data[2] = my_ads1115.config_L; // config_reg 低位 - - ads1115_set_state( ADS1115_WORK_STATE_INIT ); - // osEventFlagsSet ( ads1115EventHandle, ADS1115_Event_INIT ); - // if (HAL_I2C_Master_Transmit_IT(pADS1115_I2C, ADS1115_WRITE_ADDRESS, my_ads1115.reg_data, 3 ) != HAL_OK) - // { - // return -1; - // } - return 0; -} - -int ads1115_test() -{ - - return 0; -} - -void ads1115_start( ) // set register开始测量 -{ - osEventFlagsSet( ads1115EventHandle, ADS1115_Event_READY ); - ads1115_set_state( ADS1115_WORK_STATE_SET_REGISTER ); -} -void ads1115_stop( ) // 结束测量 等待 -{ - ads1115_set_state( ADS1115_WORK_STATE_WAITING ); -} - -int ads1115_setup(ADS1115_REG_CONFIG_MUX_Diff_TypeDef mux) -{ - my_ads1115.config_mux &= mux; - my_ads1115.config_H =my_ads1115.config_os|my_ads1115.config_mux - |my_ads1115.config_PGA|my_ads1115.config_MODE; - my_ads1115.reg_data[1] = my_ads1115.config_H; - return 0; -} - -void ads1115_set_event_flags(ADS1115_Event_TypeDef evt) -{ - osEventFlagsSet ( ads1115EventHandle, evt ); -} - -void ads1115_set_state(ADS1115_WORK_STATE_TypeDef state) -{ - my_ads1115.state = state; -} - -int16_t ads1115_read_data( ) -{ - int16_t data; - uint8_t rx_data[2] = {0}; - - // TODO 阻塞式, 改为 DMA 中断模式 - // 读寄存器 0x00 十六位 - while (HAL_I2C_Master_Transmit(pADS1115_I2C, ADS1115_WRITE_ADDRESS, 0x00, 1, 2000) != HAL_OK) - // while ( HAL_I2C_Master_Transmit_IT(pADS1115_I2C, ADS1115_WRITE_ADDRESS, 0x00, 1 ) != HAL_OK ) - { - if (HAL_I2C_GetError(pADS1115_I2C) != HAL_I2C_ERROR_AF) - { - printf("ads1115 convert Register error!!!\r\n"); - } - } - // 读两位 - // while (HAL_I2C_Master_Receive(pADS1115_I2C, ADS1115_READ_ADDRESS, rx_data, 2, 2000) != HAL_OK) - while ( HAL_I2C_Master_Receive_IT(pADS1115_I2C, ADS1115_READ_ADDRESS, rx_data, 2 ) != HAL_OK ) - { - if ( HAL_I2C_GetError(pADS1115_I2C) != HAL_I2C_ERROR_AF ) - { - printf("ads1115 read data error!!!\r\n"); - } - } - data = rx_data[0] * 256 + rx_data[1]; - return data; -} - -double ads1115_get_voltage_val( ) -{ - double val; - int16_t ad_val; - // TODO 去掉延时,使用寄存器的指示, setup 和读取数据分开执行 - // ads1115_setup( pADS1115_I2C, pointADD, configH, configL ); - // ads1115_setup( ADS1115_REG_CONFIG_MUX_SINGLE_0 ); - - HAL_Delay(10); - // ad_val = ads1115_read_data( pADS1115_I2C ); - ad_val = my_ads1115.result[0] * 256 + my_ads1115.result[1]; - if ( (ad_val == 0x7FFF) | (ad_val == 0X8000)) // 是否超量程了 - { - ad_val = 0; - // printf("over PGA\r\n"); - } - switch ((0x0E & my_ads1115.config_H) >> 1) // 量程对应的分辨率 - { - case (0x00): - val = (double)ad_val * 187.5 / 1000.0; // - break; - case (0x01): - val = (double)ad_val * 125 / 1000.0; - break; - case (0x02): - val = (double)ad_val * 62.5 / 1000.0; - break; - case (0x03): - val = (double)ad_val * 31.25 / 1000.0; - break; - case (0x04): - val = (double)ad_val * 15.625 / 1000.0; - break; - case (0x05): - val = (double)ad_val * 7.8125 / 1000.0; - break; - } - return (my_ads1115.unit == ADS1115_OUTPUT_UNIT_mv)?val:(val/1000.0); -} - -uint16_t ADS1115_Get_Coeff_BY_128( ) -{ - uint16_t val; - - switch ((0x0E & my_ads1115.config_H) >> 1) // 量程对应的分辨率 - { - case (0x00): - val = (int)( 187.5 * 128.0); // - break; - case (0x01): - val = (int)( 125.5 * 128.0); - break; - case (0x02): - val = (int)( 62.5 * 128.0); - break; - case (0x03): - val = (int)( 31.25 * 128.0); - break; - case (0x04): - val = (int)( 15.625 * 128.0); - break; - case (0x05): - val = (int)( 7.8125 * 128.0); - break; - } - - return val; -} - -double ADS1115_Get_Voltage_From_U16( uint16_t voltage) -{ - double val; - if ( ( voltage == 0x7FFF) | (voltage == 0X8000)) // 是否超量程了 - { - voltage = 0; - // printf("over PGA\r\n"); - } - switch ((0x0E & my_ads1115.config_H) >> 1) // 量程对应的分辨率 - { - case (0x00): - val = (double)voltage * 187.5 / 1000.0; // - break; - case (0x01): - val = (double)voltage * 125 / 1000.0; - break; - case (0x02): - val = (double)voltage * 62.5 / 1000.0; - break; - case (0x03): - val = (double)voltage * 31.25 / 1000.0; - break; - case (0x04): - val = (double)voltage * 15.625 / 1000.0; - break; - case (0x05): - val = (double)voltage * 7.8125 / 1000.0; - break; - } - - return val; -} - -//主机模式发送回调函数 -void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *I2cHandle) -{ - if (I2cHandle == pADS1115_I2C) - { - log_i("ads1115 send cplt..."); - if ( my_ads1115.state == ADS1115_WORK_STATE_INIT ) - { - my_ads1115.state = ADS1115_WORK_STATE_INIT_SUCCESS; - // osEventFlagsSet( ads1115EventHandle, ADS1115_Event_INIT_SUCCESS ); - // osEventFlagsClear( ads1115EventHandle, ADS1115_Event_INIT ); - } - if ( my_ads1115.state == ADS1115_WORK_STATE_SET_REGISTER ) - { - my_ads1115.state = ADS1115_WORK_STATE_SET_REGISTER_SUCCESS; - // osEventFlagsSet( ads1115EventHandle, ADS1115_Event_SET_REGISTER_SUCCESS ); - } - if ( my_ads1115.state == ADS1115_WORK_STATE_SET_POINT_ADDR ) - { - my_ads1115.state = ADS1115_WORK_STATE_SET_POINT_ADDR_SUCCESS; - // osEventFlagsSet( ads1115EventHandle, ADS1115_Event_TRANS_SUCCESS ); - } - } -} -//主机模式接收回调函数 -void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *I2cHandle) -{ - if (I2cHandle == pADS1115_I2C) - { - log_i("ads1115 rcv cplt..."); - if ( my_ads1115.state == ADS1115_WORK_STATE_RCV_DATA ) - { - my_ads1115.state = ADS1115_WORK_STATE_RCV_DATA_SUCCESS; - // osEventFlagsSet( ads1115EventHandle, ADS1115_Event_RCV_DATA_SUCCESS ); - } - } -} - - -// int ads1115_test() -// { - -// log_i( "ads1115_test -> " ); -// uint32_t flag; - -// flag = osEventFlagsWait ( ads1115EventHandle, -// ADS1115_Event_READY|ADS1115_Event_INIT|ADS1115_Event_SET_REGISTER|ADS1115_Event_SET_POINT_ADDR|ADS1115_Event_RCV_DATA, -// 0, -// 10); -// log_i( "flag -> %d ", flag ); - - -// log_i( " -> %d ", osEventFlagsGet( ads1115EventHandle) ); -// osEventFlagsSet( ads1115EventHandle, ADS1115_Event_READY ) ; -// log_i( " ready -> %d ", osEventFlagsGet( ads1115EventHandle) ); -// osEventFlagsSet( ads1115EventHandle, ADS1115_Event_INIT ) ; -// log_i( " init -> %d ", osEventFlagsGet( ads1115EventHandle) ); - -// osEventFlagsSet( ads1115EventHandle, ADS1115_Event_RCV_DATA ) ; -// log_i( " set register -> %d ", osEventFlagsGet( ads1115EventHandle) ); - -// osEventFlagsSet( ads1115EventHandle, ADS1115_Event_SET_REGISTER ) ; -// osEventFlagsSet( ads1115EventHandle, ADS1115_Event_SET_POINT_ADDR ) ; -// log_i( " set register -> %d ", osEventFlagsGet( ads1115EventHandle) ); - - -// osEventFlagsClear( ads1115EventHandle, ADS1115_Event_SET_POINT_ADDR ) ; -// log_i( " clear -> %d ", osEventFlagsGet( ads1115EventHandle) ); -// flag = osEventFlagsWait ( ads1115EventHandle, -// ADS1115_Event_READY|ADS1115_Event_INIT|ADS1115_Event_SET_REGISTER|ADS1115_Event_SET_POINT_ADDR|ADS1115_Event_RCV_DATA, -// 0, -// 10); -// log_i( "flag 2 -> %d ", flag ); - -// if (flag&ADS1115_Event_SET_POINT_ADDR == 0) -// { -// log_i("get ...... "); -// }else{ -// log_i(" not get ... "); - -// } - -// return 0; -// }