微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI电源管理交流 > 芯片BQ76pl455a芯片串联第二路收不到电压请大神解答一下

芯片BQ76pl455a芯片串联第二路收不到电压请大神解答一下

时间:10-02 整理:3721RD 点击:
void PL455A_Init(void)
{
/* USER CODE BEGIN (3) */
	// initialize local variables
	int nSent, nRead, nTopFound = 0;
	int nDev_ID, nGrp_ID;
	BYTE  bFrame[132];
	uint32_t  wTemp = 0;

    //-------------------------------
//	WakePL455();
//	CommClear();
//	CommReset();
    
	/** Code examples
	 * The command sequences below are examples of the message examples in the bq76PL455 Communication Examples document.
	 * each message example references the section in the document.
	 */

	// Wake all devices
	// The wake tone will awaken any device that is already in shutdown and the pwrdown will shutdown any device
	// that is already awake. The least number of times to sequence wake and pwrdown will be half the number of
	// boards to cover the worst case combination of boards already awake or shutdown.
	for(nDev_ID = 0; nDev_ID < TOTALBOARDS; nDev_ID++) {
		nSent = WriteReg(nDev_ID, 12, 0x20, 1, FRMWRT_ALL_NR);	// send out broadcast pwrdown command
		delayms(5); //~5ms
//		WakePL455();
//		delayms(5); //~5ms
	}

	// Mask Customer Checksum Fault bit
	nSent = WriteReg(0, 107, 0x8000, 2, FRMWRT_ALL_NR); // clear all fault summary flags

	// Clear all faults
	nSent = WriteReg(0, 82, 0xFFC0, 2, FRMWRT_ALL_NR);		// clear all fault summary flags
	nSent = WriteReg(0, 81, 0x38, 1, FRMWRT_ALL_NR); // clear fault flags in the system status register

	// Auto-address all boards (section 1.2.2)
	nSent = WriteReg(0, 14, 0x19, 1, FRMWRT_ALL_NR); // set auto-address mode on all boards
	nSent = WriteReg(0, 12, 0x08, 1, FRMWRT_ALL_NR); // enter auto address mode on all boards, the next write to this ID will be its address

	// Set addresses for all boards in daisy-chain (section 1.2.3)
	for (nDev_ID = 0; nDev_ID < TOTALBOARDS; nDev_ID++)
	{
		nSent = WriteReg(nDev_ID, 10, nDev_ID, 1, FRMWRT_ALL_NR); // send address to each board
	}

	// Enable all communication interfaces on all boards in the stack (section 1.2.1)
	nSent = WriteReg(0, 16, 0x10F8, 2, FRMWRT_ALL_NR);	// set communications baud rate and enable all interfaces on all boards in stack

	/* Change to final baud rate used in the application (set by BAUDRATE define in pl455.h).
	 * Up to this point, all communication is at 250Kb, as the COMM_RESET done at the initial
	 * startup resets the bq76PL455A-Q1 UART to 250Kb. */
	switch(BAUDRATE)
	{
        case 125000:
            nSent = WriteReg(0, 16, 0x00F8, 2, FRMWRT_ALL_NR);	// set communications baud rate and enable all interfaces
            delayms(1);
            //sciSetBaudrate(scilinREG, BAUDRATE);
            break;
        case 250000:
            delayms(1);
            break;
        case 500000:
            nSent = WriteReg(0, 16, 0x20F8, 2, FRMWRT_ALL_NR);	// set communications baud rate and enable all interfaces
            delayms(1);
            //sciSetBaudrate(scilinREG, BAUDRATE);
            break;
        case 1000000:
            nSent = WriteReg(0, 16, 0x30F8, 2, FRMWRT_ALL_NR);	// set communications baud rate and enable all interfaces
            delayms(1);
            //sciSetBaudrate(scilinREG, BAUDRATE);
            break;
	}

	/* Set communications interfaces appropriately for their position in the stack, and
	 * for baud rate used in the application (set by BAUDRATE define in pl455.h).
	 * (section 1.2.4)
	 */
	for (nDev_ID = TOTALBOARDS - 1; nDev_ID >= 0; --nDev_ID)
	{
		// read device ID to see if there is a response
		nRead = ReadReg(nDev_ID, 10, &wTemp, 1, 0); // 0ms timeout

		if(nRead == 0) // if nothing is read then this board doesn't existnTopFound = 0;
		else // a response was received
		{if(nTopFound == 0){ // if the last board was not present but this one is, this is the top board	if(nDev_ID == 0) // this is the only board	{switch(BAUDRATE)	{	case 125000:		nSent = WriteReg(nDev_ID, 16, 0x0080, 2, FRMWRT_SGL_NR);	// enable only single-end comm port on board		break;	case 250000:		nSent = WriteReg(nDev_ID, 16, 0x1080, 2, FRMWRT_SGL_NR);	// enable only single-end comm port on board		break;	case 500000:		nSent = WriteReg(nDev_ID, 16, 0x2080, 2, FRMWRT_SGL_NR);	// enable only single-end comm port on board		break;	case 1000000:		nSent = WriteReg(nDev_ID, 16, 0x3080, 2, FRMWRT_SGL_NR);	// enable only single-end comm port on board		break;	}	}	else // this is the top board of a stack (section 1.2.5)	{switch(BAUDRATE){case 125000:	nSent = WriteReg(nDev_ID, 16, 0x0028, 2, FRMWRT_SGL_NR);	// enable only comm-low and fault-low for the top board	break;case 250000:	nSent = WriteReg(nDev_ID, 16, 0x1028, 2, FRMWRT_SGL_NR);	// enable only comm-low and fault-low for the top board	break;case 500000:	nSent = WriteReg(nDev_ID, 16, 0x2028, 2, FRMWRT_SGL_NR);	// enable only comm-low and fault-low for the top board	break;case 1000000:	nSent = WriteReg(nDev_ID, 16, 0x3028, 2, FRMWRT_SGL_NR);	// enable only comm-low and fault-low for the top board	break;}nTopFound = 1;	}}else // this is a middle or bottom board{	if(nDev_ID == 0) // this is a bottom board of a stack (section 1.2.6)	{switch(BAUDRATE){case 125000:	nSent = WriteReg(nDev_ID, 16, 0x00D0, 2, FRMWRT_SGL_NR);	// enable comm-high, fault-high and single-end comm port on bottom board	break;case 250000:	nSent = WriteReg(nDev_ID, 16, 0x10D0, 2, FRMWRT_SGL_NR);	// enable comm-high, fault-high and single-end comm port on bottom board	break;case 500000:	nSent = WriteReg(nDev_ID, 16, 0x20D0, 2, FRMWRT_SGL_NR);	// enable comm-high, fault-high and single-end comm port on bottom board	break;case 1000000:	nSent = WriteReg(nDev_ID, 16, 0x30D0, 2, FRMWRT_SGL_NR);	// enable comm-high, fault-high and single-end comm port on bottom board	break;}	}	else // this is a middle board	{switch(BAUDRATE){case 125000:	nSent = WriteReg(nDev_ID, 16, 0x0078, 2, FRMWRT_SGL_NR);	// enable comm-high, fault-high, comm-low and fault-low on all middle boards	break;case 250000:	nSent = WriteReg(nDev_ID, 16, 0x1078, 2, FRMWRT_SGL_NR);	// enable comm-high, fault-high, comm-low and fault-low on all middle boards	break;case 500000:	nSent = WriteReg(nDev_ID, 16, 0x2078, 2, FRMWRT_SGL_NR);	// enable comm-high, fault-high, comm-low and fault-low on all middle boards	break;case 1000000:	nSent = WriteReg(nDev_ID, 16, 0x3078, 2, FRMWRT_SGL_NR);	// enable comm-high, fault-high, comm-low and fault-low on all middle boards	break;}	}}
		}
	}

	// Clear all faults (section 1.2.7)
	nSent = WriteReg(0, 82, 0xFFC0, 2, FRMWRT_ALL_NR); // clear all fault summary flags
	nSent = WriteReg(0, 81, 0x38, 1, FRMWRT_ALL_NR); // clear fault flags in the system status register

	delayms(10);

	// Configure AFE (section 2.2.1)

	nDev_ID = 0;
	nSent = WriteReg(nDev_ID, 60, 0x00, 1, FRMWRT_SGL_NR); // set 0 mux delay
	nSent = WriteReg(nDev_ID, 61, 0x00, 1, FRMWRT_SGL_NR); // set 0 initial delay

	// Configure voltage and internal sample period (section 2.2.2)
	nDev_ID = 0;
	nSent = WriteReg(nDev_ID, 62, 0xCC, 1, FRMWRT_SGL_NR); // set 99.92us ADC sampling period

	// Configure the oversampling rate (section 2.2.3)
	nDev_ID = 0;
	nSent = WriteReg(nDev_ID, 7, 0x03, 1, FRMWRT_SGL_NR); // set no oversampling period
	// nSent = WriteReg(nDev_ID,40, 0x50, 1, FRMWRT_SGL_NR); // set CTO COMM_PD_PER = 5s COMM_TMOUTPER = 0

	// Clear and check faults (section 2.2.4)
	nDev_ID = 0;
	nSent = WriteReg(nDev_ID, 81, 0x38, 1, FRMWRT_SGL_NR); // clear fault flags in the system status register
	nSent = WriteReg(nDev_ID, 82, 0xFFC0, 2, FRMWRT_SGL_NR); // clear all fault summary flags
	nRead = ReadReg(nDev_ID, 81, &wTemp, 1, 0); // 0ms timeout
	nRead = ReadReg(nDev_ID, 82, &wTemp, 2, 0); // 0ms timeout

	// Select number of cells and channels to sample (section 2.2.5.1)
	nDev_ID = 0;
	nSent = WriteReg(nDev_ID, 13, 0x10, 1, FRMWRT_SGL_NR); // set number of cells to 16
	nSent = WriteReg(nDev_ID, 3, 0xFFFFFFC0, 4, FRMWRT_SGL_NR); // select all cell, AUX channels 0 to 7, and internal digital die and internal analog die temperatures

	// Select identical number of cells and channels on all modules simultaneously (section 2.2.5.2)
	nSent = WriteReg(0, 13, 0x10, 1, FRMWRT_ALL_NR); // set number of cells to 16
	nSent = WriteReg(0, 3, 0xFFFFFFC0, 4, FRMWRT_ALL_NR); // select all cell, AUX channels 0 to 7, and internal digital die and internal analog die temperatures
//	nSent = WriteReg(0, 13, 0x08, 1, FRMWRT_ALL_NR); // set number of cells to 8
//	nSent = WriteReg(0, 3, 0x00FF03C0, 4, FRMWRT_ALL_NR); // select all cell channels 1-8, AUX channels 0 and 1, and internal digital die and internal analog die temperatures

	// Set cell over-voltage and cell under-voltage thresholds on a single board (section 2.2.6.1)
	nDev_ID = 0;
	nSent = WriteReg(nDev_ID, 144, 0xD1EC, 2, FRMWRT_SGL_NR); // set OV threshold = 4.1000V
	nSent = WriteReg(nDev_ID, 142, 0x4CCC, 2, FRMWRT_SGL_NR); // set UV threshold = 1.5000V

	// Set cell over-voltage and cell under-voltage thresholds on all boards simultaneously (section 2.2.6.2)
	nSent = WriteReg(0, 144, 0xD1EC, 2, FRMWRT_ALL_NR); // set OV threshold = 4.1000V
	nSent = WriteReg(0, 142, 0x4CCC, 2, FRMWRT_ALL_NR); // set UV threshold = 1.5000V

	// Send broadcast request to all boards to sample and send results (section 3.2)
//	nSent = WriteReg(0, 2, 0x02, 1, FRMWRT_ALL_NR); // send sync sample command
//	nSent = WaitRespFrame(bFrame, 81, 0); // 24 bytes data (x3) + packet header (x3) + CRC (x3), 0ms timeout

	// Send broadcast request to all boards to sample and store results (section 3.3.1)

#if 0
	nSent = WriteReg(0, 2, 0x00, 1, FRMWRT_ALL_NR); // send sync sample command
#endif //add by wj

	// Read sampled data from boards (section 3.3.2)
	// 24 bytes - still configured for 8 AFE channels plus 2 AUX channels plus internal digital and analog die
	// temperatures (see code for section 2.2.5.2)
//	nDev_ID = 2;
//	nSent = WriteReg(nDev_ID, 2, 0x20, 1, FRMWRT_SGL_R); // send read sampled values command
//	nSent = WaitRespFrame(bFrame, 27, 0); // 24 bytes data + packet header + CRC, 0ms timeout
//	nDev_ID = 1;
//	nSent = WriteReg(nDev_ID, 2, 0x20, 1, FRMWRT_SGL_R); // send read sampled values command
//	nSent = WaitRespFrame(bFrame, 27, 0); // 24 bytes data + packet header + CRC, 0ms timeout
	nDev_ID = 0;
	nSent = WriteReg(nDev_ID, 2, 0x20, 1, FRMWRT_SGL_R); // send read sampled values command
	nSent = WaitRespFrame(bFrame, 55, 0); // 52 bytes data + packet header + CRC, 0ms timeout

	// Send sample request to single board to sample and send results (section 4.2)
//	nDev_ID = 1;
//	nSent = WriteReg(nDev_ID, 2, 0x01, 1, FRMWRT_SGL_NR); // send sync sample command
//	nSent = WaitRespFrame(bFrame, 27, 0); // 24 bytes data + packet header + CRC, 0ms timeout

	// Send sample request with embedded channel and oversample information (section 4.3.1)
//	nDev_ID = 3;
//	nSent = WriteReg(nDev_ID, 2, 0x0000FF03C000, 6, FRMWRT_SGL_NR); // send sync sample command with channel
	// selection and oversample selection embedded

	// Read previously sampled data from single board (section 4.3.2)
	nDev_ID = 0;
	nSent = WriteReg(nDev_ID, 2, 0x20, 1, FRMWRT_SGL_R); // send read sampled values command
	nSent = WaitRespFrame(bFrame, 55, 0); // 52 bytes data + packet header + CRC, 0ms timeout

	// Configure GPIO pin direction and set new pin values (section 5.2.1)
	nDev_ID = 0;
	nSent = WriteReg(nDev_ID, 123, 0x00, 1, FRMWRT_SGL_NR);	// turn off all GPIO pull downs
	nSent = WriteReg(nDev_ID, 122, 0x00, 1, FRMWRT_SGL_NR);	// turn off all GPIO pull ups
	nSent = WriteReg(nDev_ID, 120, 0x07, 1, FRMWRT_SGL_NR);	// set GPIO[2:0] to output direction
	nSent = WriteReg(nDev_ID, 122, 0x07, 1, FRMWRT_SGL_NR);	// turn off GPIO[5:4] pull ups and turn on GPIO[2:0] pull ups
	nSent = WriteReg(nDev_ID, 121, 0x01, 1, FRMWRT_SGL_NR);	// set GPIO outputs (pattern b001)
	nSent = WriteReg(nDev_ID, 121, 0x02, 1, FRMWRT_SGL_NR);	// set GPIO outputs (pattern b010)
	nSent = WriteReg(nDev_ID, 121, 0x04, 1, FRMWRT_SGL_NR);	// set GPIO outputs (pattern b100)
	nSent = WriteReg(nDev_ID, 121, 0x07, 1, FRMWRT_SGL_NR);	// set GPIO outputs (pattern b111)
	nSent = WriteReg(nDev_ID, 121, 0x00, 1, FRMWRT_SGL_NR);	// set GPIO outputs (pattern b000)

	// Configure GPIO inputs with or without pull ups or pull downs (section 5.2.2)
	nDev_ID = 0;
	nSent = WriteReg(nDev_ID, 123, 0x04, 1, FRMWRT_SGL_NR);	// enable pull down for GPIO2, turn off all other GPIO pull downs
	nSent = WriteReg(nDev_ID, 122, 0x03, 1, FRMWRT_SGL_NR);	// enable pull ups for GPIO[1:0], turn off all other GPIO pull ups
	nSent = WriteReg(0, 122, 0x03, 1, FRMWRT_ALL_NR);	// broadcast to all boards to enable pull ups for GPIO[1:0] and turn off all other GPIO pull ups

	// Setting a GPIO output value (section 5.2.3.1)
	nDev_ID = 0;
	nSent = WriteReg(nDev_ID, 120, 0x17, 1, FRMWRT_SGL_NR);	// set GPIO direction for GPIO4 and GPIO[2:0] as outputs, GPIO3 and GPIO5 as inputs
	nSent = WriteReg(nDev_ID, 121, 0x12, 1, FRMWRT_SGL_NR);	// set GPIO4 and GPIO1, clear GPIO2 and GPIO0

	// Reading a GPIO input value (section 5.2.3.2)
	nDev_ID = 0;
	nSent = WriteReg(nDev_ID, 120, 0x30, 1, FRMWRT_SGL_NR);	// set GPIO direction for GPIO[5:4] as outputs, GPIO[3:0] as inputs
	nRead = ReadReg(nDev_ID, 124, &wTemp, 1, 0);	// read GPIO inputs, 0ms timeout

	// Steps for saving register configuration to EEPROM (sections 6.2.1 to 6.2.4)
	// ** the code is commented out below to avoid accidental use - uncomment to use
	nDev_ID = 0;
	//nSent = WriteReg(nDev_ID, 130, 0x8C2DB194, 4, FRMWRT_SGL_NR);	// write Magic Number 1
	//nSent = WriteReg(nDev_ID, 252, 0xA375E60F, 4, FRMWRT_SGL_NR);	// write Magic Number 2
	//nSent = WriteReg(nDev_ID, 12, 0x10, 1, FRMWRT_SGL_NR);	// send Write RAM to EEPROM command
	nRead = ReadReg(nDev_ID, 12, &wTemp, 1, 0);	// read WRITE_EEPROM status bit, 0ms timeout
	//test WRITE_EEPROM bit to check for completion

	// Steps for saving register configuration to EEPROM in all devices in stack (sections 6.2.5)
	// ** the code is commented out below to avoid accidental use - uncomment to use
	//nSent = WriteReg(0, 130, 0x8C2DB194, 4, FRMWRT_ALL_NR);	// write Magic Number 1
	//nSent = WriteReg(0, 252, 0xA375E60F, 4, FRMWRT_ALL_NR);	// write Magic Number 2
	//nSent = WriteReg(0, 12, 0x10, 1, FRMWRT_ALL_NR);	// send Write RAM to EEPROM command
	nDev_ID = 0;
	nRead = ReadReg(nDev_ID, 12, &wTemp, 1, 0);	// read WRITE_EEPROM status bit, 0ms timeout
	//test WRITE_EEPROM bit to check for completion
	nDev_ID = 1;
//	nRead = ReadReg(nDev_ID, 12, &wTemp, 1, 0);	// read WRITE_EEPROM status bit, 0ms timeout
	//test WRITE_EEPROM bit to check for completion
	nDev_ID = 2;
//	nRead = ReadReg(nDev_ID, 12, &wTemp, 1, 0);	// read WRITE_EEPROM status bit, 0ms timeout
	//test WRITE_EEPROM bit to check for completion

	// Assign devices to specific group IDs (section 7)
//	nDev_ID = 1;
//	nSent = WriteReg(nDev_ID, 11, 0x01, 1, FRMWRT_SGL_NR); // assign Dev ID 1 to Group ID 1
//	nDev_ID = 2;
//	nSent = WriteReg(nDev_ID, 11, 0x01, 1, FRMWRT_SGL_NR); // assign Dev ID 1 to Group ID 1

//	delayms(1);
//	nRead = ReadReg(1, 11, &wTemp, 1, 0);	// read group ID register, 0ms timeout
//	nRead = ReadReg(2, 11, &wTemp, 1, 0);	// read group ID register, 0ms timeout

	// Send group sample request with embedded channel and oversample information (section 7.1)
	// send sync sample command (first data byte = command (b[7:5] = 0) | highest device to respond (0x01)) with
	// channel selection and oversample selection embedded
//	nGrp_ID = 1;
//	nSent = WriteReg(nGrp_ID, 2, 0x02FFFF550000, 6, FRMWRT_GRP_R);
//	nSent = WaitRespFrame(bFrame, 86, 0); // 40 bytes data (x2) + packet header (x2) + CRC (x2), 0ms timeout

	// Send group sample request - 1 byte method (section 7.2)
	// send sync sample command with channel (data byte = command (b[7:5] = 0) | highest device to respond (0x01))
	// sampling parameters are taken from values already stored in Command Channel Select and Oversampling registers
//	nGrp_ID = 1;
//	nSent = WriteReg(nGrp_ID, 2, 0x02, 1, FRMWRT_GRP_R);
//	nSent = WaitRespFrame(bFrame, 86, 0); // 40 bytes data (x2) + packet header (x2) + CRC (x2), 0ms timeout

	// Send group register read - 2 byte method (section 7.3)
	// read Command Channel Select register (first data byte = highest device to respond (0x01), second data byte
	// = number of data bytes - 1 (4 bytes = 0x03))
	// sampling parameters are taken from values already stored in Command Channel Select and Oversampling registers
//	nGrp_ID = 1;
//	nSent = WriteReg(nGrp_ID, 3, 0x0203, 2, FRMWRT_GRP_R);
//	nSent = WaitRespFrame(bFrame, 14, 0); // 4 bytes data (x2) + packet header (x2) + CRC (x2), 0ms timeout

	// Send group register read - 1 byte method (section 7.4)
	// read Command Channel Select register (data byte = number of data bytes - 1 (4 bytes = b011) | highest device
	// to respond (0x01))
	// sampling parameters are taken from values already stored in Command Channel Select and Oversampling registers
//	nGrp_ID = 1;
//	nSent = WriteReg(nGrp_ID, 3, 0x62, 1, FRMWRT_GRP_R);
//	nSent = WaitRespFrame(bFrame, 14, 0); // 4 bytes data (x2) + packet header (x2) + CRC (x2), 0ms timeout

	// Send general broadcast register read - 2 byte method (section 8.1)
	// read Command Channel Select register (first data byte = highest device to respond (0x01), second data byte
	// = number of data bytes - 1 (0x03))
//	nSent = WriteReg(0, 3, 0x0203, 2, FRMWRT_ALL_R);
//	nSent = WaitRespFrame(bFrame, 14, 0); // 4 bytes data (x2) + packet header (x2) + CRC (x2), 0ms timeout

	// Send general broadcast register read - 1 byte method (section 8.2)
	// read Command Channel Select register (data byte = number of data bytes - 1 (4 bytes = b011) | highest device
	// to respond (0x01))
//	nSent = WriteReg(0, 3, 0x62, 1, FRMWRT_ALL_R);
//	nSent = WaitRespFrame(bFrame, 14, 0); // 4 bytes data (x2) + packet header (x2) + CRC (x2), 0ms timeout

/* USER CODE END */
}

extern u16 KalmanFilter(u16 v);
uint8_t temp_n1[32];
void Read_Cell_Val(void)
{
    BYTE  bFrame[64];
	uint32_t  wTemp, wVal;
    int nSent, i;

	nSent = WriteReg(0, 2, 0x00, 1, FRMWRT_SGL_R); // send read sampled values command
	nSent = WaitRespFrame(bFrame, 55, 0); // 52 bytes data + packet header + CRC, 0ms timeout
    if(nSent !=  -1)
    {
        for(i=0; i<16; i++)
        {
            wVal = (bFrame[2*i]<<8 | bFrame[2*i+1]);
            wTemp = (wVal * 5000)/65535;		//VCELL = [(2*VREF) / 65535]*READ_ADC_VALUE
            mCellVal[15-i] = (uint16_t)wTemp;
        }
        for(i=16; i<24; i++)
        {
            wVal = (bFrame[2*i]<<8 | bFrame[2*i+1]);
            wTemp = (wVal * 5000)/65535;		//VCELL = [(2*VREF) / 65535]*READ_ADC_VALUE
            mCellVal[39-i] = (uint16_t)wTemp;
        }
        wVal = (bFrame[2*24]<<8 | bFrame[2*24+1]);
        wTemp = (wVal * 5000)/65535;
		wTemp = (wTemp-2287)*131944/10000;
        mCellVal[24] = (uint16_t)wTemp;
        wVal = (bFrame[2*25]<<8 | bFrame[2*25+1]);
        wTemp = (wVal * 5000)/65535;
		wTemp = (wTemp-1808)*147514/10000;
        mCellVal[25] = (uint16_t)wTemp;
        
        wTemp = 0;
        for(i=0; i<16; i++)
        {
            wTemp += mCellVal[i];
        }
        mCellVal[26] = (uint16_t)wTemp;;
    }
    
    //---------------------------------------------------------
	nSent = WriteReg(1, 2, 0x00, 1, FRMWRT_SGL_R); // send read sampled values command
	nSent = WaitRespFrame(bFrame, 55, 0); // 52 bytes data + packet header + CRC, 0ms timeout
    if(nSent !=  -1)
    {
        for(i=0; i<16; i++)
        {
            wVal = (bFrame[2*i]<<8 | bFrame[2*i+1]);
            wTemp = (wVal * 5000)/65535;
            mCellVal1[15-i] = (uint16_t)wTemp;
        }
        for(i=16; i<24; i++)
        {
            wVal = (bFrame[2*i]<<8 | bFrame[2*i+1]);
            wTemp = (wVal * 5000)/65535;
            mCellVal1[39-i] = (uint16_t)wTemp;
        }
        wVal = (bFrame[2*24]<<8 | bFrame[2*24+1]);
        wTemp = (wVal * 5000)/65535;
		wTemp = (wTemp-2287)*131944/10000;
        mCellVal1[24] = (uint16_t)wTemp;
        wVal = (bFrame[2*25]<<8 | bFrame[2*25+1]);
        wTemp = (wVal * 5000)/65535;
		wTemp = (wTemp-1808)*147514/10000;
        mCellVal1[25] = (uint16_t)wTemp;
        
        wTemp = 0;
        for(i=0; i<16; i++)
        {
            wTemp += mCellVal[i];
        }
        mCellVal1[26] = (uint16_t)wTemp;
    }
    mCellVal[27] = KalmanFilter(mCellVal[26]);
	
	for(i=0; i<8; i++)
	{
		temp_n1[i] = get_ntc_temp(mCellVal[16+i]);
	}
}

请大神解答一下为什么数据接收mCellVal1,串口没有数据。。。。

确保,级联的板子正常被唤醒, 

2. 读取的时候,先发送sample and store指令, 等待5ms 在发送接收指令。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top