OpenEdv-开源电子网

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

STM32 中断第一次无法进入的问题,求助!!!

[复制链接]

2

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2012-2-13
在线时间
0 小时
发表于 2012-2-13 17:06:56 | 显示全部楼层 |阅读模式

本人是个新手,按照原子哥的例子配置了一个外部中断,想通过这个中断去读传感器里的数据,但在程序启动后无法进入中断,手动的给中断引脚一个中断触发条件后,程序就能正常的跑起来,搞了两天了,也不知道是什么原因,希望高手指点!
以下是我中断函数:
extern signed char ADXL345[8];
void EXTI15_10_IRQHandler(void)
{  
 LED1=~LED1;
 Multiple_read_ADXL345(ADXL345);//连续读出数据,存储在BUF中
 EXTI->R=1<<11;     //清除LINE11上的中断标志位 
}
//外部中断初始化程序
//初始化PA11为中断输入.
void EXTIX_Init(void)
{
 RCC->APB2ENR|=1<<2;     //使能PORTA时钟
 RCC->APB2ENR|=1<<0;     //开启辅助时钟   
// AFIO->MAPR&=0XF8FFFFFF; //清除MAPR的[26:24]
// AFIO->MAPR|=0X04000000; //关闭JTAG    

 GPIOA->CRH&=0XFFFF0FFF;//PA11设置成输入  
 GPIOA->CRH|=0X00008000;       
 GPIOA->ODR|=1<<11;    //PA11上拉

 Ex_NVIC_Config(GPIO_A,11,FTIR);//下降沿触发
 MY_NVIC_Init(2,2,EXTI15_10_IRQChannel,2);//抢占2,子优先级1,组2   
}
外部中断用的是PA11,连接的是传感器的中断引脚,传感器那头是当有数据更新时就会产生中断(即把传感器的中断引脚置高),然后中断服务函数里读完传感器更件的数据后,又会把传感器的中断引脚复位(即置高);

手动的给STM32中断引脚一个中断触发条件后,程序就能正常的跑起来,真搞不懂为什么第一次中断不能自动进入,请各高手指点!!

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-2-13 17:15:26 | 显示全部楼层
用示波器看一下PA11的波形.是不是有信号输出?
或者在主函数里面中断初始化之后,读一下ADXL的数据.
即:
Multiple_read_ADXL345(ADXL345);//连续读出数据,存储在BUF中
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2012-2-13
在线时间
0 小时
 楼主| 发表于 2012-2-13 17:20:13 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
用示波器看了,当给完第一次中断条件后,程序正常跑起来后,PA11输出的波形很好,与预期的一样,读数据也都正常,现在就是想不明白为什么不能直接的进入中断,非得先手动让它中断一次;在都初始化后传感器的引脚是低的,PA11脚也是上拉后的高电平,但就是第一次中断进不去~~
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-2-13 17:27:56 | 显示全部楼层
回复【3楼】冰天雪地_兰:
---------------------------------
我说的是ADXL的输出.第一次有没有输出?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2012-2-13
在线时间
0 小时
 楼主| 发表于 2012-2-13 17:35:42 | 显示全部楼层
主程序里是一直输出ADXL的数据,但由于复位后进入不了中断,就读不了传感器寄存器里更新后的数据,所以一直显示初始值00,没有有效数据;
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-2-13 18:12:14 | 显示全部楼层
回复【5楼】冰天雪地_兰:
---------------------------------
认为的伪造一次.强制读寄存器数据看看.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2012-2-13
在线时间
0 小时
 楼主| 发表于 2012-2-13 18:22:14 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
呵呵,好的 我晚上试试看
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2012-2-13
在线时间
0 小时
 楼主| 发表于 2012-2-14 10:32:18 | 显示全部楼层
回复【7楼】冰天雪地_兰:
---------------------------------
在主函数的循环部分外面添加一句读ADXL的指令后,程序就可以自启动了,呵呵 虽然没有治本但是也达到了想要的结果了吧;
但是这样的话在最开始读出的数据中第二个数据是非有效数据,得去除前两个数据后才能做数据处理;

呵呵 谢谢原子哥提供的这条思路~~
回复 支持 反对

使用道具 举报

4

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2012-2-17
在线时间
2 小时
发表于 2012-2-17 14:10:53 | 显示全部楼层
请问楼主你用的什么中断啊
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
发表于 2012-7-17 21:37:44 | 显示全部楼层
回复【8楼】冰天雪地_兰:

---------------------------------
楼主可以共享一下整体思路吗?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 18:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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