大家帮我看看串口接收中断的小麻烦。。。

2019-03-23 20:07发布

各位高手,有2个大麻烦: 
1、下好程序后,串口有接收到数据可以跳中断,但是,第二次下程序后,就不能跳到中断处理函数了,必须重新上电后才可以重新跳中断,这是为什么尼? 
2、我想用串口接收中断来接收一个字符串,以目前来看只能接收到部分,数据丢失严重,请大家帮我你看看程序,谢谢 


此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
lucky_luky
1楼-- · 2019-03-24 06:41
 精彩回答 2  元偷偷看……
lucky_luky
2楼-- · 2019-03-24 12:13
void NVIC_Configuration(void)
{
   NVIC_InitTypeDef NVIC_InitStructure;
   
   /* Set the Vector Table base location at 0x08000000 */
   NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
   
   /* Configure the NVIC Preemption Priority Bits */   
   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
   
   /* Enable the USART1 Interrupt */
   NVIC_InitStructure.NVIC_IRQChannel =USART1_IRQn ;          //通道设置为串口1接收中断
   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //中断占先等级0
   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;           //中断响应优先级0
   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;            //打开中断
   NVIC_Init(&NVIC_InitStructure);             //初始化

}
lucky_luky
3楼-- · 2019-03-24 13:48
//中断响应函数
void USART1_IRQHandler(void)  
{  
    u8 i;  

if (USART_GetFlagStatus(USART1, USART_FLAG_ORE) != RESET)//注意!不能使用if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)来判断
    {
        USART_ReceiveData(USART1);
    }
   //正在处理上一条通讯,接收到数据不处理 //上面一段是网上copy的,具体数据溢出标志位不太懂
      
    if(USART_GetFlagStatus(USART1,USART_IT_RXNE)==SET)  
    {   
USART_ClearITPendingBit(USART1, USART_IT_RXNE);            
        i = USART_ReceiveData(USART1);  
Buf_First_Serial[First_Int++] = USART_ReceiveData(USART1);          //将接收到的字符串存到缓存中, 缓存指针向后移动

if(First_Int > 500)                //如果缓存满,将缓存指针指向缓存的首地址
{
First_Int = 0;
}        
/***********test code***************/
printf("interrup happen"); //跳转中断的标志
/**************************/
        USART_SendData(USART1,i);  
        while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)  
        {  
        }                 
    }
luhezhangjian
4楼-- · 2019-03-24 16:35
 精彩回答 2  元偷偷看……

一周热门 更多>