STM32进入中断方式有几种方式

后使用快捷导航没有帐号?
请完成以下验证码
查看: 6228|回复: 7
关于STM32中断多进的问题总结
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
1、问题提出:如果你操作不当STM32的中断每次会进2次。
2、验证方法:如下面的1ms中断程序:
void TIM6_IRQHandler(void)& && && && && && &//1ms
&&ms_100_cntdbu++;
&&if ((TIM6-&SR & 0x0001) != 0)& & // check interrupt source
&&{& && && && && &&&
& && && && && & ms_100_cnt++;
& && && && && && & TIM6-&SR &= ~(1&&0);& && && && && && && && &&&// clear UIF flag& && &&&
& && && && && &
& &&&你会看到&&ms_100_cntdbu =2*&&ms_100_cn
如果增加硬件管脚指示,从示波器上很容易看到1ms内中断近了2次,但1ms中断技术没问题,也就是说SR标志清掉了,SR中也没有其他标志置位,进中断是保存下来看。
& &&&其他所有的中断都是这个问题。我验证了,不是仿真,是真运行。
3、解决方法:清中断标志,只要不是中断函数的最后一条语句就没问题了。
4、指令流水线问题。其他的片子有的也会有这问题。
5、结论:如果你对程序要求不严,可以不用管它,不会影响到你应用的。否则参照3.
如果你的习惯是先清中断后干活,你不会碰到这个问题。如果你使用的是库函数差标志,也不会碰到这个问题。
在线时间1 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
能否给个详细分析?
如果真有这事,那串口通信应该不能正常进行了,每次进两次,那岂不接收数据全乱了?
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
你理解错了,进2次,但不影响应用的。第二次你查不到中断标志
&&&&&&&&&&
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
这问题我遇到过,
因为只开一种中断,就把检查标志代码省了,
结果搞出N多莫名其妙的错误,
在线时间1 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
& & & & & & & & & & & & & & & &&&目前分析的初步结论是因为APB桥的延迟造成这个现象,还需进一步确认,我会不断更新。
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
哇哇哇。。。
CPU从AHB的角度来看,数据已经写入(清零SR标志),实际上APB上的写操作需要由AHB2APB桥来管理,需要一定时间才能真正完成写操作(SR才能被清零)。那么当CPU退出中断ISR,此时SR还没有真正被清零,此时对应的pending bit仍旧置位,于是又一次触发了中断。
如何避免这个情况涅?
1)进入中断后,判断了相应标志位,就clear之,在作后续的处理。
2)如果你硬是要把清标志放在ISR最后,那么为了避免以上情况的发生,写完SR后,再读出来
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
没想到AHB2APB桥延迟时间这么大。
这多少是一个小的缺陷。
知道了很容易绕过去,
不知道有可能会在一个大跟头
在线时间1 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
查了一下公司的系统服务器,这个问题早在2008年已经以FAQ的形式解释过,并给出了分析和解决方法,我以前也没有注意到这个问题,这次有网友提出才去关注。
在ARM的系统架构下,这是一个普遍的问题,而不是STM32所特有的问题。
这个FAQ的内容如下:
Q: When I cleared the interrupt as the last instruction in the ISR,
the ISR code is called immediately upon exit half the time. Is there a
possibility of race condition ?
The core (Cortex-M3) generates bufferable write transfer. This mean
that the CPU consider that the data is written from an AHB point of
view while the APB write transfer is managed by the AHB2APB bridge and
could be written later. In this case the CPU left the interrupt
routine while the interrupt is not yet cleared the CPU will re-enter&&
again on the interrupt handler. To avoid this race condition :
1) ISR routine has to clear the interrupt&&peripheral flag when just
entering in the routine to avoid interrupt missing.
2)ISR routine has to Implement a write to the APB&&peripheral register
( to clear the peripheral flag) then followed by a read&&access to the
same register/flag. This operation will force the write buffer to
complete the effective write and will stall the CPU until the
effective write of the bit in the register. Therefore&&it is
independent from the AHB/APB ratio prescaler.
Here an example :
STR R1, [R0, #0] ; Store R1 register&&peripheral& &register&&( or
using bit-banding peripheral address)
LDR R2, [R0, #0] ; Load th This will&&hold the
CPU until the effective write of R1.
Use Cortex-M3 Bit-banding feature for interrupt clearing since it is
an atomic operation and NVIC pending interrupts will be ignored during
this operation, however Read-Modify-Write is not.
ST网站的FAQ页面入口是:
这几天这个页面出了点问题,正在检查维护,很快会恢复。
EEWORLD 官方微信
Powered byThe page is temporarily unavailable
The page you are looking for is temporarily unavailable.
Please try again later.查看: 13298|回复: 0
STM32事件 中断事件 中断的详解
凡从事过ST MCU应用开发的人往往会遇到事件、中断事件
中断三个概念或术语。这三个概念彼此关联,有时会让人有点混淆或犯迷糊。 先拿一件生活中的事情打比方对上述三个概念做个基本的粗略理解,之后再分享一个STM32 GPIO外部中断配置案例。比如一老师在教室里给学生们上课。课堂上的学生可能做出各种行为动作,比方做笔记、打哈气、翻书包、讲小话等,我们把这些行为统称为事件,其中有些行为老师往往只是视而不见,继续他的上课;而有些行为可能导致老师的上课中止,比方讲小话,并对学生的相关行为予以警告、批评或纠正等,然后继续上课。我们把老师因为学生的某些行为而中止授课,并产生后续动作,之后接着上课的这个过程理解为中断或中断响应。我们把可能导致老师上课中断的学生行为理解为中断事件。 结合上面的比方,不难理解中断事件是一种可以导致中断发生的事件,中断则是因为中断事件的发生而导致的后续行为过程。事件与中断事件是包含关系,即事件可分为中断事件或非中断事件。而中断事件与中断之间属于前后关联的因果关系,虽有关联,但二者在时序上、行为上并不一样。 结合具体的ST MCU运行过程,其中会有许多各种各样的事件,比方管脚电平变化、计数器溢出、DMA空、FIFO非空、AD转换结束、超时、外设使能、初始化等等,其中有些事件是不会导致中断产生的,比方外设使能或部分初始化动作是不会导致中断发生的,有些事件就可能导致中断发生,比方计数器溢出,AD转换结束等,这些就是中断事件。当然这些中断事件最终能否触发后续中断,得看是否开启了该中断事件的中断使能,相关中断矢量控制器【NVIC】是否配置,最终让CPU内核参与进来,并完成后续的中断服务动作。 不妨借助STM32 MCU的GPIO的外部事件与中断控制器的框图来理解上述概念。
从上图可以看出,不论外部电平变化成为中断事件还是非中断事件,绿色方框部分都是一样的,即具有相同的触发源。差别就在后面。一般性事件要变为中断事件,得有相关中断使能位的允许。中断事件再向CPU激活相关中断请求,在NVIC配置相应中断矢量后,CPU便参与进行后续的中断响应服务【如保存现场、执行中断服务程序、恢复现场并返回】,而非中断事件就没有中断事件后续的流程,只是有些硬件触发信号或标志的产生。当然非中断事件的形成也是可控的。 既然一个可以触发中断的事件可能被配置中断事件或非中断事件,那么在相关事件的触发配置时就出现两种可能,即允许产生中断或禁止产生中断。于是乎,ST MCU参考手册里在谈到事件的触发方式时就引出了事件模式和中断模式两个概念。 比方STM32的GPIO口的电平跳变基本都是可以触发外部中断的。但在具体配置时,可以根据需要来决定启用还是禁用相关脚的中断功能,从而选择不同的事件触发方式,即事件模式和中断模式。如果不希望电平跳变事件触发中断,就配置为事件模式,反之,配置为中断模式。 好,我们一起来看看一个具体的案例。
某工程师做了一块STM32F407的工程样板,利用ST官方推出的STM32配置工具STM32CubeMx做MCU基本管脚和外设的软硬件配置并生成相关代码。令他郁闷的是,竟然在做某GPIO做按键中断时卡壳了,发现不论怎么按键就是不进中断程序。
经沟通了解,他用到的的那个GPIO是个很普通的脚,并非什么特别功能脚。按键电路也很常规简单。顺便看了下的相关配置代码。看到其GPIO初始化代码时,发现有关GPIO模式的地方有问题,也就是如下红色标注的代码行的地方。 void MX_GPIO_Init(void){
GPIO_InitTypeDef GPIO_InitS
/* GPIO Ports Clock Enable */
__GPIOE_CLK_ENABLE();
/*Configure GPIO pin : PE2 */
GPIO_InitStruct.Pin = GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_EVT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI2_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI2_IRQn); }红色语句代码是将该GPIO配置为下降沿触发的事件模式了,而不是中断模式。在利用STM32CubeMx对GPIO管脚进行模式配置时往往有很多选项,这些选项又可分为2大类。分别是中断模式和事件模式。【interrupt mode / event mode】
既然配置成了事件模式,按键自然没法触发中断及相关服务程序。让其修改为中断模式,即将上面配置修改为下面语句后即OK.GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; 在STM32相关参考手册里,涉及中断【INTERRUPT】和事件【EVENT】二词表述的地方比较多,加上这两个词的含义比较宽泛。手册里可能会用interrupt或interrupt event表述同一东西,或者说interrup泛指中断事件及后续中断响应全过程。比方类似下面语句的地方:
有时用Interrupt event明确出来。比方下面表格中提到interrupt event.
总之,不管手册上怎么写,不必拘泥于字词符号,结合上下文弄清怎么回事就好。凡从事过ST MCU应用开发的人往往会遇到事件、中断事件
中断三个概念或术语。这三个概念彼此关联,有时会让人有点混淆或犯迷糊。 先拿一件生活中的事情打比方对上述三个概念做个基本的粗略理解,之后再分享一个STM32 GPIO外部中断配置案例。比如一老师在教室里给学生们上课。课堂上的学生可能做出各种行为动作,比方做笔记、打哈气、翻书包、讲小话等,我们把这些行为统称为事件,其中有些行为老师往往只是视而不见,继续他的上课;而有些行为可能导致老师的上课中止,比方讲小话,并对学生的相关行为予以警告、批评或纠正等,然后继续上课。我们把老师因为学生的某些行为而中止授课,并产生后续动作,之后接着上课的这个过程理解为中断或中断响应。我们把可能导致老师上课中断的学生行为理解为中断事件。 结合上面的比方,不难理解中断事件是一种可以导致中断发生的事件,中断则是因为中断事件的发生而导致的后续行为过程。事件与中断事件是包含关系,即事件可分为中断事件或非中断事件。而中断事件与中断之间属于前后关联的因果关系,虽有关联,但二者在时序上、行为上并不一样。 结合具体的ST MCU运行过程,其中会有许多各种各样的事件,比方管脚电平变化、计数器溢出、DMA空、FIFO非空、AD转换结束、超时、外设使能、初始化等等,其中有些事件是不会导致中断产生的,比方外设使能或部分初始化动作是不会导致中断发生的,有些事件就可能导致中断发生,比方计数器溢出,AD转换结束等,这些就是中断事件。当然这些中断事件最终能否触发后续中断,得看是否开启了该中断事件的中断使能,相关中断矢量控制器【NVIC】是否配置,最终让CPU内核参与进来,并完成后续的中断服务动作。 不妨借助STM32 MCU的GPIO的外部事件与中断控制器的框图来理解上述概念。
从上图可以看出,不论外部电平变化成为中断事件还是非中断事件,绿色方框部分都是一样的,即具有相同的触发源。差别就在后面。一般性事件要变为中断事件,得有相关中断使能位的允许。中断事件再向CPU激活相关中断请求,在NVIC配置相应中断矢量后,CPU便参与进行后续的中断响应服务【如保存现场、执行中断服务程序、恢复现场并返回】,而非中断事件就没有中断事件后续的流程,只是有些硬件触发信号或标志的产生。当然非中断事件的形成也是可控的。 既然一个可以触发中断的事件可能被配置中断事件或非中断事件,那么在相关事件的触发配置时就出现两种可能,即允许产生中断或禁止产生中断。于是乎,ST MCU参考手册里在谈到事件的触发方式时就引出了事件模式和中断模式两个概念。 比方STM32的GPIO口的电平跳变基本都是可以触发外部中断的。但在具体配置时,可以根据需要来决定启用还是禁用相关脚的中断功能,从而选择不同的事件触发方式,即事件模式和中断模式。如果不希望电平跳变事件触发中断,就配置为事件模式,反之,配置为中断模式。 好,我们一起来看看一个具体的案例。
某工程师做了一块STM32F407的工程样板,利用ST官方推出的STM32配置工具STM32CubeMx做MCU基本管脚和外设的软硬件配置并生成相关代码。令他郁闷的是,竟然在做某GPIO做按键中断时卡壳了,发现不论怎么按键就是不进中断程序。
经沟通了解,他用到的的那个GPIO是个很普通的脚,并非什么特别功能脚。按键电路也很常规简单。顺便看了下的相关配置代码。看到其GPIO初始化代码时,发现有关GPIO模式的地方有问题,也就是如下红色标注的代码行的地方。 void MX_GPIO_Init(void){
GPIO_InitTypeDef GPIO_InitS
/* GPIO Ports Clock Enable */
__GPIOE_CLK_ENABLE();
/*Configure GPIO pin : PE2 */
GPIO_InitStruct.Pin = GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_EVT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI2_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI2_IRQn); }红色语句代码是将该GPIO配置为下降沿触发的事件模式了,而不是中断模式。在利用STM32CubeMx对GPIO管脚进行模式配置时往往有很多选项,这些选项又可分为2大类。分别是中断模式和事件模式。【interrupt mode / event mode】
既然配置成了事件模式,按键自然没法触发中断及相关服务程序。让其修改为中断模式,即将上面配置修改为下面语句后即OK.GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; 在STM32相关参考手册里,涉及中断【INTERRUPT】和事件【EVENT】二词表述的地方比较多,加上这两个词的含义比较宽泛。手册里可能会用interrupt或interrupt event表述同一东西,或者说interrup泛指中断事件及后续中断响应全过程。比方类似下面语句的地方:
有时用Interrupt event明确出来。比方下面表格中提到interrupt event.
总之,不管手册上怎么写,不必拘泥于字词符号,结合上下文弄清怎么回事就好。
Powered by写了个STM32的程序,感觉没有进外部中断。 - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 2254|回复: 17
写了个STM32的程序,感觉没有进外部中断。
在线时间300 小时
ST金币1242
该用户从未签到主题帖子精华
金牌会员, 积分 4196, 距离下一级还需 804 积分
本来是PC6是外部来的一个脉冲信号,PC7想输出个相位相反的信号。
想着把PC6设为上升/下降沿中断,然后在中断里判断PC6的状态,以此决定PC7输出是高或低。
结果PC7引脚始终是低电平。已排除PC7引脚配置错误的可能,用定时器中断使PC7一秒反转一次,波形是正常的。
然后就改PC6为上升沿中断,中断里将PC7反转一次。结果PC7仍未低电平。
求坛友看看PC6的配置程序和中断程序,是否有问题?
PC6配置程序:
void PC6_ExintConfig(void)
{
& && &&&EXTI_InitTypeDef EXTI_InitS
& && &&&GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource6);
& && &&&EXTI_InitStructure.EXTI_Line = EXTI_Line6;
& && &&&EXTI_InitStructure.EXTI_Mode = EXTI_Mode_I
& && &&&EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_R
& && &&&EXTI_InitStructure.EXTI_LineCmd = ENABLE;
& && &&&EXTI_Init(&EXTI_InitStructure);
}
复制代码
NVIC配置:
void NVIC_Configuration(void)
{
& && &&&NVIC_InitTypeDef NVIC_InitS
& && &&&NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
& && &&&
& && &&&NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
& && &&&NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
& && &&&NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
& && &&&NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
& && &&&NVIC_Init(&NVIC_InitStructure);
& && &&&
& && &&&NVIC_InitStructure.NVIC_IRQChannel = SPI2_IRQn;
& && &&&NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
& && &&&NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
& && &&&NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
& && &&&NVIC_Init(&NVIC_InitStructure);
& && &&&
& && &&&NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
& && &&&NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
& && &&&NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
& && &&&NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
& && &&&NVIC_Init(&NVIC_InitStructure);
& && &&&
& && &&&NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
& && &&&NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
& && &&&NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
& && &&&NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
& && &&&NVIC_Init(&NVIC_InitStructure);
& && &&&
& && &&&NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
& && &&&NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
& && &&&NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
& && &&&NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
& && &&&NVIC_Init(&NVIC_InitStructure);
& && &&&
& && &&&NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
& && &&&NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
& && &&&NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
& && &&&NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
& && &&&NVIC_Init(&NVIC_InitStructure);
}复制代码
中断程序:
void EXTI9_5_IRQHandler(void)
{
& && &&&if(EXTI_GetITStatus(EXTI_Line6) != RESET)
& && &&&{
//& && && && && & if(COMP_OK() != 0)
//& && && && && && && && &LVDS_EN(0);
//& && && && && & else
//& && && && && & {
//& && && && && && && && &SPI_I2S_SendData(SPI2, spi2SendBuff[0]);
//& && && && && && && && &LVDS_EN(1);
//& && && && && & }
//& && && && && & EXTI_ClearITPendingBit(EXTI_Line6);
& && && && && & GPIOC-&ODR ^= GPIO_Pin_7;
& && &&&}
}复制代码
------------------------------------------------------------------
补上GPIO配置:
void GPIO_Config(void)
{
& && &&&GPIO_InitTypeDef GPIO_InitS
& && &&&RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE);
& && &&&
& && &&&GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
& && &&&GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
& && &&&GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;& && &&&
& && &&&GPIO_Init(GPIOA, &GPIO_InitStructure);
& && &&&
& && &&&GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
& && &&&GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
& && &&&GPIO_Init(GPIOC, &GPIO_InitStructure);
& && &&&
& && &&&GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
& && &&&GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
& && &&&GPIO_Init(GPIOC, &GPIO_InitStructure);
& && &&&
& && &&&GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
& && &&&GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
& && &&&GPIO_Init(GPIOD, &GPIO_InitStructure);
& && &&&
& && &&&AD7193_CS(ON);
& && &&&ADT7310_CS(ON);
& && &&&ADG738_CS(ON);
& && &&&
& && &&&PC6_ExintConfig();
}复制代码
---------------------------------------------------
还是没搞定,新建了个工程,只保留定时器和GPIO,测试定时器控制PA0反转,一秒闪一次,没问题。
然后用PC6外部中断控制PA0反转,其他电路给PC6每秒一个脉冲信号(用示波器捕捉到可,确定拉到PC6了),结果灯不亮...
附件为工程文件。
(321.83 KB, 下载次数: 4)
16:47 上传
点击文件名下载附件
下载积分: ST金币 -1
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间71 小时
该用户从未签到主题帖子精华
金牌会员, 积分 1069, 距离下一级还需 3931 积分
题主是否使能了AFIO时钟
在线时间35 小时
该用户从未签到主题帖子精华
高级会员, 积分 604, 距离下一级还需 396 积分
感觉。。这东西还感觉,直接DEBUG不就知道了吗?
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间864 小时
ST金币2346
该用户从未签到主题帖子精华
楼主,IO有没有进行配置?
在线时间300 小时
ST金币1242
该用户从未签到主题帖子精华
金牌会员, 积分 4196, 距离下一级还需 804 积分
题主是否使能了AFIO时钟
因为用到了SPI2,所以使能了AFIO时钟。
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间300 小时
ST金币1242
该用户从未签到主题帖子精华
金牌会员, 积分 4196, 距离下一级还需 804 积分
感觉。。这东西还感觉,直接DEBUG不就知道了吗?
没有仿真器...
在线时间300 小时
ST金币1242
该用户从未签到主题帖子精华
金牌会员, 积分 4196, 距离下一级还需 804 积分
楼主,IO有没有进行配置?
IO配置了,已补上IO配置函数。
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间864 小时
ST金币2346
该用户从未签到主题帖子精华
看代码没有什么问题,楼主最好是仿真一下。把触发方式改为边沿触发,看看能否进入中断。
在线时间300 小时
ST金币1242
该用户从未签到主题帖子精华
金牌会员, 积分 4196, 距离下一级还需 804 积分
看代码没有什么问题,楼主最好是仿真一下。把触发方式改为边沿触发,看看能否进入中断。 ...
奈何没有仿真器...
现在的触发方式就是上升沿触发吧?
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间864 小时
ST金币2346
该用户从未签到主题帖子精华
改成边沿,不管上升沿或者下降沿都会触发的,有没有ST送的开发板,掰下来就是一个仿真器。
站长推荐 /2
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered bySTM32连续进中断问题+ - 快资讯
需要开启 JavaScript 才能正常打开页面}

我要回帖

更多关于 外部中断的触发方式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信