如何进入IDLE中断

[复制链接]
 楼主| 古道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吗?
 楼主| 古道122 发表于 2008-9-12 10:10 | 显示全部楼层

呵呵,原来是这样地

刚才又试了一下,现在进IDLE就可以了,看来是Multiprocessor里的两个模式不能共存- -!
但是现在又有了一个问题,我发送一串数据的时候,开了发送中断,然后在中断中发送,但是发送了一些数据之后,发现会进入IDLE中断,为什么呢?照道理这个时候是在不停地发送,怎么会莫名地出来一个IDLE标志呢?
浪淘沙 发表于 2008-9-12 13:36 | 显示全部楼层

中断没有及时被响应

 楼主| 古道122 发表于 2008-9-12 16:53 | 显示全部楼层

浪哥

是指发送中断没有响应吧,发送中断的响应难道可以调整吗?还是有其他方式可以解决吗?
浪淘沙 发表于 2008-9-12 22:25 | 显示全部楼层

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

发送中断的响应时间无法调整。
 楼主| 古道122 发表于 2008-9-14 11:23 | 显示全部楼层

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

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

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

 楼主| 古道122 发表于 2008-9-16 07:54 | 显示全部楼层

呵呵,香主也来啦

现在只有用到两个中断,一个TIM2,一个USART的中断,而且已经设定USART的两个优先级都为高了。- -!看来是没有什么好的方案了吗?
xwj 发表于 2008-9-16 07:55 | 显示全部楼层

哈......

浪淘沙 发表于 2008-9-16 10:22 | 显示全部楼层

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

这样可以排除所有其它的影响因素,如果这个新的项目还有同样的问题,你把这个项目挂上来,我帮你看看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

84

主题

381

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

84

主题

381

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部