//串口1发送字节
//dat:待发送的字节
void UART1_SendByte(u8 dat)
{
USART1->DR=dat;
while((USART1->SR&0X40)==0); //等待发送结束
}
//串口1发送数据函数
//ucaBuffer:待发送数组首地址
//unNumber:待发送数组的长度
void UART1_SendData(u8 *ucaBuffer,u16 ucNumber)
{
u16 ucCount=0;
unsigned int checksum;
checksum = CRC16(ucaBuffer,ucNumber-2); //CRC16校验计算最后两位的校验值 u16 CRC16(u8 *p, u16 datalen)函数原型没有问题
*(ucaBuffer+(ucNumber-2)) = checksum;
*(ucaBuffer+(ucNumber-1)) = checksum>>8;
USART1_TXMode; //置串口1连接的485处于发送模式
USART1->SR&=~(1<<6); //清除发送完成标志
for(ucCount=0;ucCount<ucNumber;ucCount++)
UART1_SendByte(*(ucaBuffer+ucCount));
USART1_RXMode; //置串口1连接的485处于接收模式
}
我在程序当中测试UART1_SendData(u8 *ucaBuffer,u16 ucNumber)函数
如下:
/**********(1)测试可以*****************/
u16 i;
for(i=0;i<255;i++)
*(p+i)=0XEE;
UART1_SendData(p_Buff,257);
/**********(2)测试不可以*****************/
u16 i;
for(i=0;i<256;i++)
*(p+i)=0XEE;
UART1_SendData(p_Buff,258);
(1)测试发257个字节完全没问题,可是(2)发258个字节及以上我的整个程序就卡死了,这是为什么? |