你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 3327|回复: 6

在线急等,中断里操作IO口跟主循环里操作差异

[复制链接]

3

主题

28

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
发表于 2011-10-9 12:51:09 | 显示全部楼层 |阅读模式
本人用STM32F103V8做的一个项目,做RF模块无线通讯,方法是RF模块接收到一帧数据后产生一个中断信号通知STM32把数据抄出来。现在问题是,我直接在中断里用IO口模拟SPI通讯(非标),读完后才退出中断,会造成系统复位,而置个标记在主循环里读数据(软中断)却不会造成复位(读取不实时,项目中不能用此方案)。造成复位的原因是RF模块的那个中断脚来了无数中断信号。而这个现象(RF模块的那个中断脚来了无数中断信号)的原因是同一个电源插头上有继电器控制的负载在频繁启动(我这里用的继电器控制60W白炽灯)。
以上是遇到的情况,个人有些不解的地方,望指点:
同样的程序和环境,在主循环里操作没问题,在中断里会出错。
干扰源插在同一个插座上有问题,插在别的插座上没问题。(系统用的开关电源模块)
用定时器定时读数据也没问题,在中断里读不行。
回复

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2011-10-9 14:43:45 | 显示全部楼层

RE:在线急等,中断里操作IO口跟主循环里操作差异

发生这样的问题可能是由于中断标志位未及时清楚,而导致循环进入中断。建议进入中断以后,先清除标志位。还是建议使用SPI模块来接收数据。SPI也有中断接收功能。
回复 支持 反对

使用道具 举报

3

主题

28

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
 楼主| 发表于 2011-10-9 15:42:22 | 显示全部楼层

回复:在线急等,中断里操作IO口跟主循环里操作差异

回复第 2 楼 于2011-10-09 06:43:45发表:
发生这样的问题可能是由于中断标志位未及时清楚,而导致循环进入中断。建议进入中断以后,先清除标志位。还是建议使用SPI模块来接收数据。SPI也有中断接收功能。 

void EXTI0_IRQHandler(void)
{
 //__DINT();
 if(EXTI_GetITStatus(EXTI_Line0) == SET)
 { //RF接收外部中断
  EXTI_ClearITPendingBit(EXTI_Line0);      // 清除中断
  //RFFull=1;
  Rx_cc1100();  //读RF数据
 }
 //__EINT();
}
中断进来后就清除了,板子是通过RF数据来控制几个继电器,继电器(无源)不带负载启控不会复位,带负载时就复位,继电器吸合时用示波器看RF中断脚来了一长串方波。正常是收到一帧产生一个、我个人感觉是在中断里操作IO口跟主循环里操作有差异。还有可能就是模拟SPI时序在两个地方不同。
回复 支持 反对

使用道具 举报

11

主题

57

回帖

0

蝴蝶豆

中级会员

最后登录
1970-1-1
发表于 2011-10-9 19:56:40 | 显示全部楼层

RE:在线急等,中断里操作IO口跟主循环里操作差异

你是不是在中断里做的事情很多,超过看门狗的喂狗时间了?按道理在中断里操作IO和在主循环里操作IO是一样的,除非操作IO的时候也用到中断了,就会出问题。、
回复 支持 反对

使用道具 举报

3

主题

28

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
 楼主| 发表于 2011-10-9 20:21:04 | 显示全部楼层

回复:在线急等,中断里操作IO口跟主循环里操作差异

回复第 4 楼 于2011-10-09 11:56:40发表:
不是被狗复位的,是在中断里操作RF无线模块芯片时,RF模块产生了很多中断信号弄的系统不能正常退出中断而死机的。此主板有几个继电器无源常开的控制负载。就在启动负载时,RF模块产生了很多中断信号,同样的情况下,在主循环里用示波器查看没有。而且同样在中断里操作,继电器不带负载时吸合,从未复位。如果是硬件上的问题,在主循环里读RF数据应该也会死机才对。
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2011-10-10 08:39:51 | 显示全部楼层

RE:在线急等,中断里操作IO口跟主循环里操作差异

中断的机制是进入一个中断以后,不论后面产生的中断是否高于本中断的优先级,都会在执行完本次中断才会进入下一个最高优先级的中断。可能不可能是由于未正确读取到RF数据,而导致的RF输出引脚一直拉低?
回复 支持 反对

使用道具 举报

3

主题

28

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
 楼主| 发表于 2011-10-15 14:28:56 | 显示全部楼层

回复:在线急等,中断里操作IO口跟主循环里操作差异

回复第 6 楼 于2011-10-10 00:39:51发表:
中断的机制是进入一个中断以后,不论后面产生的中断是否高于本中断的优先级,都会在执行完本次中断才会进入下一个最高优先级的中断。可能不可能是由于未正确读取到RF数据,而导致的RF输出引脚一直拉低?
谢各位老大的关心,问题解决了,放弃中断,用定时器3MS查询一次。
但用外部中断复位的原因没确认。情况是系统在用继电器启控负载时RF模块出现异常造成的复位。RF模块的SPI通讯是用12CM长的26芯排线和两个牛角插头连接的。应该是EFT过不了的问题。在没办法改动SPI连接线的情况下,还是用定时器安全。改版会在通讯连接线上做EMC处理。
 
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版