Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.43 KB | None | 0 0
  1. void USART_fsend(char* format, ...) {
  2.     char tmp_rs[128];
  3.     int i;
  4.     __IO int idx;
  5.  
  6.     va_list arglist;
  7.     va_start(arglist, format);
  8.     vsprintf(tmp_rs, format, arglist);
  9.     va_end(arglist);
  10.     idx = USART_TX_Empty;
  11.  
  12.     for (i = 0; i < strlen(tmp_rs); i++) {
  13.         USART_TxBuf[idx] - tmp_rs[i];
  14.         idx++;
  15.         if(idx >= USART_TxBuf_LEN) idx = 0;
  16.     }
  17.     __disable_irq();
  18.  
  19.     if ((USART_TX_Empty == USART_TX_Busy) && (flag == 0)) {
  20.         /*
  21.          * Sprawdzenie czy nadawanie wciąż trwa - jeżeli transmisja trwa to powyższa linijka jest niespełniona.
  22.          * Flaga jest konieczna  - patrz: próba wysłania jednego znaku, tzn.:
  23.          *      po wysłaniu jednego znaku wskaźniki 'EMPTY' i 'BUSY' są takie same i warunek byłby spełniony.
  24.          * Jeżeli flaga == 0 -> przerwania są wyłączone i trzeba przejśc przez ciało 'ifa'.
  25.          * Jeżeli flaga == 1 -> ciało 'ifa' jest pomijane i przechodzę od razu do 'else'.
  26.          */
  27.         USART_TX_Empty = idx;
  28.         uint8_t tmp = USART_TxBuf[USART_TX_Busy]; // Wrzucenie znaku do kolejki.
  29.         USART_TX_Busy++;
  30.         if(USART_TX_Busy >= USART_TxBuf_LEN) USART_TX_Busy = 0;
  31.         /*
  32.          * Oprócz przesłania znaku zostanie również włączone przerwanie od nadawania.
  33.          * Po zakończeniu transmisji wywoływany jest 'callback'.
  34.          */
  35.         HAL_UART_Transmit_IT(&huart2, &tmp, 1);
  36.         flag = 1; // Ustawienie flagi oznacza, że transmisja się rozpoczęła.
  37.     } else {
  38.         USART_TX_Empty = idx;
  39.     }
  40.     __enable_irq(); // Ponownie włącza przerwania.
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement