snickerdoodle Platform Controller
firmware for STM32F0 platform controller
UART Functions

Functions

void sd_usart1_init (void)
 USART 1 Initialization.
 
void sd_usart2_init (void)
 USART 2 Initialization.
 
void sd_usart3_init (void)
 USART 3 Initialization.
 
void HAL_UART_MspInit (UART_HandleTypeDef *huart)
 
void HAL_UART_MspDeInit (UART_HandleTypeDef *huart)
 
enum sd_uart_err sd_uart_rx_init (struct sd_uart_dev *dev, struct sd_cbuf *rx_buff)
 UART Receive Interrupt Initialization Enable and prepare the UART to receive on interrupt. More...
 
void sd_uart_irqhandler (struct sd_uart_dev *dev)
 UART Interrupt Handler Handle interrupt events on the UART peripheral. More...
 
enum sd_uart_err sd_uart_transmit (struct sd_uart_dev *dev, uint8_t *buf, uint32_t len, uint32_t timeout)
 Transmit Data In Blocking Mode. More...
 

Detailed Description

Function Documentation

◆ HAL_UART_MspInit()

void HAL_UART_MspInit ( UART_HandleTypeDef *  huart)

#include <Src/sd_uart.c>

USART 1 GPIO Configuration

Pin/Port Signal –——
PB7 USART1_RX
PB6 USART1_TX



USART 2 GPIO Configuration

Pin/Port Signal --——
PD5 USART2_TX
PD6 USART2_RX
PD4 USART2_RTS
PD3 USART2_CTS


USART 2 GPIO Configuration

Pin/Port Signal -----—
PC4 USART3_TX
PC5 USART3_RX
168 {
169  GPIO_InitTypeDef GPIO_InitStruct;
170 
171  if (huart->Instance == USART1) {
172  /* Peripheral clock enable */
173  __USART1_CLK_ENABLE();
174 
175 
184  GPIO_InitStruct.Pin = ZYNQ_CONSOLE_TX_Pin|ZYNQ_CONSOLE_RX_Pin;
185  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
186  GPIO_InitStruct.Pull = GPIO_PULLUP;
187  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
188  GPIO_InitStruct.Alternate = GPIO_AF0_USART1;
189  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
190 
191  /* Peripheral interrupt init*/
192  HAL_NVIC_SetPriority(USART1_IRQn, 1, 0);
193  HAL_NVIC_EnableIRQ(USART1_IRQn);
194 
195  } else if (huart->Instance == USART2) {
196  /* Peripheral clock enable */
197  __USART2_CLK_ENABLE();
198 
209  GPIO_InitStruct.Pin = BT_HCI_RX_Pin|BT_HCI_TX_Pin;
210  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
211  GPIO_InitStruct.Pull = GPIO_PULLUP;
212  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
213  GPIO_InitStruct.Alternate = GPIO_AF0_USART2;
214  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
215 
216  GPIO_InitStruct.Pin = BT_HCI_CTS_Pin|BT_HCI_RTS_Pin;
217  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
218  GPIO_InitStruct.Pull = GPIO_NOPULL;
219  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
220  GPIO_InitStruct.Alternate = GPIO_AF0_USART2;
221  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
222 
223  /* Peripheral interrupt init*/
224  HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
225  HAL_NVIC_EnableIRQ(USART2_IRQn);
226 
227  } else if (huart->Instance == USART3) {
228  /* Peripheral clock enable */
229  __USART3_CLK_ENABLE();
230 
239  GPIO_InitStruct.Pin = WL_RS232_TX_Pin | WL_RS232_RX_Pin;
240  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
241  GPIO_InitStruct.Pull = GPIO_PULLUP;
242  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
243  GPIO_InitStruct.Alternate = GPIO_AF0_USART3;
244  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
245 
246  /* Peripheral interrupt init*/
247  HAL_NVIC_SetPriority(USART3_4_IRQn, 0, 0);
248  HAL_NVIC_EnableIRQ(USART3_4_IRQn);
249  }
250 }

◆ sd_uart_irqhandler()

void sd_uart_irqhandler ( struct sd_uart_dev dev)

#include <Src/sd_uart.c>

UART Interrupt Handler Handle interrupt events on the UART peripheral.

Parameters
devUART device that triggered the interrupt
Return values
None
362 {
363  UART_HandleTypeDef *huart = dev->uart;
364 
365  /* Check for errors and store them in the device error state */
366  if ((dev->error |= __SD_UART_ERROR_IT(huart))) {
367  __SD_UART_CLEAR_ERROR_IT(huart); /* Clear the error flags */
368  sd_uart_err_cb(dev); /* Execute error callback */
369  dev->error = SD_UART_ERROR_NONE; /* Clear the error */
370  return; /* Return without reading or writing */
371  }
372 
373  /* Receive Interrupt */
374  if ((__HAL_UART_GET_IT(huart, UART_IT_RXNE) != RESET) &&
375  (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_RXNE) != RESET)) {
376  sd_uart_rx_isr(dev);
377  /* Clear RXNE interrupt flag */
378  __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
379  }
380 
381  /* Transmit Interrupt */
382  if ((__HAL_UART_GET_IT(huart, UART_IT_TXE) != RESET) &&
383  (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_TXE) != RESET)) {
384  UART_Transmit_IT(huart);
385  }
386 
387  /* Transmit End Interrupt */
388  if ((__HAL_UART_GET_IT(huart, UART_IT_TC) != RESET) &&
389  (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_TC) != RESET)) {
390  UART_EndTransmit_IT(huart);
391  }
392 }
#define __SD_UART_ERROR_IT(__HANDLE__)
Check whether an error interrupt has occured. Checks the 4 LSBs of the interrupt and status register ...
Definition: sd_uart.h:81
static void sd_uart_err_cb(struct sd_uart_dev *dev)
Handle UART errors.
Definition: sd_uart.c:454
#define __SD_UART_CLEAR_ERROR_IT(__HANDLE__)
Clear error interrupts Clears the 4 LSBs of the interrupt flag clear register (ICR).
Definition: sd_uart.h:92
UART_HandleTypeDef * uart
Definition: sd_uart.h:140
static enum sd_uart_err sd_uart_rx_isr(struct sd_uart_dev *dev)
Receive Interrupt Routine.
Definition: sd_uart.c:404
uint8_t error
Definition: sd_uart.h:147

◆ sd_uart_rx_init()

enum sd_uart_err sd_uart_rx_init ( struct sd_uart_dev dev,
struct sd_cbuf rx_buff 
)

#include <Src/sd_uart.c>

UART Receive Interrupt Initialization Enable and prepare the UART to receive on interrupt.

Note
This function expects that the UART peripheral and the buffer have already been inititialized and are ready to be used.
Parameters
uart_devDevice to initialize UART and buffer with
huartUART peripheral handle
rx_buffBuffer to use for UART receive function
Return values
SD_UART_SUCCESSon success, error state otherwise
319 {
320  UART_HandleTypeDef *huart = dev->uart;
321 
322  if ((huart == NULL) || (rx_buff == NULL))
323  return SD_UART_ERROR;
324 
325  dev->rx_buff = rx_buff; /* Set the RX buffer pointer */
326 
327  /* Process Locked */
328  if (huart->Lock == HAL_LOCKED)
329  return SD_UART_LOCKED;
330  else
331  huart->Lock = HAL_LOCKED;
332 
333  /* Computation of UART mask to apply to RDR register */
334  UART_MASK_COMPUTATION(huart);
335 
336  huart->ErrorCode = HAL_UART_ERROR_NONE;
337 
338  /* Enable the UART Parity Error Interrupt */
339  __HAL_UART_ENABLE_IT(huart, UART_IT_PE);
340 
341  /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */
342  __HAL_UART_ENABLE_IT(huart, UART_IT_ERR);
343 
344  /* Process Unlocked */
345  huart->Lock = HAL_UNLOCKED;
346 
347  /* Enable the UART Data Register not empty Interrupt */
348  __HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
349 
350  return SD_UART_SUCCESS;
351 }
struct sd_cbuf * rx_buff
Definition: sd_uart.h:142
UART_HandleTypeDef * uart
Definition: sd_uart.h:140
Definition: sd_uart.h:117
Definition: sd_uart.h:121
Definition: sd_uart.h:119

◆ sd_uart_transmit()

enum sd_uart_err sd_uart_transmit ( struct sd_uart_dev dev,
uint8_t *  buf,
uint32_t  len,
uint32_t  timeout 
)
inline

#include <Src/sd_uart.c>

Transmit Data In Blocking Mode.

Parameters
devThe UART peripheral to trasmit over
bufBuffer data to trasmit
lenLength of buffer data
timeoutTimeout for transmission activity
Return values
SD_UART_SUCCESSon success, error status otherwise
440 {
441  if (HAL_UART_Transmit(dev->uart, buf, len, timeout) == HAL_OK)
442  return SD_UART_SUCCESS;
443 
444  return SD_UART_ERROR;
445 }
UART_HandleTypeDef * uart
Definition: sd_uart.h:140
Definition: sd_uart.h:117
Definition: sd_uart.h:121
uint32_t len
Definition: sd_buffer.h:106