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

查看: 3284|回复: 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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版