So sollte es gehen:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if ( (huart == &huart1 && (received==0) )
{
received1=1;
HAL_UART_Receive_IT(&huart1,(uint8_t *)Rx_Data,1);
}
if( (huart == &huart2)&& (received2==0) )
{
received2=1;
HAL_UART_Receive_IT(&huart2,(uint8_t *)Rx_Data,1);
}
}
stm31 schrieb:
> Guten Tag,
>
> folgende Frage beschäftigt mich:
>
> Ich möchte über die zwei seperaten USART Schnittstellen des µCs Daten
> empfangen. Für jeweils eine Schnittstelle bekomme ich dies auch hin.
> Dafür nutze ich folgende Funktionen:
>1 | > HAL_UART_Receive_IT(&huart1,(uint8_t *)Rx_Data,1);
|
2 | >
|
>
> Vereinfachter Code:
>
1 | > void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
|
2 | > {
|
3 | > if(huart->Instance == USART1&&received==0)
|
4 | > {
|
5 | > received=1
|
6 | > }
|
7 | > HAL_UART_Receive_IT(&huart1,(uint8_t *)Rx_Data,1);
|
8 | > }
|
9 | >
|
> Meine Idee für zweimal UART RX wäre in der Callback Funktion
1 | > void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
|
2 | > {
|
3 | > if(huart->Instance == USART1&&received1==0)
|
4 | > {
|
5 | > received1=1
|
6 | > }
|
7 | > if(huart->Instance == USART2&&received2==0)
|
8 | > {
|
9 | > received2=1
|
10 | > }
|
11 | > HAL_UART_Receive_IT(&huart1,(uint8_t *)Rx_Data,1);
|
12 | > HAL_UART_Receive_IT(&huart2,(uint8_t *)Rx_Data,1);
|
13 | > }
|
>
> Falsch gedacht, funktioniert natürlich nicht.
>
> Wie macht man es richtig? Direkt im UARTX_IRQHandler?
> Wie bekomme ich da die eingehenden Daten?