使用的时候发现:接收完一个字节立即用DMA的方式发送出去,会出现数据的丢失,如用串口调试助手发送1234,返回的只有13
目前只能用缓存buf+协议结束(如0x0d,0x0a)的方式解决。
stm32cubeMX的配置界面如下:
1.使用DMA,方向是内存到外设
2.使用USART1
代码方面:
#define Length_MAX 255
uint8_t RxBuf[Length_MAX];
uint8_t RxByte[1];
uint8_t Length=0;
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_USART1_UART_Init();
HAL_UART_Receive_IT(&huart1, (uint8_t *)RxByte, 1);
while (1);
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
RxBuf[Length++]=RxByte[0];
if(Length==Length_MAX)
Length=0;
if(RxBuf[Length-1]==0x0a && RxBuf[Length-2]==0x0d)
{
while(HAL_UART_Transmit_DMA(&huart1, RxBuf, Length-2)==HAL_OK);
Length=0;
}
HAL_UART_Receive_IT(&huart1, (uint8_t *)RxByte, 1);
}
测试效果:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)