6209|9

83

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教USART中断配置 [复制链接]

各位给看一下:
最近用stm32f103的usart2做数据收发,配置为USART_IT_RXNE中断,在中断程序中当接收数据匹配则标识位置位,主程序查询标识位并返回调试软件相应数据,但现在有个问题让人费解:主程序中发送数据
      USART_SendData( USART2, chSend);
      while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); 
执行到发送等待时也进入中断,我在程序配置中是没有使能发送中断的怎么会发送数据也进入中断呢,而且我特意用
      USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
也是于事无补,各位给点建议看看究竟是怎么回事?急呀。
此帖出自stm32/stm8论坛

最新回复

                                 sorry:用232驱动芯片可以,用485驱动芯片就出问题了,看来不是cpu的事啊!   详情 回复 发表于 2008-7-2 14:51
点赞 关注
 

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

检查一下状态寄存器

                                 进入中断服务程序时读出状态寄存器看看是什么与原因引起的中断,这应该是每次进入中断服务程序时的第一件事,不管程序是否有问题。
此帖出自stm32/stm8论坛
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

回复

                                 我看过了,程序断点进入中断后SR寄存器变成D8,虽然不太明白是怎么回事,但CR1寄存器中中断使能位是只有RXNEIE置为了1,所以还是不太明白他是怎么进入中断的。
此帖出自stm32/stm8论坛
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

4
 

估计是溢出错误造成中断

程序断点进入中断后SR寄存器变成0xD8,即有下列事件:
 TXE: Transmit Data Register Empty
 TC: Transmission Complete
 IDLE: IDLE line detected
 ORE: OverRun Error

中断很可能由ORE引起,请看有关USART_CR1寄存器RXNEIE位的说明:
RXNEIE: RXNE Interrupt Enable.
 This bit is set and cleared by software.
  0: Interrupt is inhibited
  1: An USART interrupt is generated whenever ORE=1 or RXNE=1 in the USART_SR register

产生ORE错误是因为你没有及时读出收到的数据。

此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

5
 

还是有点疑惑

确实如您所说,是溢出中断搞的鬼。
我在主程序中接收一个8位数据组,程序如下,单步执行没有问题,我可以收到该数据组,也没有进入中断(可能单步就进不了中断,但寄存器正常,没有产生溢出置位)。但数据接收完成后我全速执行,再次用串口发送命令就进不了中断了。
如果不单步执行,而将下面程序全速执行的话即进入中断,寄存器显示产生溢出,这又是怎么回事?
for(i=0;i<4;i++)
   {      
      USART_SendData( USART2, chSend);
      while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); 
   }
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

6
 

还是有点疑惑

                                 而且全速执行接收到的数据也不全,可是我的发送程序有问题吗?不就这么两句话吗?
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

7
 

如果不清除错误标志位,当然会进中断

清除错误标志位的操作是:先读USART_SR寄存器,再读USART_DR寄存器。

单步执行时,寄存器显示窗口不断被调试软件刷新,即调试软件在不断地读各个寄存器,因此错误标志位被清除;而全速运行时,如果程序不主动读这些寄存器,当然错误标志位不能被清除,进中断就不奇怪了。

关键的是我在2楼给出的建议:“进入中断服务程序时读出状态寄存器看看是什么原因引起的中断,这应该是每次进入中断服务程序时的第一件事,不管程序是否有问题。”这样才能时刻知道是否出错并及时处理,同时能够及时地清除各种标志位。
此帖出自stm32/stm8论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

8
 

我怀疑USART2有问题

我有点怀疑串口2有问题了尤其是其中断,因为我将程序中的全部usart2改为usart1就一点问题都没有了,各位如果有兴趣的话不妨试试。如果你们的是好的话,那我只能怀疑我这个芯片的问题了。
但我的usart2是由485芯片驱动,usart1是由232芯片驱动,我想这是没关系的吧。
此帖出自stm32/stm8论坛
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

9
 

那么你就把USART2也用232芯片驱动试试看

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

10
 

sorry

sorry:
用232驱动芯片可以,用485驱动芯片就出问题了,看来不是cpu的事啊!
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表