-
请问楼上,为什么要用高位地址相连啊?
-
一直比较忙,忘了结帖.现在给分,分不多.主要是谢谢各位!!
-
while(1)
{
//串口接收判断
if(USART_GetFlagStatus(USART2, USART_FLAG_RXNE))
{
//接收到1个char
acTempChar = 0;
acTempChar = (USART_ReceiveData(USART2) & 0xFF);//接收程序
acRecBuffer[aiNumber++] = acTempChar;
//当接收的数据个数超过协议的个数的时候,抛弃重新接收
if(aiNumber > CMD_SIZE ) //此处的CMD_SIZE相当于你开头的 EB 90 EB 90 4个字节
{
aiNumber = 0;
memset(acRecBuffer, 0, CMD_SIZE);
continue;
}
//检测,保留完整的协议数据
if((SYNC_CHARACTER == acRecBuffer[aiNumber - 1]) && (8!= aiNumber))
{
auNumOfSyncChar++;
}
else
{
//当本次接收的同步数据少于3个的时候,数据错误
//重新接收
//此处就是判断接收的数据和协议是否一样,不一样就抛弃,我这里的同步数据是3个0xaa
if(auNumOfSyncChar < 3)
{
aiNumber = 0;
memset(acRecBuffer, 0, CMD_SIZE);
auNumOfSyncChar = 0;
continue;
}
if(CMD_SIZE == aiNumber)
{
aiNumber = 0;
auNumOfSyncChar = 0;
giIdentify = ID_GPS_COM_PROT;
}
}
switch(giIdentify)
{
//协议处理函数
case ID_GPS_COM_PROT:
//这里替换为你的数据处理函数
DB_gbMainDataProcessFunction(*((ComProStr*)acRecBuffer));
aiNumber = 0;
memset(acRecBuffer, 0, CMD_SIZE);
giIdentify = 0;
break;
default:
break;
}
}
}
这是我的一个程序的下位机接收上位机协议并处理的函数,你改改就能适合你所说的情况了,关键是流程你看懂就ok了,另外你应该加个末尾判断的,不过和协议头判断的差不多。
-
我的问题终于解决了,原来是D+、D-接反了。谢谢大家这几天的帮忙。不知道怎么给分?
-
请问一楼你是说用async链接我们的手机吗,我用过wince链接pc机,但手机没试过,还有手机的系统有没有什么要求?谢谢
-
学习。。。
-
顶贴。楼主,记得结贴,给给你帮助的人加分。
-
1. P1.7是厂家规定做基准电压?其他口都不行?
2. 待测电压接在P1.3口,P1.7口AD后的值为VP17,P1.3口AD后的值为VP13,P1.7口怎么还有AD后的值啊?是用P1.3做输入口的啊?
-
引用楼主 lgwias 的回复:
? 那位高人能指点迷津,不盛感激!
? 我用的是盛博的CSD通讯卡,上面有四个相互独立的串口,都可以设置成rs232,rs422,rs485中的任何一种,我已按照使用要求将其中两个跳线为485模式,并用线将他们的对应的TXD,RXD,GND脚连了起来。我的问题如下:
1.
? 在程序中我把其中一个串口的RTS线置低电平,目的是将发送驱动器转换为第三态,作为接收端使用,另一个串口的RTS置高电平,使能发送驱动器,该串口作为发送端,可是接收到的是乱码。
2.
? 如果将上面的接收端和发送端换一下,即把两个串口的RTS都换成另外一种状态,而且发同样的数据显示的乱码还和上次不一样
注:我是用的EscapeCommFunction函数置高或置低RTS的,另外厂方也告诉我通过RTS引脚来使能485驱动器。
? 再次感谢大家,期待...
如果使用485方式,rxd接rxd txd接txd
-
mark
-
找个串口调试工具试试
-
Data Abort的问题比较麻烦,,,
LZ的NK是44M,LZ所说的是bin,还是nb0呢?你下的是bin,但是在内存中运行时,会先解压成nb0,才能运行的,,,如是是bin为44M的话,nb0远不止是那个大小的。。。
-
1. dwi.memWindows[0].dwBase的值50000000 在注册表中定义,也就是base的值,而m_pRegVirtualAddr为通过bus driver计算出来的虚拟地址,所以两者不一致;
2. 具体的虚拟地址在哪里,是由g_oalAddressTable定义的
-
我这里也有个能用的
结果就是有人认为STM32的是非主流,其实这东西没有所谓的主流与非主流
//////////////////////////////////////////////////////////
///
/// CRC32 Calculator for STM32
/// Author: lxyppc
/// E-Mail: lxyppc@163.com
/// Version: 1.0
/// Data: 2009-04-13
///
/// This program is based on STOne-32's
/// http://www.st.com/mcu/forums-cat-7171-23.html
///
/// Example:
/// CRC_ResetDR();
/// ASSERT(CrcGen_STM32(data,size) == CRC_CalcBlockCRC(data,size));
//////////////////////////////////////////////////////////
unsigned long CrcGen_STM32(unsigned long data[], unsigned long size)
{
unsigned long crc = 0xFFFFFFFF;
for(unsigned long i=0;i<size;i++){
unsigned long temp = data;
for(unsigned long j=0;j<32;j++){
if( (crc ^ temp) & 0x80000000 ){
crc = 0x04C11DB7 ^ (crc<<1);
}else{
crc <<=1;
}
temp<<=1;
}
}
return crc;
}
-
PC是联想的品牌机,只在与设备通信时有问题,其它情况下都正常使用…开发板的系统是自己定制的驱动也是按照说明书上添加的,就是在与PC通信时假死真的很愁人,由于是工作用的PC启动项比较多,每次都要用很长时间…只要不是与PC通信时拨下USB基本上就没有问题,一旦正在通信肯定有问题,顺便提一嘴我用的开发工具为EVC+SP4…
-
友情帮顶下!
-
换屏改的东西不多基本修改以下几点就可以了:
1、时钟(行、列、像素时钟);
2、前肩、后肩(包括行、列);
3、行和列信号有效性(分上升沿、下降沿、高电平、低电平, 一般情况是上升沿或下降沿有效);
4、背光(有时候发现白屏或者是黑屏现象可能是因为背光没开的问题);
5、电源管理部分,如果不做休眠黑屏就没必要做了;
时钟和前肩、后肩存在由一定关系计算得出像素时钟,行时钟,列时钟等。
-
请问你的PC0~PC5的引脚上是否又上拉电阻?
-
你可以看下
BOOL WriteNKnb0ToBootMedia(DWORD dwImageStart, DWORD dwImageLength, DWORD dwLaunchAddr)
{
HANDLE hPart,hPartSys,hPartEx1,hPartEx2;
DWORD dwStoreOffset;
//SectorInfo si;
hPart = BP_OpenPartition( (IMAGE_START_BLOCK+1)*PAGES_PER_BLOCK, // next block of MBR
16384, // align to block
PART_BINFS,
TRUE,
PART_OPEN_ALWAYS);
if (hPart == INVALID_HANDLE_VALUE )
{
EdbgOutputDebugString("ERROR: WriteRegionsToBootMedia: Failed to open/create BINFS partition.\r\n");
return(FALSE);
}
dwStoreOffset = 0;
if ( !BP_SetDataPointer(hPart, dwStoreOffset) )
{
//OALMSG(OAL_ERROR, (TEXT("ERROR: StoreImageToBootMedia: Failed to set data pointer in partition (offset=0x%x).\r\n"), dwStoreOffset));
EdbgOutputDebugString("ERROR: StoreImageToBootMedia: Failed to set data pointer in partition (offset=0x%x).\r\n",dwStoreOffset);
return(FALSE);
}
// Write the region to the BINFS partition.
//
if ( !BP_WriteData(hPart, (LPBYTE)dwImageStart, dwImageLength) )
{
EdbgOutputDebugString("ERROR: StoreImageToBootMedia: Failed to write region to BINFS partition (start=0x%x, length=0x%x).\r\n", dwImageStart, dwImageLength);
return(FALSE);
}
hPartSys = BP_OpenPartition( NEXT_FREE_LOC,
2048,
PART_DOS2_FAT,
TRUE,
PART_OPEN_ALWAYS);
hPartEx1 = BP_OpenPartition( NEXT_FREE_LOC,
16384,
PART_DOS32,
TRUE,
PART_OPEN_ALWAYS);
hPartEx2 = BP_OpenPartition( NEXT_FREE_LOC,
USE_REMAINING_SPACE,
PART_DOS32,
FALSE,
PART_OPEN_ALWAYS);
if(hPartSys == INVALID_HANDLE_VALUE)
{
EdbgOutputDebugString("*** error: Failed to create hive partition ...... write ***\r\n");
}
if (hPartEx1 == INVALID_HANDLE_VALUE || hPartEx2 == INVALID_HANDLE_VALUE)
{
EdbgOutputDebugString("*** error: StoreImageToBootMedia: Failed to open/create Extended partition ***\r\n");
}
g_pTOC->id[g_dwTocEntry].dwJumpAddress = dwImageStart;
g_pTOC->id[g_dwTocEntry].dwLoadAddress = dwImageStart;
return(TRUE);
}
这个函数 EBOOT 中的main()函数是跳到这个函数中执行 然后才是TOC的函数 中间调用你flash的驱动中 FMD_####函数
-
谢谢大家,我现在已经调试好了,谢谢大家的帮助和支持