main
esea_info 2 years ago
parent 49e26b6df9
commit dd6f06c4a1
  1. 477
      IOC/407ZET6_H2S.ioc
  2. 464
      IOC/407ZGT6_UnderWater.ioc
  3. 1
      base/Src/myrtos.c
  4. 96
      device/Inc/bsp_i2c_ads1115.h
  5. 169
      device/Inc/device_port.c
  6. 530
      device/Src/bsp_i2c_ads1115.c
  7. 492
      device/Src/i2c_ads1115.c

@ -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

@ -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

@ -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,

@ -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

@ -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

@ -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)
// {
// //错误异常回调函数
// }

@ -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;
// }
Loading…
Cancel
Save