TM STM32F4xx Libraries  v1.0.0
Libraries for STM32F4xx devices from Tilen Majerle
tm_stm32f4_usart.h
1 
30 #ifndef TM_USART_H
31 #define TM_USART_H 250
32 
33 /* C++ detection */
34 #ifdef __cplusplus
35 extern C {
36 #endif
37 
201 #include "misc.h"
202 #include "stm32f4xx.h"
203 #include "stm32f4xx_rcc.h"
204 #include "stm32f4xx_gpio.h"
205 #include "stm32f4xx_usart.h"
206 #include "attributes.h"
207 #include "defines.h"
208 #include "tm_stm32f4_gpio.h"
209 
210 /* F405/407/415/417/F446 */
211 #if defined (STM32F40_41xxx) || defined(STM32F446xx)
212 #define USE_USART1
213 #define USE_USART2
214 #define USE_USART3
215 #define USE_UART4
216 #define USE_UART5
217 #define USE_USART6
218 #endif
219 /* F427/429/437/439 */
220 #if defined (STM32F427_437xx) || defined (STM32F429_439xx)
221 #define USE_USART1
222 #define USE_USART2
223 #define USE_USART3
224 #define USE_UART4
225 #define USE_UART5
226 #define USE_USART6
227 #define USE_UART7
228 #define USE_UART8
229 #endif
230 /* F401/411 */
231 #if defined (STM32F401xx) || defined(STM32F411xE)
232 #define USE_USART1
233 #define USE_USART2
234 #define USE_USART6
235 #endif
236 
237 
247 typedef enum {
253 
258 typedef enum {
264 
279 /* Default buffer size for each USART */
280 #ifndef USART_BUFFER_SIZE
281 #define USART_BUFFER_SIZE 32
282 #endif
283 
284 /* Set default buffer size for specific USART if not set by user */
285 #ifndef TM_USART1_BUFFER_SIZE
286 #define TM_USART1_BUFFER_SIZE USART_BUFFER_SIZE
287 #endif
288 #ifndef TM_USART2_BUFFER_SIZE
289 #define TM_USART2_BUFFER_SIZE USART_BUFFER_SIZE
290 #endif
291 #ifndef TM_USART3_BUFFER_SIZE
292 #define TM_USART3_BUFFER_SIZE USART_BUFFER_SIZE
293 #endif
294 #ifndef TM_UART4_BUFFER_SIZE
295 #define TM_UART4_BUFFER_SIZE USART_BUFFER_SIZE
296 #endif
297 #ifndef TM_UART5_BUFFER_SIZE
298 #define TM_UART5_BUFFER_SIZE USART_BUFFER_SIZE
299 #endif
300 #ifndef TM_USART6_BUFFER_SIZE
301 #define TM_USART6_BUFFER_SIZE USART_BUFFER_SIZE
302 #endif
303 #ifndef TM_UART7_BUFFER_SIZE
304 #define TM_UART7_BUFFER_SIZE USART_BUFFER_SIZE
305 #endif
306 #ifndef TM_UART8_BUFFER_SIZE
307 #define TM_UART8_BUFFER_SIZE USART_BUFFER_SIZE
308 #endif
309 
310 /* NVIC Global Priority */
311 #ifndef USART_NVIC_PRIORITY
312 #define USART_NVIC_PRIORITY 0x06
313 #endif
314 
315 /* U(S)ART settings, can be changed in your defines.h project file */
316 /* USART1 default settings */
317 #ifndef TM_USART1_HARDWARE_FLOW_CONTROL
318 #define TM_USART1_HARDWARE_FLOW_CONTROL TM_USART_HardwareFlowControl_None
319 #endif
320 #ifndef TM_USART1_MODE
321 #define TM_USART1_MODE USART_Mode_Tx | USART_Mode_Rx
322 #endif
323 #ifndef TM_USART1_PARITY
324 #define TM_USART1_PARITY USART_Parity_No
325 #endif
326 #ifndef TM_USART1_STOP_BITS
327 #define TM_USART1_STOP_BITS USART_StopBits_1
328 #endif
329 #ifndef TM_USART1_WORD_LENGTH
330 #define TM_USART1_WORD_LENGTH USART_WordLength_8b
331 #endif
332 
333 /* USART2 default settings */
334 #ifndef TM_USART2_HARDWARE_FLOW_CONTROL
335 #define TM_USART2_HARDWARE_FLOW_CONTROL TM_USART_HardwareFlowControl_None
336 #endif
337 #ifndef TM_USART2_MODE
338 #define TM_USART2_MODE USART_Mode_Tx | USART_Mode_Rx
339 #endif
340 #ifndef TM_USART2_PARITY
341 #define TM_USART2_PARITY USART_Parity_No
342 #endif
343 #ifndef TM_USART2_STOP_BITS
344 #define TM_USART2_STOP_BITS USART_StopBits_1
345 #endif
346 #ifndef TM_USART2_WORD_LENGTH
347 #define TM_USART2_WORD_LENGTH USART_WordLength_8b
348 #endif
349 
350 /* USART3 default settings */
351 #ifndef TM_USART3_HARDWARE_FLOW_CONTROL
352 #define TM_USART3_HARDWARE_FLOW_CONTROL TM_USART_HardwareFlowControl_None
353 #endif
354 #ifndef TM_USART3_MODE
355 #define TM_USART3_MODE USART_Mode_Tx | USART_Mode_Rx
356 #endif
357 #ifndef TM_USART3_PARITY
358 #define TM_USART3_PARITY USART_Parity_No
359 #endif
360 #ifndef TM_USART3_STOP_BITS
361 #define TM_USART3_STOP_BITS USART_StopBits_1
362 #endif
363 #ifndef TM_USART3_WORD_LENGTH
364 #define TM_USART3_WORD_LENGTH USART_WordLength_8b
365 #endif
366 
367 /* UART4 default settings */
368 #ifndef TM_UART4_HARDWARE_FLOW_CONTROL
369 #define TM_UART4_HARDWARE_FLOW_CONTROL TM_USART_HardwareFlowControl_None
370 #endif
371 #ifndef TM_UART4_MODE
372 #define TM_UART4_MODE USART_Mode_Tx | USART_Mode_Rx
373 #endif
374 #ifndef TM_UART4_PARITY
375 #define TM_UART4_PARITY USART_Parity_No
376 #endif
377 #ifndef TM_UART4_STOP_BITS
378 #define TM_UART4_STOP_BITS USART_StopBits_1
379 #endif
380 #ifndef TM_UART4_WORD_LENGTH
381 #define TM_UART4_WORD_LENGTH USART_WordLength_8b
382 #endif
383 
384 /* UART5 default settings */
385 #ifndef TM_UART5_HARDWARE_FLOW_CONTROL
386 #define TM_UART5_HARDWARE_FLOW_CONTROL TM_USART_HardwareFlowControl_None
387 #endif
388 #ifndef TM_UART5_MODE
389 #define TM_UART5_MODE USART_Mode_Tx | USART_Mode_Rx
390 #endif
391 #ifndef TM_UART5_PARITY
392 #define TM_UART5_PARITY USART_Parity_No
393 #endif
394 #ifndef TM_UART5_STOP_BITS
395 #define TM_UART5_STOP_BITS USART_StopBits_1
396 #endif
397 #ifndef TM_UART5_WORD_LENGTH
398 #define TM_UART5_WORD_LENGTH USART_WordLength_8b
399 #endif
400 
401 /* USART6 default settings */
402 #ifndef TM_USART6_HARDWARE_FLOW_CONTROL
403 #define TM_USART6_HARDWARE_FLOW_CONTROL TM_USART_HardwareFlowControl_None
404 #endif
405 #ifndef TM_USART6_MODE
406 #define TM_USART6_MODE USART_Mode_Tx | USART_Mode_Rx
407 #endif
408 #ifndef TM_USART6_PARITY
409 #define TM_USART6_PARITY USART_Parity_No
410 #endif
411 #ifndef TM_USART6_STOP_BITS
412 #define TM_USART6_STOP_BITS USART_StopBits_1
413 #endif
414 #ifndef TM_USART6_WORD_LENGTH
415 #define TM_USART6_WORD_LENGTH USART_WordLength_8b
416 #endif
417 
418 /* UART7 default settings */
419 #ifndef TM_UART7_HARDWARE_FLOW_CONTROL
420 #define TM_UART7_HARDWARE_FLOW_CONTROL TM_USART_HardwareFlowControl_None
421 #endif
422 #ifndef TM_UART7_MODE
423 #define TM_UART7_MODE USART_Mode_Tx | USART_Mode_Rx
424 #endif
425 #ifndef TM_UART7_PARITY
426 #define TM_UART7_PARITY USART_Parity_No
427 #endif
428 #ifndef TM_UART7_STOP_BITS
429 #define TM_UART7_STOP_BITS USART_StopBits_1
430 #endif
431 #ifndef TM_UART7_WORD_LENGTH
432 #define TM_UART7_WORD_LENGTH USART_WordLength_8b
433 #endif
434 
435 /* UART8 default settings */
436 #ifndef TM_UART8_HARDWARE_FLOW_CONTROL
437 #define TM_UART8_HARDWARE_FLOW_CONTROL TM_USART_HardwareFlowControl_None
438 #endif
439 #ifndef TM_UART8_MODE
440 #define TM_UART8_MODE USART_Mode_Tx | USART_Mode_Rx
441 #endif
442 #ifndef TM_UART8_PARITY
443 #define TM_UART8_PARITY USART_Parity_No
444 #endif
445 #ifndef TM_UART8_STOP_BITS
446 #define TM_UART8_STOP_BITS USART_StopBits_1
447 #endif
448 #ifndef TM_UART8_WORD_LENGTH
449 #define TM_UART8_WORD_LENGTH USART_WordLength_8b
450 #endif
451 
455 #define USART_WAIT(USARTx) do { while (!((USARTx)->SR & USART_FLAG_TXE)); } while (0)
456 
460 #define USART_STRING_DELIMITER '\n'
461 
479 void TM_USART_Init(USART_TypeDef* USARTx, TM_USART_PinsPack_t pinspack, uint32_t baudrate);
480 
492 void TM_USART_InitWithFlowControl(USART_TypeDef* USARTx, TM_USART_PinsPack_t pinspack, uint32_t baudrate, TM_USART_HardwareFlowControl_t FlowControl);
493 
500 static __INLINE void TM_USART_Putc(USART_TypeDef* USARTx, volatile char c) {
501  /* Check USART if enabled */
502  if ((USARTx->CR1 & USART_CR1_UE)) {
503  /* Wait to be ready, buffer empty */
504  USART_WAIT(USARTx);
505  /* Send data */
506  USARTx->DR = (uint16_t)(c & 0x01FF);
507  /* Wait to be ready, buffer empty */
508  USART_WAIT(USARTx);
509  }
510 }
511 
518 void TM_USART_Puts(USART_TypeDef* USARTx, char* str);
519 
527 void TM_USART_Send(USART_TypeDef* USARTx, uint8_t* DataArray, uint16_t count);
528 
534 uint8_t TM_USART_Getc(USART_TypeDef* USARTx);
535 
549 uint16_t TM_USART_Gets(USART_TypeDef* USARTx, char* buffer, uint16_t bufsize);
550 
559 uint8_t TM_USART_FindCharacter(USART_TypeDef* USARTx, uint8_t c);
560 
568 uint8_t TM_USART_BufferEmpty(USART_TypeDef* USARTx);
569 
577 uint8_t TM_USART_BufferFull(USART_TypeDef* USARTx);
578 
584 void TM_USART_ClearBuffer(USART_TypeDef* USARTx);
585 
593 void TM_USART_SetCustomStringEndCharacter(USART_TypeDef* USARTx, uint8_t Character);
594 
605 void TM_USART_InitCustomPinsCallback(USART_TypeDef* USARTx, uint16_t AlternateFunction);
606 
613 __weak void TM_USART1_ReceiveHandler(uint8_t c);
614 
621 __weak void TM_USART2_ReceiveHandler(uint8_t c);
622 
629 __weak void TM_USART3_ReceiveHandler(uint8_t c);
630 
637 __weak void TM_UART4_ReceiveHandler(uint8_t c);
638 
645 __weak void TM_UART5_ReceiveHandler(uint8_t c);
646 
653 __weak void TM_USART6_ReceiveHandler(uint8_t c);
654 
661 __weak void TM_UART7_ReceiveHandler(uint8_t c);
662 
669 __weak void TM_UART8_ReceiveHandler(uint8_t c);
670 
683 /* C++ detection */
684 #ifdef __cplusplus
685 }
686 #endif
687 
688 #endif
Definition: tm_stm32f4_usart.h:250
__weak void TM_UART7_ReceiveHandler(uint8_t c)
Callback function for receive interrupt on UART7 in case you have enabled custom USART handler mode...
uint8_t TM_USART_FindCharacter(USART_TypeDef *USARTx, uint8_t c)
Checks if character c is available in internal buffer.
Definition: tm_stm32f4_usart.h:249
void TM_USART_InitCustomPinsCallback(USART_TypeDef *USARTx, uint16_t AlternateFunction)
Callback for custom pins initialization for USARTx.
__weak void TM_USART2_ReceiveHandler(uint8_t c)
Callback function for receive interrupt on USART2 in case you have enabled custom USART handler mode...
__weak void TM_USART1_ReceiveHandler(uint8_t c)
Callback function for receive interrupt on USART1 in case you have enabled custom USART handler mode...
void TM_USART_Send(USART_TypeDef *USARTx, uint8_t *DataArray, uint16_t count)
Sends data array to USART port.
uint8_t TM_USART_BufferFull(USART_TypeDef *USARTx)
Checks if internal USARTx buffer is full.
__weak void TM_UART4_ReceiveHandler(uint8_t c)
Callback function for receive interrupt on UART4 in case you have enabled custom USART handler mode...
#define USART_WAIT(USARTx)
Wait till USART finishes transmission.
Definition: tm_stm32f4_usart.h:455
Definition: tm_stm32f4_usart.h:259
TM_USART_PinsPack_t
USART PinsPack enumeration to select pins combination for USART.
Definition: tm_stm32f4_usart.h:247
__weak void TM_UART8_ReceiveHandler(uint8_t c)
Callback function for receive interrupt on UART8 in case you have enabled custom USART handler mode...
Definition: tm_stm32f4_usart.h:262
uint16_t TM_USART_Gets(USART_TypeDef *USARTx, char *buffer, uint16_t bufsize)
Gets string from USART.
Definition: tm_stm32f4_usart.h:261
Definition: tm_stm32f4_usart.h:260
__weak void TM_USART6_ReceiveHandler(uint8_t c)
Callback function for receive interrupt on USART6 in case you have enabled custom USART handler mode...
uint8_t TM_USART_BufferEmpty(USART_TypeDef *USARTx)
Checks if internal USARTx buffer is empty.
void TM_USART_InitWithFlowControl(USART_TypeDef *USARTx, TM_USART_PinsPack_t pinspack, uint32_t baudrate, TM_USART_HardwareFlowControl_t FlowControl)
Initializes USARTx peripheral and corresponding pins with custom hardware flow control mode...
void TM_USART_ClearBuffer(USART_TypeDef *USARTx)
Clears internal USART buffer.
Definition: tm_stm32f4_usart.h:251
__weak void TM_UART5_ReceiveHandler(uint8_t c)
Callback function for receive interrupt on UART5 in case you have enabled custom USART handler mode...
Definition: tm_stm32f4_usart.h:248
static __INLINE void TM_USART_Putc(USART_TypeDef *USARTx, volatile char c)
Puts character to USART port.
Definition: tm_stm32f4_usart.h:500
void TM_USART_Init(USART_TypeDef *USARTx, TM_USART_PinsPack_t pinspack, uint32_t baudrate)
Initializes USARTx peripheral and corresponding pins.
TM_USART_HardwareFlowControl_t
USART Hardware flow control selection.
Definition: tm_stm32f4_usart.h:258
uint8_t TM_USART_Getc(USART_TypeDef *USARTx)
Gets character from internal USART buffer.
__weak void TM_USART3_ReceiveHandler(uint8_t c)
Callback function for receive interrupt on USART3 in case you have enabled custom USART handler mode...
void TM_USART_Puts(USART_TypeDef *USARTx, char *str)
Puts string to USART port.
void TM_USART_SetCustomStringEndCharacter(USART_TypeDef *USARTx, uint8_t Character)
Sets custom character for TM_USART_Gets() function to detect when string ends.