新手上路
- 积分
- 26
- 金钱
- 26
- 注册时间
- 2020-7-25
- 在线时间
- 4 小时
|
以下是原子哥的官方例程:
串口中断函数:
void USART3_IRQHandler(void)
{
u8 res;
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
{
res =USART_ReceiveData(USART3);
// USART_SendData(USART3,res);
if(Bluetooth_RX_CNT<200)
{
Bluetooth_RX_BUF[Bluetooth_RX_CNT]=res
Bluetooth_RX_CNT++;
}
}
}
串口接收函数
void Bluetooth_Receive_Data(u8 *buf,u8 *len)
{
u8 rxlen=Bluetooth_RX_CNT;
u8 i=0;
*len=0;
delay_ms(1);
if(rxlen==Bluetooth_RX_CNT&&rxlen)
{
for(i=0;i<rxlen;i++)
{
buf=Bluetooth_RX_BUF;
}
*len=Bluetooth_RX_CNT;
Bluetooth_RX_CNT=0;
}
以上两个函数均为原子哥的例程,使用起来也没啥问题,最近遇到一个奇怪的问题:主函数中,接收到0x01,LED1亮,接收到0x02, LED0亮,如下
while(1)
{
Bluetooth_Receive_Data(data,&number);
if(number!=0)
{
if(data[0]==0x01)LED1=0;
if(data[0]==0x02) LED0=0;
}
}
这样写程序可以执行,没有错误,但是如果不对if(number!=0)进行判断,直接写
while(1)
{
Bluetooth_Receive_Data(data,&number);
if(data[0]==0x01)LED1=0;
if(data[0]==0x02) LED0=0;
}
这种情况 输入0x01 LED1亮,,再输入0x02 LED0不亮,,不明白啥意思,理论上 if(number!=0)这个语句不行也没有问题的,,每次接收数据 都会重置的,不明白为什么
求大神指教,困扰好多天了
|
|