打印

如何进入IDLE中断

[复制链接]
5100|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
古道122|  楼主 | 2008-9-11 15:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
USART的配置如下
USART_InitStructure.USART_BaudRate = 4800;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  USART_InitStructure.USART_Clock = USART_Clock_Disable;
  USART_InitStructure.USART_CPOL = USART_CPOL_Low;
  USART_InitStructure.USART_CPHA = USART_CPHA_2Edge;
  USART_InitStructure.USART_LastBit = USART_LastBit_Disable;
  
  USART_Init(USART1, &USART_InitStructure);
  
  /*enable the usart1*/
  USART_Cmd(USART1, ENABLE);
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);
照道理应该这个时候没有发送数据的,会一直产生IDLE中断,但是现在看下来,IDLE的那一位一直处于0的状态,请教一下,这个bit在什么情况下变成1吗?
沙发
古道122|  楼主 | 2008-9-11 17:17 | 只看该作者

没人知道吗?

查了一下之前的帖子,有人用过这个中断的。但是没看出来设置上有什么不同。还请用过的指教指教

使用特权

评论回复
板凳
浪淘沙| | 2008-9-11 21:18 | 只看该作者

IDLE的定义是一个字符结束后一个字符长度的高电平

注意是“一个字符结束后”,不是所有时间。

使用特权

评论回复
地板
古道122|  楼主 | 2008-9-12 08:20 | 只看该作者

呵呵

说说我目前的发现,确实要进入IDLE 中断是比较容易的,但这是在没有设置其他内容的时候,我在使用时,之前已经设置了USART中的一个模式,目前还没有确定是肯定与这个有关系,但是我把这个设置关了以后,进入IDLE中断确实是相当容易了。
那我到底是设置了什么呢?由于看到STM32有一个Multiprocessor的功能,所以就是用了一下,其中设置了Address Mark Detect的设置,在以上功能使用的时候,就产生了无法产生IDLE中断的事情,不过还需要进一步验证一下。
呵呵,顺便问一下,netjob你接受的时候每一个字符后面接了空白符,是使用了LIN Mode吗?

使用特权

评论回复
5
古道122|  楼主 | 2008-9-12 10:10 | 只看该作者

呵呵,原来是这样地

刚才又试了一下,现在进IDLE就可以了,看来是Multiprocessor里的两个模式不能共存- -!
但是现在又有了一个问题,我发送一串数据的时候,开了发送中断,然后在中断中发送,但是发送了一些数据之后,发现会进入IDLE中断,为什么呢?照道理这个时候是在不停地发送,怎么会莫名地出来一个IDLE标志呢?

使用特权

评论回复
6
浪淘沙| | 2008-9-12 13:36 | 只看该作者

中断没有及时被响应

使用特权

评论回复
7
古道122|  楼主 | 2008-9-12 16:53 | 只看该作者

浪哥

是指发送中断没有响应吧,发送中断的响应难道可以调整吗?还是有其他方式可以解决吗?

使用特权

评论回复
8
浪淘沙| | 2008-9-12 22:25 | 只看该作者

发送的时候为什么要开放IDLE中断?有什么意义吗?

发送中断的响应时间无法调整。

使用特权

评论回复
9
古道122|  楼主 | 2008-9-14 11:23 | 只看该作者

这个倒不是说发送的时候一定要进

既然IDLE中断会出来,那么就是在发送的时候中间会出来一个IDLE的时间。主要是并不是单对单的通信,是1对多的通信,在一开始的时候检测第一个字符是不是address,然后作出反应,是的开始接受,不是的则进入MuteMode,而退出MuteMode的方式则是检测到一个IDLE信号。所以在发送的时候IDLE出现的话,会影响其他几个的通信,而有可能导致其他的产生误响应。
对于这种情况有什么解决方法吗?难道要改变通信的方式?

使用特权

评论回复
10
香水城| | 2008-9-14 16:40 | 只看该作者

相应提高中断的抢夺优先级

使用特权

评论回复
11
古道122|  楼主 | 2008-9-16 07:54 | 只看该作者

呵呵,香主也来啦

现在只有用到两个中断,一个TIM2,一个USART的中断,而且已经设定USART的两个优先级都为高了。- -!看来是没有什么好的方案了吗?

使用特权

评论回复
12
xwj| | 2008-9-16 07:55 | 只看该作者

哈......

使用特权

评论回复
13
浪淘沙| | 2008-9-16 10:22 | 只看该作者

做一个最简单的项目,去除所有其他内容,只包含这个USART的

这样可以排除所有其它的影响因素,如果这个新的项目还有同样的问题,你把这个项目挂上来,我帮你看看。

使用特权

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

本版积分规则

84

主题

381

帖子

1

粉丝