历史上的今天
今天是:2025年07月29日(星期二)
2019年07月29日 | STM32 USB转串口CDC官方示例程序修正
2019-07-29 来源:eefocus
官方程序中有几个BUG导致只能单字节发送,用7位串口方式也有问题。查看源程序,发现有几个地方需要修改:
1.USB->UART 没有等串口发送完,现象是只能发一个字符
void USB_To_USART_Send_Data(u8* data_buffer, u8 Nb_bytes)
{
u32 i;
for (i = 0; i < Nb_bytes; 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位无校验/带校验工作全部正常。
刚刚看了ST最新官方um0424.zip,修正和我想的一样,呵呵:-).
史海拾趣
|
准备学一学pcb高速板的布线和仿真,但是遇到很多问题,各位也许能帮上忙的哈; 现在什么仿真软件对原理图和pcb板的仿真最好呢?因为我一直用的portell99se,它的仿真功能太有限了,有没与一个软件能够将protell做的pcb文件仿真的呢?… 查看全部问答> |
|
开始学windows驱动开发有必要学ddk吗?还是直接学wdm? 现在还什么都不懂。只知道wdm是微软新的驱动开发方法,直接学wdm可以吗?用不用学ddk? 我看《Windows驱动开发技术详解》ddk和wdm好像都讲,而《寒江独钓》似乎只讲了wdm,用哪个做主要教材学习好?… 查看全部问答> |
|
我们公司现在做一个报警控制器,需要支持Contact Id 协议,但自己以前没有做过,而且那个协议文档写的不是很清楚,希望以前做过的能指点一下,或者也可以和我们公司合作(你以前做过硬件电路和软件实现)。 QQ:275556641 Email: yuangangaaa@163 ...… 查看全部问答> |
|
各位大侠,小弟不才,问个简单问题:利用GPRS模块在Linux系统拨号上网只需要接口(比如串口)的驱动,而不需要GPRS本身的驱动吗?还是Linux系统自带这个驱动。… 查看全部问答> |
|
我写了个用ad采样程序,用于采样交流电压,我发现每次程序运行后的第一个采样数据是错误的。例如: samples矩阵用于存放采样的结果值 samples[0]=390.3 samples[1]=40.5 samples[2]=63.4 samples[3]=78.8 。。。。 第一个采样点samples[0]是 ...… 查看全部问答> |
|
winCE5.0编译错误,生成不了nk.bin文件。在build.log文件中觉得是这两个地方的问题 NMAKE : U1073: don\'t know how to make \'D:\\WINCE500\\platform\\BVDMAIN\\lib\\ARMV4I\\retail\\drvlib.lib\' Stop. NMAKE.EXE -i ...… 查看全部问答> |




