STM32 9.Bit in der UART setzen

Gast #2191711
Lesenswert?

Hallo,

ich möchte gerne zur Maskierung des Framestarts beim ersten gesendeten 
Byte der UART ein 9tes Bit anhängen.

Ich habe soweit die 9Bit aktiviert und im Register wird bei M auch eine 
"1" angezeigt. Ich lese Byteweise die Daten aus und sende byteweise per 
USART1->DR = ch;

Wie kann ich das 9te Bit setzen für das erste zu sendende Byte und wie 
lese ich es wieder aus. Wie ich gelesen habe, ersetzt das 9te Bit dann 
das Parity Bit und ich kann entweder nur Parity oder nur das 9te Bit 
übertragen.

Gruß
paule
Gast #2191882
Lesenswert?

Ich kenne das nur beim AVR, aber da dürften keine Unterschiede sein. 
Sonst könnte der sich dann mit einem STM32 nicht unterhalten. Da wird 
das erste Stopp-Bit verwendet. Man muss als zwei Stopp-Bits vorsehen. 
(Wenn ich das richtig verstanden habe.)
Gast #2192709
Lesenswert?

paule schrieb:
> Wie ich gelesen habe, ersetzt das 9te Bit dann
> das Parity Bit und ich kann entweder nur Parity oder nur das 9te Bit
> übertragen.

In der Beschreibung zum STM32 steht da nichts weiter darüber drin. Also 
einfach machen. USART_DR mit dem Wert beschreiben (9 Bits werden 
verwendet, wenn 'M' gestzt ist), der Rest wird einfach hinten dran 
gehangen. Die Verwendung von 2 Stopp-Bits (Beschreibung AVR) hat, wenn 
ich das richtig verstanden habe, nur mit Synchronisation bei Vollduplx 
zu tun.
Gast #2193396
Lesenswert?

Ja okay, schreib also einen 16 Bit Wert rein, dann werden aber nicht 
daraus zwei Bytes gemacht oder?
Ich denke mir das so, das ich also 16 Bit schreib, aber davon dann nur 9 
bit gesendet werden, richtig?
Beim nächsten Versand wenn Tx Buffer empty, schreib ich die nächsten 16 
bit rein?
Gast #2193466
Lesenswert?

paule schrieb:
> Ich denke mir das so, das ich also 16 Bit schreib, aber davon dann nur 9
> bit gesendet werden, richtig?

Ich hatte den STM32 noch nicht in den Fingern, aber genau so würde ich 
das Datenblatt verstehen (32 Bit USART_DR, nach dem 9. Bit wird alles 
ausgeblendet - ohne gesetztem 'M'-Bit schon nach dem 8.) und das mal so 
ausprobieren.
Gast #2196536
Lesenswert?

Ralf schrieb:
> paule schrieb:
>> Wie ich gelesen habe, ersetzt das 9te Bit dann
>> das Parity Bit und ich kann entweder nur Parity oder nur das 9te Bit
>> übertragen.
>
> In der Beschreibung zum STM32 steht da nichts weiter darüber drin. Also

Doch, siehe obigen Link Seite 769
1
Bits 8:0 DR[8:0]: Data value
2
...
3
  When transmitting with the parity enabled (PCE bit set to 1 in the USART_CR1 register), the 
4
  value written in the MSB (bit 7 or bit 8 depending on the data length) has no effect because 
5
  it is replaced by the parity.
6
  When receiving with the parity enabled, the value read in the MSB bit is the received parity 
7
  bit.
und auf der folgenden Seite
1
Bit 10 PCE: Parity control enable
2
  ... When the parity control is enabled, the computed parity is inserted at the MSB position
3
  (9th bit if M=1; 8th bit if M=0) ...
Also entweder 9 Bit oder Parity, beides zusammen geht nicht. 
Genausoweinig wie 7 Bit ohne Parity.


Bei der Beschreibung des USART_DR Registers steht übrigens auch 
eindeutig:
1
Bits 31:9 Reserved, forced by hardware to 0.

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