Example #1
0
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;
   }
}
Example #2
0
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