OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4020|回复: 9

请教: 有人在STM8L051上成功使用端口中断模式么

[复制链接]

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2017-5-24
在线时间
13 小时
发表于 2020-7-14 11:50:40 | 显示全部楼层 |阅读模式
1金钱
最近在做个遥控器,硬件连线尽可能简单,但遇到一个问题,我用STM8L051F3, 想连接超过8线中断,包括并用线中断和端口中断模式设置,但只能用线中断打开PortB8个中断,一直没能用端口中断方式成功进入中断(包括注释掉线中断相关语句),网上搜一些资料提到STM8L 的缺陷、Errata等,但没有说端口中断方式完全不能用。请坛内高手指点一下,有人用STM8L051成功应用过端口中断模式么,要注意什么? 多谢了。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2017-5-24
在线时间
13 小时
 楼主| 发表于 2020-7-14 17:37:42 | 显示全部楼层
补充一下(另一个帖子里补充了一些信息,也一并加到这个提问里来),开发环境是IAR STM8 Series 3.10.4,直接操作寄存器设置PortB为端口外部中断模式,并跟踪寄存器状态,抛开一些小症状,在寄存器设置正常情况下,也没看到成功触发中断。 目前怀疑不同开发环境的差异也要分析或排除一下,如用STVP开发,会产生stm8_interrupt_vector.c 这个文件,应该是中断跳转的一个关键文件,但IAR下没有这个文件,其在哪里实现我还在找,但从跟踪寄存器的情况看,是正常跳转了,所以很奇怪。
回复

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164897
金钱
164897
注册时间
2010-12-1
在线时间
2100 小时
发表于 2020-7-15 01:40:26 | 显示全部楼层
帮顶
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-11-23
在线时间
8 小时
发表于 2020-9-9 16:57:28 | 显示全部楼层
要使能端口中断模式,不然默认是线中断
回复

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2017-5-24
在线时间
13 小时
 楼主| 发表于 2020-9-21 15:26:39 | 显示全部楼层
y1226279608 发表于 2020-9-9 16:57
要使能端口中断模式,不然默认是线中断

谢谢回复。发现只对EXTI->CR3使能PortD而在GPIO中设置8个pin为 GPIO_Mode_In_FL_IT模式且EXTI->CR1, CR2不设置的情况下,enableInterrupts()后 即进入等待中断状态,PD0 和PB0可以进中断,但其他pin不能触发中断(8L051上Port D只引出了一个PD0 pin), 这样还有一个问题是无法在配置时执行后面的halt()语句。Reference Manual中说EXTI->CR1, CR2都要设置。手册与实际还是有出入,但不知还能否同时实现8个以上中断源和低功耗了。
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-11-23
在线时间
8 小时
发表于 2020-9-21 15:38:55 | 显示全部楼层
gilbert 发表于 2020-9-21 15:26
谢谢回复。发现只对EXTI->CR3使能PortD而在GPIO中设置8个pin为 GPIO_Mode_In_FL_IT模式且EXTI->CR1, CR2 ...

设置CR3前得先屏蔽全局中断,设置完后再打开,不然设置无效;至于配置时无法执行halt没能理解
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-11-23
在线时间
8 小时
发表于 2020-9-21 15:40:39 | 显示全部楼层
y1226279608 发表于 2020-9-21 15:38
设置CR3前得先屏蔽全局中断,设置完后再打开,不然设置无效;至于配置时无法执行halt没能理解

CR1也是,忘了说了
回复

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2017-5-24
在线时间
13 小时
 楼主| 发表于 2020-9-21 16:06:08 | 显示全部楼层
我在整个EXTI设置之前已经屏蔽全局中断了,全部设置完后再打开。
回复

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2017-5-24
在线时间
13 小时
 楼主| 发表于 2020-9-21 16:08:51 | 显示全部楼层
无法执行halt()是说 在  enableInterrupts();   //开总中断 这条指令之后,debug跟踪 即进入等待中断模式,不能再向下执行其他语句,也就进不了halt模式。
  
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-11-23
在线时间
8 小时
发表于 2020-9-21 16:26:15 | 显示全部楼层
gilbert 发表于 2020-9-21 16:08
无法执行halt()是说 在  enableInterrupts();   //开总中断 这条指令之后,debug跟踪 即进入等待中断模式, ...

wfi/wfe和halt都不能单步跳过吧,得提前打断点
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-9 10:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表