68 #define RECEIVE_QUEUE_SIZE NUCLEO_UARTx_RX_QUEUE_SIZE 71 static uint8_t rxQ[RECEIVE_QUEUE_SIZE];
72 static uint16_t rxHead = 0;
73 static uint16_t rxTail = 0;
74 volatile uint16_t rxUsed = 0;
75 static UART_HandleTypeDef huart;
76 static DMA_HandleTypeDef dma_handle;
89 void prepareDmaTx(
void){}
98 GPIO_InitTypeDef GPIO_InitStructure;
100 NUCLEO_UARTx_GPIO_CLK_ENABLE();
101 NUCLEO_UARTx_CLK_ENABLE();
102 NUCLEO_UARTx_DMA_CLK_ENABLE();
104 dma_handle.Instance=NUCLEO_UARTx_RX_DMA_CHANNEL;
105 #ifdef USE_STM32L0XX_NUCLEO 106 dma_handle.Init.Request=NUCLEO_UARTx_RX_DMA_REQUEST;
108 dma_handle.Init.Direction=DMA_PERIPH_TO_MEMORY;
109 dma_handle.Init.PeriphInc=DMA_PINC_DISABLE;
110 dma_handle.Init.MemInc=DMA_MINC_ENABLE;
111 dma_handle.Init.PeriphDataAlignment=DMA_PDATAALIGN_BYTE;
112 dma_handle.Init.MemDataAlignment=DMA_MDATAALIGN_BYTE;
113 dma_handle.Init.Mode=DMA_CIRCULAR;
114 dma_handle.Init.Priority=DMA_PRIORITY_LOW;
115 HAL_DMA_Init(&dma_handle);
117 GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
118 GPIO_InitStructure.Pull = GPIO_PULLUP;
119 GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;
121 GPIO_InitStructure.Pin = NUCLEO_UARTx_RX_PIN;
122 GPIO_InitStructure.Alternate = NUCLEO_UARTx_AF;
123 HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
125 GPIO_InitStructure.Pin = NUCLEO_UARTx_TX_PIN;
126 GPIO_InitStructure.Alternate = NUCLEO_UARTx_AF;
127 HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
130 huart.Init.BaudRate=SDK_EVAL_UART_BAUDRATE;
131 huart.Init.WordLength=UART_WORDLENGTH_8B;
132 huart.Init.StopBits=UART_STOPBITS_1;
133 huart.Init.Parity=UART_PARITY_NONE;
134 huart.Init.HwFlowCtl=UART_HWCONTROL_NONE;
135 huart.Init.Mode=UART_MODE_TX_RX;
136 __HAL_LINKDMA(&huart, hdmarx, dma_handle);
138 huart.Instance=NUCLEO_UARTx;
141 HAL_UART_Init(&huart);
143 __HAL_UART_ENABLE(&huart);
147 HAL_UART_Receive_DMA(&huart,rxQ,RECEIVE_QUEUE_SIZE);
152 void SdkEvalComBaudrate(uint32_t baudrate)
154 huart.Init.BaudRate=baudrate;
155 __HAL_UART_DISABLE(&huart);
156 HAL_UART_Init(&huart);
157 __HAL_UART_ENABLE(&huart);
164 #define stdout _LLIO_STDOUT 167 size_t __write(
int handle,
const unsigned char * buffer,
size_t size)
172 if (handle != _LLIO_STDOUT && handle != _LLIO_STDERR) {
177 HAL_UART_Transmit(&huart, &c, 1, 100);
182 HAL_UART_Transmit(&huart, (uint8_t*)buffer, size, 300);
187 size_t fflush(
int handle)
189 return __write(_LLIO_STDOUT, NULL, 0);
195 size_t __read(
int handle,
unsigned char * buffer,
size_t size)
201 if (handle != _LLIO_STDIN)
208 rxHead=(RECEIVE_QUEUE_SIZE-huart.hdmarx->Instance->CNDTR)%RECEIVE_QUEUE_SIZE;
211 rxUsed=rxHead-rxTail;
213 rxUsed=RECEIVE_QUEUE_SIZE-rxTail+rxHead;
217 for(nChars = 0; (rxUsed>0) && (nChars < size); nChars++) {
218 *buffer++ = rxQ[rxTail];
219 rxTail = (rxTail+1) % RECEIVE_QUEUE_SIZE;
226 void enqueueRxChars(
unsigned char * buffer, uint16_t size)
228 while (( size > 0 ) && (rxUsed < (RECEIVE_QUEUE_SIZE-1))) {
229 rxQ[rxHead] = *buffer++;
230 rxHead = (rxHead+1) % RECEIVE_QUEUE_SIZE;
236 uint8_t __io_getcharNonBlocking(uint8_t *data)
238 if (__read(_LLIO_STDIN,data,1))
244 void __io_putchar(
char c )
246 __write(_LLIO_STDOUT, (
unsigned char *)&c, 1);
252 __read(_LLIO_STDIN, &c, 1);
256 void __io_flush(
void )
258 __write(_LLIO_STDOUT, NULL, 0);
266 #define ITM_Port8(n) (*((volatile unsigned char *)(0xE0000000+4*n))) 267 #define ITM_Port16(n) (*((volatile unsigned short*)(0xE0000000+4*n))) 268 #define ITM_Port32(n) (*((volatile unsigned long *)(0xE0000000+4*n))) 269 #define DEMCR (*((volatile unsigned long *)(0xE000EDFC))) 270 #define TRCENA 0x01000000 272 struct __FILE {
int handle; };
277 int fputc(
int c, FILE *f) {
279 HAL_UART_Transmit(&huart, (uint8_t*)&c, 1, 300);
285 uint8_t __io_getcharNonBlocking(uint8_t *data)
287 int c = fgetc(&__stdin);
297 int fgetc (FILE *f) {
304 rxHead=(RECEIVE_QUEUE_SIZE-huart.hdmarx->Instance->CNDTR)%RECEIVE_QUEUE_SIZE;
307 rxUsed=rxHead-rxTail;
309 rxUsed=RECEIVE_QUEUE_SIZE-rxTail+rxHead;
313 for(nChars = 0; (rxUsed>0) && (nChars < 1); nChars++) {
315 rxTail = (rxTail+1) % RECEIVE_QUEUE_SIZE;
326 uint8_t append_to_buf(
void)
330 HAL_UART_Receive(&huart, &c, 1, 100);
332 rxHead=(rxHead+1)%RECEIVE_QUEUE_SIZE;
335 if(c==
'\n' || c==
'\r')
This file contains SDK EVAL configuration and useful defines.
void SdkEvalComInit(void)
Configures UART port in RX DMA mode and TX blocking mode.
This file contains definitions for Software Development Kit eval board COM ports.