你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

遇到了外部中断的问题

[复制链接]
emdfduae 提问时间:2024-4-16 12:49 / 未解决

include "stm32f4xx.h" // Device header

int16_t Encoder_Count;

void Encoder_Init(void) { RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOB,&GPIO_InitStructure);

SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB,EXTI_PinSource1); //连接 EXTI 中断源 到 PB1 引脚 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB,EXTI_PinSource2); //连接 EXTI 中断源 到 PB2 引脚

EXTI_InitTypeDef EXTI_InitStructure; EXTI_InitStructure.EXTI_Line = EXTI_Line1 | EXTI_Line2; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_Init(&EXTI_InitStructure);

NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; NVIC_Init(&NVIC_InitStructure); }

int16_t Encoder_Get(void) { int16_t Temp; Temp = Encoder_Count; Encoder_Count = 0; return Temp;

}

void EXTI1_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line1) == SET) { if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) == 0) { if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_2) == 0) { Encoder_Count --; } } EXTI_ClearITPendingBit(EXTI_Line1); } }

void EXTI2_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line2) == SET) { if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_2) == 0) { if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) == 0) { Encoder_Count ++; } } EXTI_ClearITPendingBit(EXTI_Line2); } }

收藏 评论2 发布时间:2024-4-16 12:49

举报

2个回答
emdfduae 回答时间:2024-4-16 12:53:19

B1 B2 引脚的线都插着,旋转编码器正转反转都是减少,

只拔掉插在B2引脚的线,旋转编码器正转反转都是减少,

只拔插在掉B1引脚的线,没有反应。

butterflyspring 回答时间:2024-4-17 10:40:16
TIM1 中本身是有一个编码器功能的,可以参考一下例程STM32Cube_FW_F4_V1.25.2\Projects\STM324xG_EVAL\Examples\TIM\TIM_Encoder\
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版