OpenEdv-开源电子网

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

江湖救急!!!stm32f030的PA14配置中断问题

[复制链接]

3

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2016-1-16
在线时间
15 小时
发表于 2016-10-11 22:23:43 | 显示全部楼层 |阅读模式
1金钱
简述一下我的问题。
我使用的是stm32f030f4的20引脚单片机,由于引脚资源有限所以不得不使用PA13和PA14两个引脚作为外部中断的输入引脚,目的是为了获得这个引脚上一个脉冲电平的脉宽,脉冲周期是10ms,占空比从百分之10到90的整10倍,实现方式是
1配置这两个引脚为输入引脚,浮空,因为有外接的下拉电阻;
2配置这个引脚为相应的线中断,首先是设置为上升沿触发中断,并且没有在结构体中打开这个中断;
3打开一个定时器并使能,定时器计一个数是0.1ms;
4每过40ms来使能这个中断;
5在中断处理函数中设置一个标志位来判断是否是第一次由于上升沿触发的,如果是就重新加载定时器的值为0,然后设置中断为下降沿,清除线中断标志,如果是第二次由于下降沿触发的,就记录定时器的值来算出脉宽,然后中断设置为上升沿,关闭中断,清标志位;


调试的结果是:定时器是正常的,但是中断根本没有进去,但是引脚波形用示波器观察波形很好。
PA13和PA14本来是作为JTAG调试的引脚,由于stm32f030没有相关的失能这个引脚的函数,所以这个设置是不是由于这个原因导致这两个IO口没有配置成相关中断,除了这个原因,我是把这两个引脚按照标准例程的线中断来配置的。


因为之前没有用个这个0系列的单片机,资料也不多,所以不太清楚,希望知道的高手能指点指点!!!!很急!!!!在线等!!!!

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

使用道具 举报

3

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2016-1-16
在线时间
15 小时
 楼主| 发表于 2016-10-11 22:28:57 | 显示全部楼层
由于代码不在手边所以没办法贴出来,主要是这个思路,大家看看思路可不可行,而且对于这个系列的单片机是不是有什么关键的点需要注意,因为我用stm32f103的来模拟是完全可行的,就是不知道到了这个单片机怎么就那么困难
回复

使用道具 举报

34

主题

283

帖子

0

精华

高级会员

Rank: 4

积分
739
金钱
739
注册时间
2015-11-15
在线时间
226 小时
发表于 2016-10-12 13:38:58 | 显示全部楼层
不用这样的,你直接将你要捕获的引脚,设置成外部中断(高电平触发),然后在外部中断服务程序里面使能定时器,等待下降沿,然后直接获取计数器的值,就能得到高电平的时间,不需要定时器中断的;但是如果你的高电平时间过长,导致定时器溢出,就不行了,就需要使能更新中断了
与其感慨路难行,不如马上出发
回复

使用道具 举报

34

主题

283

帖子

0

精华

高级会员

Rank: 4

积分
739
金钱
739
注册时间
2015-11-15
在线时间
226 小时
发表于 2016-10-12 13:43:48 | 显示全部楼层
delay_us(10);                                      //延时10us
     if(EXTI_GetITStatus(EXTI_Line7) != RESET)
        {
                        TIM_SetCounter(TIM2,0);
                        TIM_Cmd(TIM2, ENABLE);                                             //开启时钟
               
                        while(GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN));                         //等待低电平

                        TIM_Cmd(TIM2, DISABLE);                                                         //定时器2失能
                        UltrasonicWave_Distance=TIM_GetCounter(TIM2)*5*34/200.0;                                                                         //计算距离&&UltrasonicWave_Distance<150
               
        if(UltrasonicWave_Distance>0)
        {
                printf("distance:%f cm",UltrasonicWave_Distance);
        }
               
       
       
        EXTI_ClearITPendingBit(EXTI_Line7);  //清除EXTI7线路挂起位
与其感慨路难行,不如马上出发
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-24 01:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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