当从虚拟串口到真实串口发数据时,没有错误,但发送一个稍微大一点的文件时(如1M),误码率很高。不知是为什么?
其中:
int main(void)
{
#ifdef DEBUG
debug();
#endif
Set_System();
Set_USBClock();
USB_Interrupts_Config();
USB_Init();
while (1)
{
if (count_out != 0)
{
USB_To_USART_Send_Data(&buffer_out[0], count_out);//这句是发数据的函数,原型如下。
count_out = 0;
}
}
}
其中:
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));
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}
}
望高手指教。
------解决方案--------------------
首先你的程序有问题,首先你的count_out应该是在USB收到数据是修改的吧,然后在main中判断,如果你在USB_To_USART_Send_Data()函数处理过程中又收到数据会改变count_out值,而退出后又将count_out改成0了,这肯定会丢数。建议你设计修改一下这个缓存转发机制。
另外虚拟串口发数据发的太快了,发送大数据量时实际串口发不过来了。打开虚拟串口时的参数限制不了USB端的虚拟串口的速度,这个参数只是传给STM32让STM32设置实际串口参数用的。
解决办法:
(1). 自己写USB转串口的驱动,在驱动发送数据的代码中限制发送速度。
(2). 自己写上位机的串口发送程序,加上协议,建立发送应答机制,保证数据发送成功。
(3). 增大STM32的RAM空间,大到可以缓存下你发送的最大文件,STM32收到后先缓存下来然后再从串口发
------解决方案--------------------
- C/C++ code
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)); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); } }
上一篇:stm32 GPIO配置以及什么时候用 GPIO_InitStructure
下一篇:STM32串口DMA超时接收方法,可大大节约CPU时间
推荐阅读
史海拾趣
随着全球环保意识的日益提高,EA公司积极响应绿色发展的号召,将环保理念融入到产品研发和生产过程中。公司采用环保材料、优化生产工艺、降低能耗等措施,努力减少产品对环境的影响。同时,EA公司还加强了对废弃产品的回收和处理工作,实现了资源的循环利用。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了基础。
Abundance Enterprise Company深知人才是企业发展的核心力量。因此,公司注重人才培养和团队建设工作。公司建立了完善的人才培养机制,通过内部培训、外部引进等方式不断提升员工的专业素质和综合能力。同时,公司还注重团队建设,营造积极向上、团结协作的工作氛围,为公司的持续发展提供了强大的人才保障。
请注意,上述故事均为虚构内容,不代表Abundance Enterprise Company公司的真实发展历程。如需了解该公司的真实情况,建议查阅相关资料或访问其官方网站。
DCD公司自创立之初,就专注于数字核心设计领域的研发。创始人们凭借对电子技术的深刻理解和市场需求的敏锐洞察,带领团队攻克了一个又一个技术难关。在产品研发初期,公司面临着资金短缺和技术难题的双重压力,但团队凭借着坚韧不拔的精神,成功研发出了首款具有竞争力的数字核心设计产品,为公司的发展奠定了坚实的基础。
1979年,Fabrimex AG接管了ARCO-Solar(美国)的代表处,标志着公司正式进入光伏领域。这一举措为公司带来了新的增长点,并推动了相关产品的研发和生产。随着光伏技术的不断发展,Fabrimex AG在光伏领域逐渐取得了显著的成绩,为公司带来了可观的收益。
阜阳法院如此判案,错!错!错! 我公司无辜受害,冤!冤!冤! 长春建工集团有限公司印章被伪造,假冒的分公司招摇撞骗,虽然假冒分公司已被工商管理机关撤销,此事已向公安机关报案,但就是这样一个假冒分公司非法经营活动所产生的经济纠纷,却 ...… 查看全部问答∨ |
|
i2c发数据,首地址变了,SyncIst和I2C_IST的不解?? 我调用deviceiocontrol向外部i2c设备发送数据,系统在底层调用I2C_IoControl; I2C_IoControl调用HW_Write函数,在对语句if (WAIT_OBJECT_0 != SyncIst(pI2C, TX_TIMEOUT))进行判断时,转跳SyncIst函数; 在SyncIst函数运行到WaitForSingleObject ...… 查看全部问答∨ |
|
如何在汇编语言中定义long型变量? 看了一些示例程序,在程序中定义变量时一般直接定义为通用寄存器,因为我得程序用到的变量较多,打算在ram里面定义几个long型变量,找了一些资料很少看到在ram中定义变量的。 刚开始学习用汇编写,希望高人回答 ...… 查看全部问答∨ |
|
ADI专家面对面是ADI公司与广大中小型客户以研讨会和客户拜访的形式直接交流的活动。ADI技术专家现场指导客户如何应对实际设计应用中面临的问题,并详细讲解了用户在实际应用中遇到的常见问题和解决方法。 应广大客户的要求,我们将陆续上传ADI资深 ...… 查看全部问答∨ |
本帖最后由 paulhyde 于 2014-9-15 03:02 编辑 针对EEW参加比赛的朋友,一直想做点事,但都没有行动。 最近看到SCA60C的小量采购量大量上升,估计很多朋友都在用这个准备比赛。所以特在这发个贴,给EEW的朋友特价支持! 有需要这个倾角传感器的 ...… 查看全部问答∨ |