gpt4 book ai didi

c - STM32F4 中断处理程序用于捕获其未调用

转载 作者:太空宇宙 更新时间:2023-11-04 03:41:52 24 4
gpt4 key购买 nike

下面的代码使用 TIM1 channel 3 的捕获比较功能来捕获 PE10 的上升沿,但它不起作用,没有调用中断处理程序。我不太擅长这种嵌入式的东西,所以有人可以告诉我我的设置是否正确吗?

#include "STM32/stm32f4xx_tim.h"

void TIM1_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;

/* TIM1 clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

/* GPIOA clock enable */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);

/* TIM1 channel 3 pin (PE.10) configuration */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOE, &GPIO_InitStructure);

/* Connect TIM pins to AF2 */
GPIO_PinAFConfig(GPIOE, GPIO_PinSource10, GPIO_AF_TIM1);

/* Enable the TIM1 global Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

TIM_ICInitTypeDef TIM_ICInitStructure;
TIM_ICInitStructure.TIM_Channel = TIM_Channel_3;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter = 0x0;

TIM_ICInit(TIM1, &TIM_ICInitStructure);

/* TIM enable counter */
TIM_Cmd(TIM1, ENABLE);

/* Enable the CC3 Interrupt Request */
TIM_ITConfig(TIM1, TIM_IT_CC3, ENABLE);
}


void TIM1_CC_IRQHandler(void)
{
// .................
}

int StartCapture()
{
TIM1_Config();

while(1); /* Infinite loop */
}

最佳答案

如果您的 TIM1_CC_IRQHandler() 被调用一次,那么 Dracog71 的答案是正确的。但是,如果您的 IRQHandler() 从不 触发,则说明初始化有问题。

这是您必须做对的事情的列表,否则 IRQ 不会触发。

1) 确保为您正在使用的引脚启用了 GPIO[A:E] 时钟。

2) 同样,确保为您正在使用的 TIMx 启用了时钟。检查您的 TIMx 所在的位置。如果您为 APB1 上的计时器调用 RCC_APB2PeriphClockCmd(),编译器不会抛出错误,但您的计时器永远不会工作。

3) 仔细检查您的引脚的 AF 是否与数据表的替代功能映射表相匹配(例如,AF1 == TIM1_CH3)。

4) 在您的 TIM_ICInitStructure 中,确保 TIM_Channel 与您选择的 channel 匹配(在您的情况下为 TIM_Channel_3)。

5) 在 NVIC 中配置并启用正确的 IRQ channel ,例如。 NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn;

6) 启用中断:TIM_ITConfig(TIM1, TIM_IT_CC3, ENABLE);

7) 启用定时器:TIM_Cmd(TIM1, ENABLE);

关于c - STM32F4 中断处理程序用于捕获其未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27818841/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com