UART可以发送单个字符,当加入中断后 无法进入中断 代码如下 :void USART3_IRQHandler(void) //′®¿ú3ÖD¶Ï·tÎñ3ìDò
{
u8 Res;
#if SYSTEM_SUPPORT_OS
OSIntEnter();
#endif
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
{
Res =USART_ReceiveData(USART3);
if((USART3_RX_STA&0x8000)==0)
{
if(USART3_RX_STA&0x4000)
{
if(Res!=0x0a)USART3_RX_STA=0;
else USART3_RX_STA|=0x8000;
}
else //»1ûêÕμ½0X0D
{
if(Res==0x0d)USART3_RX_STA|=0x4000;
else
{
USART3_RX_BUF[USART3_RX_STA&0X3FFF]=Res ;
USART3_RX_STA++;
if(USART3_RX_STA>(USART_REC_LEN-1))USART3_RX_STA=0;//½óêÕêy¾Y′íÎó,ÖØD¿aê¼½óêÕ
}
}
}
}
#if SYSTEM_SUPPORT_OS //èç1ûSYSTEM_SUPPORT_OSÎaÕ棬ÔòDèòaÖ§3ÖOS.
OSIntExit();
#endif
}
#endif
代码几乎跟UART1的中断函数一样,只是把接收状态标志改了USART3_RX_STA,缓冲区改为USART3_RX_BUF;别的地方基本没变。跟中断相关的操作 我也基本配置了
#define EN_USART3_RX 1 //定义使能接收
在串口3中还包含了
#if EN_USART3_RX
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//¿aÆôÏà1ØÖD¶Ï
//Usart1 NVIC ÅäÖÃ
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;
NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
#endif
没办法进中断,大神看下啊。
在线等,实在是搞不明白。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
USART_SendData(USART3,'c');
可以实现,但是加入中断的话,源代码的通信协议以0D 0A结尾
我这里没变,我编写了一个测试函数,
void ceshi ( )
{
u8 len1,j;
if(USART3_RX_STA&0x8000)
{
len1=USART3_RX_STA&0x3fff;//μÃμ½′Ë′νóêÕμ½μÄêy¾Y3¤¶è
if(USART3_RX_BUF[0]==0x13)
{
USART_SendData(USART3,'b');
}
USART3_RX_STA=0;
}
}
用电脑定时发送13 0d 0a
在主函数调用这个函数
发现没进入中断,大神指点下啊
一周热门 更多>