|
这里的bug,客户反馈了很多次,我每次都要解释一遍,已经解释了好几年。
此处的含义是用户一次性发送的数据不要超过缓冲区大小,超过会卡死在里面:
后来发布的V6得HAL库程序里面直接做了个超过缓冲区的处理,解决之前超过缓冲大小的问题:

这里再提供一个标准库的解决方案:
- static void UartSend(UART_T *_pUart, uint8_t *_ucaBuf, uint16_t _usLen)
- {
- uint16_t i;
- for (i = 0; i < _usLen; i++)
- {
- /* 如果发送缓冲区已经满了,则等待缓冲区空 */
- while (1)
- {
- __IO uint16_t usCount;
- DISABLE_INT();
- usCount = _pUart->usTxCount;
- ENABLE_INT();
- if (usCount < _pUart->usTxBufSize)
- {
- break;
- }
- else if(usCount == _pUart->usTxBufSize)/* 数据已填满缓冲区 */
- {
- if((_pUart->uart->CR1 & USART_CR1_TXEIE) == 0)
- {
- USART_ITConfig(_pUart->uart, USART_IT_TXE, ENABLE);
- }
- }
- }
- /* 将新数据填入发送缓冲区 */
- _pUart->pTxBuf[_pUart->usTxWrite] = _ucaBuf[i];
- DISABLE_INT();
- if (++_pUart->usTxWrite >= _pUart->usTxBufSize)
- {
- _pUart->usTxWrite = 0;
- }
- _pUart->usTxCount++;
- ENABLE_INT();
- }
- USART_ITConfig(_pUart->uart, USART_IT_TXE, ENABLE);
- }
复制代码
|
评分
-
查看全部评分
|