STM32虚拟串口 CDC官方示例程序修正

  • 格式:docx
  • 大小:14.38 KB
  • 文档页数:2

下载文档原格式

  / 5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

这几天一直在调试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位无校验/带校验工作全部正常。