十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
以STM32F103VB系列为例,100pin, 一般我们通常使用的IO对应外部中断线如下: PA0,PB0,PC0,PD0,PE0 对应的是EXTI0中断线; 以此类推 到PA15,PB15,PC15,PD15,PE15对应EXTI5中断线。
专注于为中小企业提供网站制作、成都网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业霍州免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
STM32里面EXTI0 – EXTI4这5个外部中断有着自己的单独的中断就表示哪个中断被触发。
你打开stm32的启动文件,例如startup_stm32f10x_hd.s 里面有很多中断跳转的入口。用白话说就是固件库帮你写好了发生什么中断时跳转到哪里,这些名字是一个函数名,你要把这些函数写出来,然后中断来了stm32就跳到这样函数名的函数里面来。
CameraCmdBuff.ReceiveNum 是全局变量如果也为0你要查看下你的程序,其次对于中断来说是可以打断程序运行的,如果这样导致局部变量清零,整个程序就没法运行了,这种事情肯定不会出现的。所以你怀疑中断回来后改变了Camera_ReceiveRes函数里面的局部变量应该是不可能的。
EXTI0_IRQChannel
表示的是外部中断线EXTI0对应的中断函数。
以STM32F103VB系列为例,100pin,
一般我们通常使用的IO对应外部中断线如下:
PA0,PB0,PC0,PD0,PE0
对应的是EXTI0中断线;
以此类推
到PA15,PB15,PC15,PD15,PE15对应EXTI5中断线。
EXTI0对应的中断函数为EXTI0_IRQChannel;
EXTI1对应的中断函数为EXTI1_IRQChannel;
EXTI2对应的中断函数为EXTI2_IRQChannel;
EXTI3对应的中断函数为EXTI3_IRQChannel;
EXTI4对应的中断函数为EXTI4_IRQChannel;
EXTI5
-
EXTI9对应的中断函数为EXTI9_5_IRQHandler;
EXTI10
-
EXTI15对应的中断函数为EXTI15_10_IRQHandler;
你要是使用哪种类型的中断就初始化哪类型的中断,
然后在中断函数里写你想实现的东西,
注意中断函数的操作不易过多。
网上有很多基本的例子,如按键程序,闹钟中断,
可以去看下。
楼上的回答纯粹胡闹,
extern "C",听我解释。
我们的C语言有个进化版,叫C++,这个想必楼主知道,Keil MDK是支持C++编程的,也就是说,你可以用C语言或者C++写你的程序,都可以。
但是,有一个问题,就是头文件的问题,C语言写的头文件C++是不认识的,需要转换一下,这个转换的方法就是加上extern "C"
#ifdef __cplusplus
extern "C" {
}
这句话意思是,如果你定义了“__cplusplus”这个宏,说明你的意图是想在C++文件中调用这个头文件,我前头说了,C语言的头文件C++是不认识的,怎么办呢,就加上
extern "C" {。。。。。}
告诉C++文件,大括号里面的东西是用C语言写的,然后C++文件就认识了,就能调用这个头文件里的东西了,
extern "C" {
}
的存在,使得C语言和C++能更好的结合的一块。
以上是个人的实践心得,回答完毕!