void CSerialPort::writeInt(uint8_t n, const uint8_t* data, uint16_t length, bool flush) { switch (n) { case 1U: #if defined(STM32F4_DISCOVERY) WriteUSART3(data, length); if (flush) TXSerialFlush3(); #elif defined(STM32F4_PI) WriteUSART1(data, length); if (flush) TXSerialFlush1(); #elif defined(STM32F4_NUCLEO) WriteUSART2(data, length); if (flush) TXSerialFlush2(); #endif break; case 3U: #if defined(STM32F4_NUCLEO) && defined(STM32F4_NUCLEO_ARDUINO_HEADER) WriteUSART1(data, length); if (flush) TXSerialFlush1(); #else WriteUART5(data, length); if (flush) TXSerialFlush5(); #endif break; default: break; } }
void main(void) { BYTE bDataUSBReady1 = 0; BYTE bDataRS232Ready1 = 0; BYTE bDataUSBReady2 = 0; BYTE bDataRS232Ready2 = 0; BYTE bCountByte1 = 0; BYTE bCountByte2 = 0; BYTE bPosIn1 = 0; BYTE bPosIn2 = 0; BYTE bPosOut1 = 0; BYTE bPosOut2 = 0; while(1) { USBDeviceTasks(); if(USBDeviceState < CONFIGURED_STATE || USBSuspendControl==1) continue; /************* Seriale 1 *****************/ // Se ci sono dati da trasmettere su USART rileggo da USB if(!bDataUSBReady1) { bCountByte1 = getsUSBUSART(0, InBuff1, sizeof(InBuff1)); if(bCountByte1>0) { bDataUSBReady1 = 1; bPosIn1 = 0; } } // Ho preso dati da USB li scrivo su USART se la trasmissione è pronta if(bDataUSBReady1 && TXRdyUSART1()) { WriteUSART1(InBuff1[bPosIn1++]); // Una volta che sono stati scritti tutti i byte rileggo da USB if(bPosIn1==bCountByte1) bDataUSBReady1 = 0; } // Se ci sono dati nella USART li leggo e li metto nel buffer if(DataRdyUSART1() && bPosOut1<sizeof(OutBuff1)) { OutBuff1[bPosOut1] = ReadUSART1(); bPosOut1++; } // Se la USB è pronta per trasmettere e ci sono dati li scrivo su USB // Se arrivano dati ed il buffer è pieno c'è il rischio di perdere i dati if(USBUSARTIsTxTrfReady(0) && bPosOut1>0) { putUSBUSART(0, OutBuff1, bPosOut1); bPosOut1 = 0; } CDCTxService(0); /************* Seriale 2 *****************/ // Se ci sono dati da trasmettere su USART rileggo da USB if(!bDataUSBReady2) { bCountByte2 = getsUSBUSART(1, InBuff2, sizeof(InBuff2)); if(bCountByte2>0) { bDataUSBReady2 = 1; bPosIn2 = 0; } } // Ho preso dati da USB li scrivo su USART se la trasmissione è pronta if(bDataUSBReady2 && TXRdyUSART2()) { WriteUSART2(InBuff2[bPosIn2++]); // Una volta che sono stati scritti tutti i byte rileggo da USB if(bPosIn2==bCountByte2) bDataUSBReady2 = 0; } // Se ci sono dati nella USART li leggo e li metto nel buffer // Se arrivano dati ed il buffer è pieno c'è il rischio di perdere i dati if(DataRdyUSART2() && bPosOut2<sizeof(OutBuff2)) { OutBuff2[bPosOut2] = ReadUSART2(); bPosOut2++; } // Se la USB è pronta per trasmettere e ci sono dati li scrivo su USB if(USBUSARTIsTxTrfReady(1) && bPosOut2>0) { putUSBUSART(1, OutBuff2, bPosOut2); bPosOut2 = 0; } CDCTxService(1); } }//end main