120120#endif // HAVE_HWSERIALx
121121
122122// Constructors ////////////////////////////////////////////////////////////////
123- HardwareSerial::HardwareSerial ( uint32_t _rx, uint32_t _tx, uint32_t _rts, uint32_t _cts)
123+ STM32HardwareSerial::STM32HardwareSerial ( pin_size_t _rx, pin_size_t _tx, pin_size_t _rts, pin_size_t _cts)
124124{
125125 init (digitalPinToPinName (_rx), digitalPinToPinName (_tx), digitalPinToPinName (_rts), digitalPinToPinName (_cts));
126126}
127127
128- HardwareSerial::HardwareSerial (PinName _rx, PinName _tx, PinName _rts, PinName _cts)
128+ STM32HardwareSerial::STM32HardwareSerial (PinName _rx, PinName _tx, PinName _rts, PinName _cts)
129129{
130130 init (_rx, _tx, _rts, _cts);
131131}
132132
133- HardwareSerial::HardwareSerial (void *peripheral, HalfDuplexMode_t halfDuplex)
133+ STM32HardwareSerial::STM32HardwareSerial (void *peripheral, HalfDuplexMode_t halfDuplex)
134134{
135135 // If PIN_SERIALy_RX is not defined assume half-duplex
136136 _serial.pin_rx = NC;
@@ -302,17 +302,17 @@ HardwareSerial::HardwareSerial(void *peripheral, HalfDuplexMode_t halfDuplex)
302302 init (_serial.pin_rx , _serial.pin_tx );
303303}
304304
305- HardwareSerial::HardwareSerial ( uint32_t _rxtx)
305+ STM32HardwareSerial::STM32HardwareSerial ( pin_size_t _rxtx)
306306{
307307 init (NC, digitalPinToPinName (_rxtx));
308308}
309309
310- HardwareSerial::HardwareSerial (PinName _rxtx)
310+ STM32HardwareSerial::STM32HardwareSerial (PinName _rxtx)
311311{
312312 init (NC, _rxtx);
313313}
314314
315- void HardwareSerial ::init (PinName _rx, PinName _tx, PinName _rts, PinName _cts)
315+ void STM32HardwareSerial ::init (PinName _rx, PinName _tx, PinName _rts, PinName _cts)
316316{
317317 if (_rx == _tx) {
318318 _serial.pin_rx = NC;
@@ -330,7 +330,7 @@ void HardwareSerial::init(PinName _rx, PinName _tx, PinName _rts, PinName _cts)
330330 _serial.tx_tail = 0 ;
331331}
332332
333- void HardwareSerial ::configForLowPower (void )
333+ void STM32HardwareSerial ::configForLowPower (void )
334334{
335335#if defined(HAL_PWR_MODULE_ENABLED) && (defined(UART_IT_WUF) || defined(LPUART1_BASE))
336336 // Reconfigure properly Serial instance to use HSI as clock source
@@ -342,7 +342,7 @@ void HardwareSerial::configForLowPower(void)
342342
343343// Actual interrupt handlers //////////////////////////////////////////////////////////////
344344
345- void HardwareSerial ::_rx_complete_irq (serial_t *obj)
345+ void STM32HardwareSerial ::_rx_complete_irq (serial_t *obj)
346346{
347347 // No Parity error, read byte and store it in the buffer if there is room
348348 unsigned char c;
@@ -364,7 +364,7 @@ void HardwareSerial::_rx_complete_irq(serial_t *obj)
364364
365365// Actual interrupt handlers //////////////////////////////////////////////////
366366
367- int HardwareSerial ::_tx_complete_irq (serial_t *obj)
367+ int STM32HardwareSerial ::_tx_complete_irq (serial_t *obj)
368368{
369369 size_t remaining_data;
370370 // previous HAL transfer is finished, move tail pointer accordingly
@@ -387,7 +387,7 @@ int HardwareSerial::_tx_complete_irq(serial_t *obj)
387387
388388// Public Methods //////////////////////////////////////////////////////////////
389389
390- void HardwareSerial ::begin (unsigned long baud, byte config)
390+ void STM32HardwareSerial ::begin (unsigned long baud, uint16_t config)
391391{
392392 uint32_t databits = 0 ;
393393 uint32_t stopbits = 0 ;
@@ -397,35 +397,42 @@ void HardwareSerial::begin(unsigned long baud, byte config)
397397 _config = config;
398398
399399 // Manage databits
400- switch (config & 0x07 ) {
401- case 0x02 :
400+ switch (config & SERIAL_DATA_MASK ) {
401+ case SERIAL_DATA_6 :
402402 databits = 6 ;
403403 break ;
404- case 0x04 :
404+ case SERIAL_DATA_7 :
405405 databits = 7 ;
406406 break ;
407- case 0x06 :
407+ case SERIAL_DATA_8 :
408408 databits = 8 ;
409409 break ;
410410 default :
411411 databits = 0 ;
412412 break ;
413413 }
414414
415- if ((config & 0x30 ) == 0x30 ) {
416- parity = UART_PARITY_ODD;
417- databits++;
418- } else if ((config & 0x20 ) == 0x20 ) {
419- parity = UART_PARITY_EVEN;
420- databits++;
421- } else {
422- parity = UART_PARITY_NONE;
415+ switch (config & SERIAL_PARITY_MASK) {
416+ case SERIAL_PARITY_ODD:
417+ parity = UART_PARITY_ODD;
418+ databits++; // word length = data bits + parity
419+ break ;
420+ case SERIAL_PARITY_EVEN:
421+ parity = UART_PARITY_EVEN;
422+ databits++;
423+ break ;
424+ default :
425+ parity = UART_PARITY_NONE;
426+ break ;
423427 }
424428
425- if ((config & 0x08 ) == 0x08 ) {
426- stopbits = UART_STOPBITS_2;
427- } else {
428- stopbits = UART_STOPBITS_1;
429+ switch (config & SERIAL_STOP_BIT_MASK) {
430+ case SERIAL_STOP_BIT_2:
431+ stopbits = UART_STOPBITS_2;
432+ break ;
433+ default :
434+ stopbits = UART_STOPBITS_1;
435+ break ;
429436 }
430437
431438 switch (databits) {
@@ -453,7 +460,7 @@ void HardwareSerial::begin(unsigned long baud, byte config)
453460 }
454461}
455462
456- void HardwareSerial ::end ()
463+ void STM32HardwareSerial ::end ()
457464{
458465 _ready = false ;
459466
@@ -466,12 +473,12 @@ void HardwareSerial::end()
466473 _serial.rx_head = _serial.rx_tail ;
467474}
468475
469- int HardwareSerial ::available (void )
476+ int STM32HardwareSerial ::available (void )
470477{
471478 return ((unsigned int )(SERIAL_RX_BUFFER_SIZE + _serial.rx_head - _serial.rx_tail )) % SERIAL_RX_BUFFER_SIZE;
472479}
473480
474- int HardwareSerial ::peek (void )
481+ int STM32HardwareSerial ::peek (void )
475482{
476483 if (_serial.rx_head == _serial.rx_tail ) {
477484 return -1 ;
@@ -480,7 +487,7 @@ int HardwareSerial::peek(void)
480487 }
481488}
482489
483- int HardwareSerial ::read (void )
490+ int STM32HardwareSerial ::read (void )
484491{
485492 enableHalfDuplexRx ();
486493 // if the head isn't ahead of the tail, we don't have any characters
@@ -493,7 +500,7 @@ int HardwareSerial::read(void)
493500 }
494501}
495502
496- int HardwareSerial ::availableForWrite (void )
503+ int STM32HardwareSerial ::availableForWrite (void )
497504{
498505 tx_buffer_index_t head = _serial.tx_head ;
499506 tx_buffer_index_t tail = _serial.tx_tail ;
@@ -504,12 +511,12 @@ int HardwareSerial::availableForWrite(void)
504511 return tail - head - 1 ;
505512}
506513
507- void HardwareSerial ::flush ()
514+ void STM32HardwareSerial ::flush ()
508515{
509516 flush (0 );
510517}
511518
512- void HardwareSerial ::flush (uint32_t timeout)
519+ void STM32HardwareSerial ::flush (uint32_t timeout)
513520{
514521 // If we have never written a byte, no need to flush. This special
515522 // case is needed since there is no way to force the TXC (transmit
@@ -530,7 +537,7 @@ void HardwareSerial::flush(uint32_t timeout)
530537 }
531538}
532539
533- size_t HardwareSerial ::write (const uint8_t *buffer, size_t size)
540+ size_t STM32HardwareSerial ::write (const uint8_t *buffer, size_t size)
534541{
535542 size_t size_intermediate;
536543 size_t ret = size;
@@ -591,75 +598,75 @@ size_t HardwareSerial::write(const uint8_t *buffer, size_t size)
591598 return ret;
592599}
593600
594- size_t HardwareSerial ::write (uint8_t c)
601+ size_t STM32HardwareSerial ::write (uint8_t c)
595602{
596603 uint8_t buff = c;
597604 return write (&buff, 1 );
598605}
599606
600- void HardwareSerial ::setRx (uint32_t _rx)
607+ void STM32HardwareSerial ::setRx (pin_size_t _rx)
601608{
602609 _serial.pin_rx = digitalPinToPinName (_rx);
603610}
604611
605- void HardwareSerial ::setTx (uint32_t _tx)
612+ void STM32HardwareSerial ::setTx (pin_size_t _tx)
606613{
607614 _serial.pin_tx = digitalPinToPinName (_tx);
608615}
609616
610- void HardwareSerial ::setRx (PinName _rx)
617+ void STM32HardwareSerial ::setRx (PinName _rx)
611618{
612619 _serial.pin_rx = _rx;
613620}
614621
615- void HardwareSerial ::setTx (PinName _tx)
622+ void STM32HardwareSerial ::setTx (PinName _tx)
616623{
617624 _serial.pin_tx = _tx;
618625}
619626
620- void HardwareSerial ::setRts (uint32_t _rts)
627+ void STM32HardwareSerial ::setRts (pin_size_t _rts)
621628{
622629 _serial.pin_rts = digitalPinToPinName (_rts);
623630}
624631
625- void HardwareSerial ::setCts (uint32_t _cts)
632+ void STM32HardwareSerial ::setCts (pin_size_t _cts)
626633{
627634 _serial.pin_cts = digitalPinToPinName (_cts);
628635}
629636
630- void HardwareSerial ::setRtsCts (uint32_t _rts, uint32_t _cts)
637+ void STM32HardwareSerial ::setRtsCts (pin_size_t _rts, pin_size_t _cts)
631638{
632639 _serial.pin_rts = digitalPinToPinName (_rts);
633640 _serial.pin_cts = digitalPinToPinName (_cts);
634641}
635642
636- void HardwareSerial ::setRts (PinName _rts)
643+ void STM32HardwareSerial ::setRts (PinName _rts)
637644{
638645 _serial.pin_rts = _rts;
639646}
640647
641- void HardwareSerial ::setCts (PinName _cts)
648+ void STM32HardwareSerial ::setCts (PinName _cts)
642649{
643650 _serial.pin_cts = _cts;
644651}
645652
646- void HardwareSerial ::setRtsCts (PinName _rts, PinName _cts)
653+ void STM32HardwareSerial ::setRtsCts (PinName _rts, PinName _cts)
647654{
648655 _serial.pin_rts = _rts;
649656 _serial.pin_cts = _cts;
650657}
651658
652- void HardwareSerial ::setHalfDuplex (void )
659+ void STM32HardwareSerial ::setHalfDuplex (void )
653660{
654661 _serial.pin_rx = NC;
655662}
656663
657- bool HardwareSerial ::isHalfDuplex (void ) const
664+ bool STM32HardwareSerial ::isHalfDuplex (void ) const
658665{
659666 return _serial.pin_rx == NC;
660667}
661668
662- void HardwareSerial ::enableHalfDuplexRx (void )
669+ void STM32HardwareSerial ::enableHalfDuplexRx (void )
663670{
664671 if (isHalfDuplex ()) {
665672 // In half-duplex mode we have to wait for all TX characters to
@@ -672,17 +679,17 @@ void HardwareSerial::enableHalfDuplexRx(void)
672679 }
673680}
674681
675- void HardwareSerial ::setRxInvert (void )
682+ void STM32HardwareSerial ::setRxInvert (void )
676683{
677684 _rx_invert = true ;
678685}
679686
680- void HardwareSerial ::setTxInvert (void )
687+ void STM32HardwareSerial ::setTxInvert (void )
681688{
682689 _tx_invert = true ;
683690}
684691
685- void HardwareSerial ::setDataInvert (void )
692+ void STM32HardwareSerial ::setDataInvert (void )
686693{
687694 _data_invert = true ;
688695}
0 commit comments