关于stm32 的Virtual_COM_Port 的例程的一些问题
当从虚拟串口到真实串口发数据时,没有错误,但发送一个稍微大一点的文件时(如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, 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); //add by sun zhilong
}
}
望高手指教。 回复【楼主位】sunzl1987
-----------------------------------------------------------------------
自己先顶起 ST这个例程是不完善的,操作USB缓冲区时没做保护,所以连续大量数据向电脑方向发送时缓冲区有可能冲乱。
建议参考安哥的代码:【原创开源】 基于 STM32F103C6T6 的 USB 转 RS232 模块.. 顶一下,望有人继续指点! 还想要什么指点? 据我所知,有些大公司是不提倡,甚至禁止直接使用IC厂商提供的example代码(包含固件库)的。
根据我跟一些芯片公司原厂交流的经验,有不少厂家提供的代码和硬件参考设计,限于能演示芯片功能,并不对可靠性、可用性、稳定性做任何承诺。大家做实验可以,但要用来开发产品,最好慎重一点。
在移植djyos的过程中,也发现了大量原厂提供的固件是有错误的。因此djyos的任意一个移植版本,都不会把原厂提供的代码直接包含到工程中,即使使用了原厂代码,也会仔细审查、仔细测试、有选择地使用。在这方面,djyos比几乎所有开发板都严谨得多,否则djyos也不可能获得像继电保护这样的用户。
例如nxp公司提供的lpc_12xx的代码中,下列定义是错误的:
#define IOCON_PIO_SMODE_BYPASS ((u16)0x0000)
#define IOCON_PIO_SMODE_ONE_CLOCK ((u16)0x2000)
#define IOCON_PIO_SMODE_TWO_CLOCK ((u16)0x4000)
#define IOCON_PIO_SMODE_THREE_CLOCK ((u16)0x6000)
djyos虽然引用了这些定义,但对照datasheet和自己测试的结果,修正为:
#define IOCON_PIO_SMODE_BYPASS ((u16)0x0000)
#define IOCON_PIO_SMODE_ONE_CLOCK ((u16)0x0800)
#define IOCON_PIO_SMODE_TWO_CLOCK ((u16)0x1000)
#define IOCON_PIO_SMODE_THREE_CLOCK ((u16)0x1800)
其他许多硬件,都有类似的情况。djyos不会轻易包含原厂驱动代码,但只要提供了的driver,都是可以放心使用的。
也正是源于这份严谨的态度,djyos1.0.0版本才一再推迟发布,现在已经到尾声,敬请期待。 回复【4楼】gzhuli 咕唧霖
-----------------------------------------------------------------------
代码可以编译没错误,可以通过JLINK下到开发板。但是不能Debug,也没有报错提示。不知是设置问题,还是软件问题。 回复【5楼】djyos 都江堰操作系统
-----------------------------------------------------------------------
好的,共同期待djyos1.0.0版本发布。 不能debug就有点怪异了,会不会屏蔽了JTAG? 回复【8楼】gzhuli 咕唧霖
-----------------------------------------------------------------------
应该不是屏蔽了JTAG,因为用JTAG烧程序都是正常的。
页:
[1]