Hallo Zusammen
Ich habe eine kleine Frage und zwar habe ich 6 Lasorsensoren, welche ich
über 6 Uarts einlese und dann via dem 7ten schicke.
Jeder Laser sendet 4 Byte Daten, wobei bei Byte 1 der Datensatz mit 1
anfängt. (so erkenne ich den Datenstart)
Nun will ich aber neben den 4 Byte Daten auch noch wissen, von welchen
Laser diese kommen.
Wie kann ich das umsetzen?
Mein Code bis jetzt:
UART_HandleTypeDef huart1;
UART_HandleTypeDef huart2;
UART_HandleTypeDef huart3;
UART_HandleTypeDef huart4;
UART_HandleTypeDef huart5;
UART_HandleTypeDef huart6;
UART_HandleTypeDef huart7;
UART_HandleTypeDef huart8;
/* USER CODE BEGIN PV */
UART_HandleTypeDef*
huart[6]={&huart1,&huart2,&huart3,&huart4,&huart5,&huart6};
#define LASER_COUNT 6
uint8_t receiveBuffer1[4];
uint8_t receiveBuffer2[4];
uint8_t receiveBuffer3[4];
uint8_t receiveBuffer4[4];
uint8_t receiveBuffer5[4];
uint8_t receiveBuffer6[4];
uint8_t *receiveBuffer[6]= {&receiveBuffer1[4], &receiveBuffer2[4],
&receiveBuffer3[4], &receiveBuffer4[4], &receiveBuffer5[4],
&receiveBuffer6[4]};
uint8_t rxSensor[LASER_COUNT][4];
uint8_t rxSensorIdx[LASER_COUNT];
bool rxSensorDone[LASER_COUNT];
int idx;
/* USER CODE END PV */
/* Private function prototypes
-----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_USART2_UART_Init(void);
static void MX_USART3_UART_Init(void);
static void MX_USART4_UART_Init(void);
static void MX_USART5_UART_Init(void);
static void MX_USART6_UART_Init(void);
static void MX_USART7_UART_Init(void);
static void MX_USART8_UART_Init(void);
void RxCpltCallback(UART_HandleTypeDef *huart, uint8_t *receiveBuffer)
{
for(int i=0;i<=5;i++){
if(huart==&huart[i]){
idx=i;
break;
}
};
if(!rxSensorDone[idx]){
if(receiveBuffer[idx] == 0x80){
rxSensorIdx[idx] = 0;
}
rxSensor[idx][rxSensorIdx[idx]] = receiveBuffer[idx];
rxSensorIdx[idx]++;
if(rxSensorIdx[idx] == 4){
rxSensorDone[idx]=true;
rxSensorIdx[idx] = 0;
}
}
HAL_UART_Receive_IT(&huart[idx], &receiveBuffer[idx], 1);
};
void TxCpltCallback(UART_HandleTypeDef *huart, uint8_t
*receiveBufferCopy)
{
HAL_UART_Transmit_IT(&huart7, &receiveBuffer[idx], 1);
}
int main(void)
{
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
MX_USART2_UART_Init();
MX_USART3_UART_Init();
MX_USART4_UART_Init();
MX_USART5_UART_Init();
MX_USART6_UART_Init();
MX_USART7_UART_Init();
MX_USART8_UART_Init();
// Start receiving the data via USART
HAL_UART_Receive_IT(&huart[idx], &receiveBuffer[idx], 1);
while (1)
{
for(idx=0; idx<5; idx++){
if(rxSensorDone[idx]==true){
HAL_UART_Transmit_IT(&huart7, &receiveBuffer[idx], 1);
rxSensorDone[idx]=false;
}
};
}
}
Stimmt dieser Code so bis jetzt in etwa?
Und wie gesagt, ich verstehe nicht wie ich beim Transmit_IT noch den
Index des Lasers mitgeben kann..
Kann mir da jemand helfen?
Vielen Dank!
Zum Beurteilen liegen sehr wenig Informationen vor. Carla ". schrieb: > uint8_t receiveBuffer1[4]; ... > for(idx=0; idx<5; idx++){ > if(rxSensorDone[idx]==true){ > HAL_UART_Transmit_IT(&huart7, &receiveBuffer[idx], 1); Die Länge des receiveBuffer (4 bytes) passt nicht zum Bereich, den der idx durchläuft (addressiert 5 bytes). Schicken die Laser noch ein Nullbyte zum Abschluss der Meldung? Dann muss das berücksichtigt werden. Carla ". schrieb: > Und wie gesagt, ich verstehe nicht wie ich beim Transmit_IT noch den > Index des Lasers mitgeben kann.. Hast Du in der Hand, die Bytes zu beeinflussen, welche die Laser senden? Dann einfach ein 5. Byte voranstellen mit der Nummer des Lasers/Receive-UARTs.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.