1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- #include "serial.h"
- #include "stm32f4xx_usart.h"
- #include "tinystdio.h"
- /** Data to track a serial device connection. */
- struct SSerialDev {
- /** The file descriptor for the open serial device. */
- int fd;
- };
- bool serialRead(SerialDev *dev, uint8_t *buffer, size_t n) {
- while(n) {
- size_t result = 0;
- unsigned int retries = 0;
- while ((USART_GetFlagStatus(USARTn, USART_FLAG_RXNE) == RESET) &&
- (retries++ < MAX_READ_RETRIES)) {
- }
- if(retries >= MAX_READ_RETRIES) {
- printf("Read error\r\n");
- return false;
- }
- *buffer = USART_ReceiveData(USARTn);
- //printf("Rx: 0x%X\r\n", *buffer);
- result++;
- buffer += result;
- n -= result;
- }
- return true;
- }
- bool serialWrite(SerialDev *dev, const uint8_t *buffer, size_t n) {
- while(n) {
- size_t result = 0;
- while(USART_GetFlagStatus(USARTn, USART_FLAG_TXE) == RESET)
- ;
- USART_SendData(USARTn, *buffer);
- //printf("Tx: 0x%X\r\n", *buffer);
- result++;
- buffer += result;
- n -= result;
- }
- return true;
- }
|