| 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;}
 |