本帖最后由 野驴 于 2017-7-4 15:13 编辑
本人32小白一个,刚刚因为需要调试一个东西接触到32,并且对单片机编程以前学过但是好久没碰了,现在使用32有些问题来求教。
我手里的东西 是一块32rct6与一个sim卡模块相连(USART2),我需要在电脑上连接32的USART1发送AT指令然后32通过串口2转给SIM卡模块,
SIM卡模块接收到AT指令会有一个返回,然后32 接收串口2 发回的数据在从串口1 发送给电脑,但是现在试了很多方法都不行,(可能我的想法就是有问题的)
我粘贴部分代码上来,求大神给看看。
[mw_shl_code=applescript,true]void USART2_IRQHandler(void)
{
u8 Rec;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
Rec =USART_ReceiveData(USART2);
if((USART2_RX_STA&0x8000)==0)//½óêÕÎ′íê3é
{
if(USART2_RX_STA&0x4000)//½óêÕμ½áË0x0d
{
if(Rec!=0x0a)USART2_RX_STA=0;
else USART2_RX_STA|=0x8000;
}
else
{
if(Rec==0x0d)USART2_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART2_RX_STA&0X3FFF]=Rec ;
USART2_RX_STA++;
if(USART2_RX_STA>(USART_REC_LEN-1))USART2_RX_STA=0;//½óêÕêy¾Y′íÎó,ÖØD¿aê¼½óêÕ
}
}
}
}
}[/mw_shl_code]
上面这段是仿照原子的USART.c里面写的一个串口2 的中断函数。
USART1抢断优先级3 子优先级3 USART2的抢断优先级3 子优先级2.
[mw_shl_code=c,true] if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;
printf("USART1::");
for(t=0;t<len;t++)
{
USART2->DR=USART_RX_BUF[t];
USART1->DR=USART_RX_BUF[t];
while((USART1->SR&0X40)==0);
if(USART2_RX_STA&0x8000)
{
len2=USART2_RX_STA&0x3fff;
printf("USART2::");
for(t=0;t<len2;t++)
{
USART1->DR=USART_RX_BUF[t];
while((USART1->SR&0X40)==0);
}
}
}
printf("
");
USART_RX_STA=0;
}else
{
times++;
if(times%30==0)
{LED0=!LED0;
LED1=!LED1;}
delay_ms(10);
}
}
}
[/mw_shl_code]
这段是仿照 原子哥的串口实验里面的while循环我在中间加入了 USART2的部分。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
尽量少在中断里面做逻辑判断,中断里面只负责接受数据就可以了,在主线程里面再做逻辑处理。
一周热门 更多>