serial.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include "serial.h"
  2. #include "stm32f4xx_usart.h"
  3. #include "tinystdio.h"
  4. /** Data to track a serial device connection. */
  5. struct SSerialDev {
  6. /** The file descriptor for the open serial device. */
  7. int fd;
  8. };
  9. bool serialRead(SerialDev *dev, uint8_t *buffer, size_t n) {
  10. while(n) {
  11. size_t result = 0;
  12. unsigned int retries = 0;
  13. while ((USART_GetFlagStatus(USARTn, USART_FLAG_RXNE) == RESET) &&
  14. (retries++ < MAX_READ_RETRIES)) {
  15. }
  16. if(retries >= MAX_READ_RETRIES) {
  17. printf("Read error\r\n");
  18. return false;
  19. }
  20. *buffer = USART_ReceiveData(USARTn);
  21. //printf("Rx: 0x%X\r\n", *buffer);
  22. result++;
  23. buffer += result;
  24. n -= result;
  25. }
  26. return true;
  27. }
  28. bool serialWrite(SerialDev *dev, const uint8_t *buffer, size_t n) {
  29. while(n) {
  30. size_t result = 0;
  31. while(USART_GetFlagStatus(USARTn, USART_FLAG_TXE) == RESET)
  32. ;
  33. USART_SendData(USARTn, *buffer);
  34. //printf("Tx: 0x%X\r\n", *buffer);
  35. result++;
  36. buffer += result;
  37. n -= result;
  38. }
  39. return true;
  40. }