STM8 als IO-Expander

OP (Firma: Torrox.de) #5879987
Lesenswert?

Hallo,
um einen 1-16 Demultiplexer anzusteuern (ein SWDIO/SWDCLK Signal-Paar 
auf 16 Platinen im Nutzen), suche ich nach einer low cost / low pin 
count Lösung. Statt eines synchronen Schieberegisters, kamm ich jetzt 
auf die Idee, einen STM8S001J3 zu nehmen. Ich bin mir nicht ganz sicher, 
ob ich den Controller so konfigurieren kann, dass nur der Empfangsteil 
der UART aktiv ist und ich 4 Pins als digitale Ausgänge verwenden kann.

Kennt sich jemand mit diesen Dinger so gut aus, dass er mir die Frage 
mit der Konfiguration so beantworten kann? Hat jemand eine andere Idee?

schönen Abend noch,

Torsten
#5880083
Lesenswert?

1
/* ------------------------------------------------------------
2
                            UART_INIT
3
      Initialisieren der seriellen Schnittstelle. Mit internem
4
      Taktgeber funktioniert die Schnittstelle nur bis
5
      57600 Baud
6
   ------------------------------------------------------------ */
7

8
void uart_init(unsigned int baudrate)
9
{
10

11
//  Transmit enable 
12
//  USART1_CR2 |= USART_CR2_TEN;                          // TxD enabled
13

14
// Transmit disable
15
  USART1_CR2 &= ~(USART_CR2_TEN);
16

17
  USART1_CR2 |= USART_CR2_REN;                          // RxD enable
18
  USART1_CR3 &= ~(USART_CR3_STOP1);                     // Stopbit
19

20
  // Baudratendivisor:
21
  //   Divisior = F_CPU / Baudrate
22
  //   Nibbles des Divisors N3 N2 N1 N0
23
  //   Bsp.:   16 MHz / 9600 bd = 1667d = 0683h
24
  //      Hier waere dann:
25
  //        N3 = 0   / N2 = 6  / N1 = 8  / N0 = 3
26

27
  //      BRR1 bekaeme N2 und N1 => 0x68
28
  //      BRR2 bekaeme N3 und N0 => 0x03
29

30
  //  USARTx_BRR1 = 0x68; // 9600 Baud
31
  //  USARTx_BRR2 = 0x03;
32

33
  switch (baudrate)
34
  {
35
    case 57600 :
36
    {
37
      USART1_BRR1 = 0x11;
38
      USART1_BRR2 = 0x06;
39
      break;
40
    }
41
    case 38400 :
42
    {
43
      USART1_BRR1 = 0x1a;
44
      USART1_BRR2 = 0x0a;
45
      break;
46
    }
47
    case 28800 :
48
    {
49
      USART1_BRR1 = 0x22;
50
      USART1_BRR2 = 0x0c;
51
      break;
52
    }
53
    case 19200 :
54
    {
55
      USART1_BRR1 = 0x34;
56
      USART1_BRR2 = 0x02;
57
      break;
58
    }
59
    case 9600 :
60
    {
61
      USART1_BRR1 = 0x68;
62
      USART1_BRR2 = 0x03;
63
      break;
64
    }
65
    case 4800 :
66
    {
67
      USART1_BRR1 = 0xd0;
68
      USART1_BRR2 = 0x05;
69
      break;
70
    }
71
    default : break;
72
  }
73

74
}

Den GPIO-Pin für USART1-TxD dann als GPIO konfigurieren.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren