打印

串口、以太网中断嵌套,串口只能接收一次数据。

[复制链接]
1811|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
openrd|  楼主 | 2013-8-15 16:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用串口中断接收数据,单独的一个中断时接收正常。
if (USART_GetITStatus(EVAL_COM2, USART_IT_RXNE) != RESET)//发生接收中断
  {
    uint8_t RxData=0;
    //RxData=         EVAL_COM2_ReceiveChar();
    /* received data */
    while( EVAL_COM2_ReceiveChar()!=0x55);
                  USART_Rx_Buffer[0] = 0x55;
        while(ByteCount <= 12)
        {
           USART_Rx_Buffer[i++] = EVAL_COM2_ReceiveChar();  //接收
           ByteCount++;                    
        }
    USART_ClearITPendingBit(EVAL_COM2,  USART_IT_RXNE); //清除中断标志
}
但是加上以太网中断以后就会出现串口中断只接收一次数据的情况,放置断电调试时会碰到Failed to set breakpoint at 0x08009E04(out of hardware breakpoints),后面接着运行还有at 0xFFFFFFF8(this area does not support hardware breakpoints)
  NVIC_InitStructure.NVIC_IRQChannel = ETH_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

  /*串口中断优先级pre-emption priority ,子优先级 */
  NVIC_InitStructure.NVIC_IRQChannel = EVAL_COM2_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
  //NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
中断都开启了,不知道是什么原因造成的,大家有没有碰到过,给点意见?谢谢
使用的107芯片,两天了木有进展
沙发
openrd|  楼主 | 2013-8-15 17:00 | 只看该作者
while( EVAL_COM2_ReceiveChar()!=0x55);是判断报文的头部,
接收函数是
uint8_t EVAL_COM2_ReceiveChar(void)
{
  while(USART_GetFlagStatus(EVAL_COM2, USART_FLAG_RXNE) == RESET);
  return(USART_ReceiveData(EVAL_COM2));
}
采用这种方法也是参考网上的例子,不知道是不是有什么缺陷,但是单独使用串口中断是没有问题的,波特率是57600

使用特权

评论回复
板凳
openrd|  楼主 | 2013-8-15 17:06 | 只看该作者
对了,编译器使用的是IAR,不知道还有啥信息可以补充,摸不到头绪啊。

使用特权

评论回复
地板
openrd|  楼主 | 2013-8-16 09:11 | 只看该作者
没人碰到过吗?

使用特权

评论回复
5
pattywu| | 2013-8-16 09:35 | 只看该作者
    LZ厉害,竟然在中断中使用循环。:lol
    不是一般的厉害。

使用特权

评论回复
6
openrd|  楼主 | 2013-8-16 10:35 | 只看该作者
pattywu 发表于 2013-8-16 09:35
LZ厉害,竟然在中断中使用循环。
    不是一般的厉害。

呃~~,其实这个我有考虑过,只不过我是接收一串数据,也没有多长,不知道会有什么不良影响?
经过单步调试,我发现问题是一直进入中断却到不了接收数据的地方,查阅资料貌似和溢出有关系。

使用特权

评论回复
7
openrd|  楼主 | 2013-8-16 10:36 | 只看该作者
pattywu 发表于 2013-8-16 09:35
LZ厉害,竟然在中断中使用循环。
    不是一般的厉害。

还请教 如何在中断里面接收一串数据,二十个字节左右?不用这种循环的方式

使用特权

评论回复
8
openrd|  楼主 | 2013-8-16 15:57 | 只看该作者
看来我的问题要改成怎么把串口来的一串数据存进数组里了

使用特权

评论回复
9
openrd|  楼主 | 2013-8-19 17:13 | 只看该作者
问题解决,采用固件库中接收完成后关中断,设置flag给main使用,处理后开中断。尚未验证处理过程如果太复杂会不会丢数据的情况。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

27

帖子

0

粉丝