金牌会员
 
- 积分
- 1196
- 金钱
- 1196
- 注册时间
- 2012-3-26
- 在线时间
- 387 小时
|

楼主 |
发表于 2012-4-19 23:33:40
|
显示全部楼层
void USART1_IRQHandler(void) //串口1中断服务程序
{
u8 data;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
//USART_ClearITPendingBit(USART1, USART_IT_RXNE);
data=USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据
if(USART_RX_STA != 0x80)
{
if(USART_RX_STA==0x00)
{
uart_rxdata.preamble=data;
USART_RX_STA++;
//USART_RX_BUF[USART_RX_STA++]=data;
}
if(USART_RX_STA==0x01)
{
uart_rxdata.cmd=data;
USART_RX_STA++;
//USART_RX_BUF[USART_RX_STA++]=data;
}
if(USART_RX_STA==0x02)
{
uart_rxdata.length=data;
USART_RX_STA++;
//USART_RX_BUF[USART_RX_STA++]=data;
}
if(USART_RX_STA==0x03)
{
uart_rxdata.crc=data;
//USART_RX_BUF[USART_RX_STA++]=data;
USART_RX_STA|=0x80;
}
}
}
}
main.c
while(1)
{
if(USART_RX_STA&0x80)
{
/* len=USART_RX_STA&0x3f;//得到此次接收到的数据长度
printf("");
for(t=0;t<len;t++)
{
USART_SendData(USART1, USART_RX_BUF[t]);
while((USART1->SR&0X40)==0);//等待发送结束
}
printf("\n\n");//插入换行 */
USART_SendData(USART1,uart_rxdata.preamble);
delay_ms(100);
USART_SendData(USART1,uart_rxdata.cmd);
delay_ms(100);
USART_SendData(USART1,uart_rxdata.length);
delay_ms(100);
USART_SendData(USART1,uart_rxdata.crc);
delay_ms(100);
USART_RX_STA=0;
}
else
{
times++;
if(times%5000==0)
{
//printf("\nMiniSTM32开发板 串口实验\n");
//printf("正点原子@ALIENTEK\n\n\n");
}
//if(times%200==0)printf("请\n");
if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
delay_ms(10);
}
}
我接收的四个字节怎么都是0xaa ? 中断函数哪里有错误吗? |
|