STM32虚拟串口 CDC官方示例程序修正
- 格式:docx
- 大小:14.38 KB
- 文档页数:2
这几天一直在调试STM虚拟串口,我是在官方提供的列程的基础上改的,在调试过程中,发现这个列程存在几个BUG,为了大家学习的方面在此提出自己的一种解决方案,仅供大家参考。
B->UART 没有等串口发送完,现象是只能发一个字符
void USB_To_USART_Send_Data(u8* data_buffer, u8 Nb_bytes)
{
u32 i;
for (i = 0; i { USART_SendData(USART1, *(data_buffer + i)); //added by dreamdive while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); } } 2.bool USART_Config(void)函数中,数据长度设置错误导致乱码 /*set the data type : only 8bits and 9bits is supported */ switch (linecoding.datatype) { case 0x07://数据长度7位 USART_ART_WordLength = USART_WordLength_8b; break; case 0x08://数据长度8位 //USART_ART_WordLength = USART_WordLength_9b; //无较验位时用8位方式,否则用9位方式 if(linecoding.paritytype==USART_Parity_No) USART_ART_WordLength = USART_WordLength_8b; else USART_ART_WordLength = USART_WordLength_9b; break; default : { USART_Config_Default(); return (FALSE); } } 3.void USART_To_USB_Send_Data(void)函数中,判断错误导致用7位串口方式时UART->USB乱码 if (USART_ART_WordLength == USART_WordLength_8b) { buffer_in[count_in] = USART_ReceiveData(USART1) & 0x7F; } else if (USART_ART_WordLength == USART_WordLength_9b) { buffer_in[count_in] = USART_ReceiveData(USART1); } 改为: if (linecoding.datatype == 0x07) { buffer_in[count_in] = USART_ReceiveData(USART1) & 0x7F; } else { buffer_in[count_in] = USART_ReceiveData(USART1); } 经测试,8位无校验/带校验和7位无校验/带校验工作全部正常。