1.SPI控制MS5614T
注意:
1.SPI配置不需要将GPIO配置为输出模式,否则会导致重新上电引脚不工作.(有很微弱的波形,表示没有复用成功)
2. 需要注意配置enSckPhase
3. MS5614T的PD引脚需要接高电平芯片才有输出,参考电压需要设置为1.65V
4.MS5614T输出模拟电压方式:
MS5614T_FS_H; //FS高
MS5614T_CS1_L;
MS5614T_CS2_L;
MS5614T_CS3_L;
Ddl_Delay1us(2);
MS5614T_FS_L; //FS低
SPI3_WR_Byte(1,512);
Ddl_Delay1us(5);
MS5614T_FS_H; //FS高
MS5614T_CS1_H;
MS5614T_CS2_H;
MS5614T_CS3_H;
SPI配置
stc_spi_init_t stcSpiInit;
/* configuration structure initialization */
MEM_ZERO_STRUCT(stcSpiInit);
/* Configuration peripheral clock */
PWC_Fcg1PeriphClockCmd(SPI_UNIT_CLOCK, Enable);
/* Configuration SPI pin */
PORT_SetFunc(SPI_SCK_PORT, SPI_SCK_PIN, SPI_SCK_FUNC, Disable);
PORT_SetFunc(SPI_MOSI_PORT, SPI_MOSI_PIN, SPI_MOSI_FUNC, Disable);
/* Configuration SPI structure */
stcSpiInit.enClkDiv = SpiClkDiv32;
stcSpiInit.enFrameNumber = SpiFrameNumber1; // 帧数设定
stcSpiInit.enDataLength = SpiDataLengthBit16;
stcSpiInit.enFirstBitPosition = SpiFirstBitPositionMSB; // 数据高位在前
stcSpiInit.enSckPolarity = SpiSckIdleLevelLow; // SCK空闲时SCK为高电平
stcSpiInit.enSckPhase = SpiSckOddSampleEvenChange; // SCK奇数边缘数据更改,偶数边缘数据样本
stcSpiInit.enReadBufferObject = SpiReadSendBuffer; // 读发送缓冲区
stcSpiInit.enWorkMode = SpiWorkMode3Line; // 3线模式
stcSpiInit.enTransMode = SpiTransOnlySend; // 仅发送模式
stcSpiInit.enCommAutoSuspendEn = Disable; // 启用/禁用通信自动挂起
stcSpiInit.enModeFaultErrorDetectEn = Disable; // 启用/禁用模式故障错误检测
stcSpiInit.enParitySelfDetectEn = Disable; // 启用/禁用奇偶校验自检
stcSpiInit.enParityEn = Disable; // 启动/禁止奇偶校验
stcSpiInit.enMasterSlaveMode = SpiModeMaster; // Spi主/从模式
stcSpiInit.stcDelayConfig.enSsSetupDelayOption = SpiSsSetupDelayCustomValue; // SS设置延迟SCK选项枚举
stcSpiInit.stcDelayConfig.enSsSetupDelayTime = SpiSsSetupDelaySck1; // SS设置延迟时间(enSsSetupDelayOption为自定义时效的值)
stcSpiInit.stcDelayConfig.enSsHoldDelayOption = SpiSsHoldDelayCustomValue; // SS保持延迟时间选项
stcSpiInit.stcDelayConfig.enSsHoldDelayTime = SpiSsHoldDelaySck1; // SS保持延迟时间(enSsHoldDelayOption为自定义时有效的值)
stcSpiInit.stcDelayConfig.enSsIntervalTimeOption = SpiSsIntervalCustomValue; // SS间隔时间选项
stcSpiInit.stcDelayConfig.enSsIntervalTime = SpiSsIntervalSck6PlusPck2; // SS间隔时间(enSsIntervalTimeOption为自定义时有效的值)
SPI_ClearFlag(SPI_UNIT, SpiFlagSendBufferEmpty);
SPI_ClearFlag(SPI_UNIT, SpiFlagParityError);
SPI_ClearFlag(SPI_UNIT, SpiFlagModeFaultError);
SPI_ClearFlag(SPI_UNIT, SpiFlagOverloadError);
SPI_Init(SPI_UNIT, &stcSpiInit);
MS5614T_CS1_H;
MS5614T_CS2_H;
MS5614T_CS3_H;
SPI_Cmd(SPI_UNIT, Enable);