|
手册中介绍是发送和接收各带了16个:
为了方便支持串口的9bit数据长度,8bit数据长度和7bit数据长度,FIFO是支持bit操作的。
即上面截图的16个是指可以处理16个9bit的数据长度串口数据,当然处理8bit和7bit更没问题。
根据参考手册说明,TxFIFO大小是16*9bit,而RxFIFO大小是16*12bit。
HAL库的处理:
- static void UARTEx_SetNbDataToProcess(UART_HandleTypeDef *huart)
- {
- uint8_t rx_fifo_depth;
- uint8_t tx_fifo_depth;
- uint8_t rx_fifo_threshold;
- uint8_t tx_fifo_threshold;
- uint8_t numerator[] = {1U, 1U, 1U, 3U, 7U, 1U, 0U, 0U};
- uint8_t denominator[] = {8U, 4U, 2U, 4U, 8U, 1U, 1U, 1U};
- if (huart->FifoMode == UART_FIFOMODE_DISABLE)
- {
- huart->NbTxDataToProcess = 1U;
- huart->NbRxDataToProcess = 1U;
- }
- else
- {
- rx_fifo_depth = RX_FIFO_DEPTH;
- tx_fifo_depth = TX_FIFO_DEPTH;
- rx_fifo_threshold = (uint8_t)(READ_BIT(huart->Instance->CR3, USART_CR3_RXFTCFG) >> USART_CR3_RXFTCFG_Pos);
- tx_fifo_threshold = (uint8_t)(READ_BIT(huart->Instance->CR3, USART_CR3_TXFTCFG) >> USART_CR3_TXFTCFG_Pos);
- huart->NbTxDataToProcess = ((uint16_t)tx_fifo_depth * numerator[tx_fifo_threshold]) / (uint16_t)denominator[tx_fifo_threshold];
- huart->NbRxDataToProcess = ((uint16_t)rx_fifo_depth * numerator[rx_fifo_threshold]) / (uint16_t)denominator[rx_fifo_threshold];
- }
- }
复制代码
|
|