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

2020-05-05 16:07

这几天一直在调试STM虚拟串口,我是在官方提供的列程的基础上改的,在调试过程中,发现这个列程存在几个BUG,为了大家学习的方面在此提出自己的一种解决方案,仅供大家参考。

1.USB->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_InitStructure.USART_WordLength = USART_WordLength_8b; break;

case 0x08://数据长度8位

//USART_InitStructure.USART_WordLength = USART_WordLength_9b; //无较验位时用8位方式,否则用9位方式 if(linecoding.paritytype==USART_Parity_No)

USART_InitStructure.USART_WordLength = USART_WordLength_8b; else

USART_InitStructure.USART_WordLength = USART_WordLength_9b; break; default : {

USART_Config_Default(); return (FALSE); } }

3.void USART_To_USB_Send_Data(void)函数中,判断错误导致用7位串口方式时UART->USB乱码

if (USART_InitStructure.USART_WordLength == USART_WordLength_8b) {

buffer_in[count_in] = USART_ReceiveData(USART1) & 0x7F; }

else if (USART_InitStructure.USART_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位无校验/带校验工作全部正常。


STM32虚拟串口 CDC官方示例程序修正.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:浙江省省直机关遴选公务员笔试真题及答案解析

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: