历史上的今天
返回首页

历史上的今天

今天是: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,修正和我想的一样,呵呵:-).


推荐阅读

史海拾趣

Excel-Display Corporation公司的发展小趣事

Excel-Display Corporation(以下简称EDC)成立于XX世纪初,由一群富有远见的电子工程师和企业家共同创立。他们看到了当时显示技术领域的巨大潜力,决定成立一家专注于研发和生产高质量显示器的公司。

EDC在创立初期就注重技术研发和产品质量,投入大量资金引进先进的生产设备和技术人才。经过几年的努力,EDC成功推出了一系列性能稳定、画质优良的显示器产品,逐渐在市场上崭露头角。

与此同时,EDC也积极开拓国际市场,与多家国际知名企业建立了合作关系。这些合作不仅为EDC带来了技术上的支持,也为其产品的国际化推广奠定了坚实的基础。

CCS[Custom Computer Services]公司的发展小趣事

随着业务的不断发展,CCS公司意识到市场拓展的重要性。公司积极寻求与国内外知名企业的合作,通过战略合作的方式共同开拓市场。通过与这些企业的合作,CCS公司不仅获得了更多的业务机会,还提高了自身的品牌知名度和市场影响力。同时,CCS公司还积极参加各类行业展会和交流活动,与同行建立广泛的联系和合作关系,为公司的长远发展奠定了坚实的基础。

E-Switch公司的发展小趣事

自1979年成立以来,E-Switch公司始终将创新作为发展的核心动力。在公司成立初期,面对激烈的市场竞争,E-Switch决定走差异化路线,专注于开发和生产高品质的开关产品。通过不断的技术创新和产品优化,E-Switch逐渐在电子行业中树立了自己的品牌形象。

德芯半导体(Doeshare)公司的发展小趣事

德芯半导体自成立以来,就致力于半导体技术的研发与创新。公司拥有一支由电子学材料学博士、硕士和教授组成的专家团队,他们不断在半导体MEMS技术上取得突破。这些技术创新不仅推动了产品的发展,还使德芯半导体在智能家居、智能制造等领域的应用中取得了显著的成绩。公司通过与国内外先进企业的合作,采用OEM的合作方式,委托完成关键的工序工艺,确保了产品的高品质。

CONTRINEX公司的发展小趣事

面对海洋环境的独特挑战,Contrinex推出了海洋系列传感器。这些传感器采用全金属技术,外壳材质为V4A/AISI 316L不锈钢,防护等级高达IP68/IP69K,能够抵御恶劣的海洋环境。同时,该系列传感器还具备卓越的EMC防护性能,能够满足各种海洋应用需求。这一创新产品的推出,进一步巩固了Contrinex在传感器行业的领先地位。

Abbatron公司的发展小趣事

在电子行业的激烈竞争中,Abbatron公司以其创新的技术赢得了市场的认可。某年,公司研发团队成功开发出了一款新型的高效能芯片,这款芯片不仅性能卓越,而且功耗极低,引起了业界的广泛关注。通过这一技术突破,Abbatron公司在市场上占据了有利地位,并逐渐成为了行业内的佼佼者。

问答坊 | AI 解惑

什么软件对电路及pcb仿真最好呢?

准备学一学pcb高速板的布线和仿真,但是遇到很多问题,各位也许能帮上忙的哈; 现在什么仿真软件对原理图和pcb板的仿真最好呢?因为我一直用的portell99se,它的仿真功能太有限了,有没与一个软件能够将protell做的pcb文件仿真的呢?…

查看全部问答>

请教arm学习

本人刚学习ARM,大家介绍一些经验吧,谢谢! 比如,开发环境是用IAR还是ADS好呢,个人感觉ADS太繁杂。 我是从ARM7TDMI看起的,汇编指令重要吗?自己创建软硬件系统的话,那些繁琐的操作都要自己做吗?…

查看全部问答>

大功率LED封装的要点

replyreload += \',\' + 380115;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

开始学windows驱动开发有必要学ddk吗?还是直接学wdm?

现在还什么都不懂。只知道wdm是微软新的驱动开发方法,直接学wdm可以吗?用不用学ddk? 我看《Windows驱动开发技术详解》ddk和wdm好像都讲,而《寒江独钓》似乎只讲了wdm,用哪个做主要教材学习好?…

查看全部问答>

contact ID 协议 (安定宝协议)

我们公司现在做一个报警控制器,需要支持Contact Id 协议,但自己以前没有做过,而且那个协议文档写的不是很清楚,希望以前做过的能指点一下,或者也可以和我们公司合作(你以前做过硬件电路和软件实现)。 QQ:275556641 Email: yuangangaaa@163 ...…

查看全部问答>

PC Linux系统使用GPRS模块需要GPRS的驱动吗

各位大侠,小弟不才,问个简单问题:利用GPRS模块在Linux系统拨号上网只需要接口(比如串口)的驱动,而不需要GPRS本身的驱动吗?还是Linux系统自带这个驱动。…

查看全部问答>

AD采样问题-交流采样

我写了个用ad采样程序,用于采样交流电压,我发现每次程序运行后的第一个采样数据是错误的。例如: samples矩阵用于存放采样的结果值 samples[0]=390.3 samples[1]=40.5 samples[2]=63.4 samples[3]=78.8 。。。。 第一个采样点samples[0]是 ...…

查看全部问答>

winCE编译错误,生成不了nk.bin文件

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 ...…

查看全部问答>

谈喇叭阻抗问题。

  大家都知道喇叭最常见的是8欧阻抗,用万用表量,通常在8欧左右,小功率的就不说了。如上图这个8欧30W喇叭,满载电压约为15.5V 1.9365A,自损损耗就是30W,这样一算我就怀疑了,它上面标的8欧30W,30W是输出功率还是自身损耗呢???(喇 ...…

查看全部问答>

选择深度睡眠还是深度掉电?

对于LPC1114,想让它平时不工作,当按键按下时打醒它,进而用它控制电路其它部分上电,不知道平时让它在深度睡眠模式还是深度掉电模式啊?…

查看全部问答>