Mahlzeit!
3 Schüsse ins Blaue:
1. Timing Problem?
Code:
void SendDataPackage(uint8_t Identifier, uint16_t value) {
// --- value zerlegen
uint8_t highB = (uint8_t)(value >> 8);
uint8_t lowB = (uint8_t)value;
// --- senden
USART1_Transmit(_StartCond); //Das hier kommt richtig an
USART1_Transmit(Identifier); //Das hier kommt richtig an
USART1_Transmit(lowB); //Das hier kommt FALSCH an
USART1_Transmit(highB); //Das hier kommt richtig an
USART1_Transmit(_EndCond); //Das hier kommt richtig an
}
2. Konvertierungsproblem?
Code:
void SendDataPackage(uint8_t Identifier, uint16_t value) {
// --- value zerlegen
uint8_t lowB = (uint8_t) (value & 0xff);
uint8_t highB = (uint8_t) (value >> 8);
// --- senden
USART1_Transmit(_StartCond); //Das hier kommt richtig an
USART1_Transmit(Identifier); //Das hier kommt richtig an
USART1_Transmit(lowB); //Das hier kommt FALSCH an
USART1_Transmit(highB); //Das hier kommt richtig an
USART1_Transmit(_EndCond); //Das hier kommt richtig an
}
3. Übertragung mit enm bekannten Testbyte (Timing die 2.)?
Code:
void SendDataPackage(uint8_t Identifier, uint16_t value) {
// --- value zerlegen
uint8_t lowB = (uint8_t) (value & 0xff);
uint8_t highB = (uint8_t) (value >> 8);
// --- senden
USART1_Transmit(_StartCond); //Das hier kommt richtig an
USART1_Transmit(Identifier); //Das hier kommt richtig an
USART1_Transmit(0xaa); //Das hier kommt FALSCH an
USART1_Transmit(highB); //Das hier kommt richtig an
USART1_Transmit(_EndCond); //Das hier kommt richtig an
}
Ich bau mir fürs Senden per UART immer einen Puffer:
Code:
uint8_t txbuffer[5];
void SendDataPackage(uint8_t Identifier, uint16_t value) {
// --- value zerlegen
txbuffer[2] = (uint8_t) (value & 0xff);
txbuffer[3] = (uint8_t) (value >> 8);
// --- frame bauen
txbuffer[0] = _StartCond;
txbuffer[1] = Identifier;
txbuffer[4] = _EndCond;
// --- senden
send_txbuffer(5);
}
void send_txbuffer(uint8_t len) {
for (uint8_t i=0;i<len;i++) {
USART1_Transmit(txbuffer[i]);
}
}
Da die USART einen Int wirft wenn der TX Puffer der USART leer ist, kann man dann den Puffer schön in einer int routine rausschreiben und derweil was anderes sinnvolles tun Und im PC kommt alles schön auf einmal an, da die Bytes am Stück geschrieben werden.
Viel Glück
Lesezeichen