STM32F10X系列GPIO外部中断

先从最简单的问题开始,用STM32外部中断的方法实现PB.0按键控制PA.0LED灯:先总的说下实现中断的步骤:1,配置NVIC寄存器(函数),设置中断为第几组,占先优先级和次优先级;      函数方法:           void NVIC_Configuration()        {        NVIC_InitTypeDef NVIC_InitStruct
摘要由CSDN通过智能技术生成


先从最简单的问题开始,用STM32外部中断的方法实现PB.0按键控制PA.0LED灯:

先总的说下实现中断的步骤:

1,配置NVIC寄存器(函数),设置中断为第几组,占先优先级和次优先级;

      函数方法:

           void NVIC_Configuration()      
  {
        NVIC_InitTypeDef NVIC_InitStruct;
      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);  
      NVIC_InitStruct.NVIC_IRQChannel=EXTI0_IRQn;            
      NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0;   
      NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;           
      NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;          
      NVIC_Init(&NVIC_InitStruct);
}

      以上为配置优先级的一般步骤:设置优先级分组,设置中断通道,分别设置先占优先级,次占优先级,使能等;

            



2,配置EXTI寄存器及(函数),设置中断线,中断方式,等;

            

void EXTI_Configuration()
{
	        EXTI_InitTypeDef EXTI_InitStructure;
                EXTI_ClearITPendingBit(EXTI_Line0);
	        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0);
		EXTI_InitStructure.EXTI_Line = EXTI_Line0;
		EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
		EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Fal
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
霍尔传感器是一种常用于测速电机的传感器,它可以通过检测磁场变化来确定电机的转速。在STM32F10x系列微控制器上,可以使用外部中断和定时器来实现霍尔传感器测速电机的代码。 以下是一个简单的示例代码,用于演示如何使用霍尔传感器测速电机: ```c #include "stm32f10x.h" // 定义霍尔传感器引脚 #define HALL_SENSOR_PIN GPIO_Pin_0 #define HALL_SENSOR_PORT GPIOA // 定义定时器和中断号 #define TIMER TIM2 #define TIMER_IRQn TIM2_IRQn // 定义计数器变量 volatile uint32_t counter = 0; // 中断服务函数 void TIMER_IRQHandler(void) { if (TIM_GetITStatus(TIMER, TIM_IT_Update) != RESET) { // 清除中断标志位 TIM_ClearITPendingBit(TIMER, TIM_IT_Update); // 计数器加一 counter++; } } int main(void) { // 初始化GPIO和定时器 // 使能GPIOA时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 配置霍尔传感器引脚为浮空输入模式 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = HALL_SENSOR_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(HALL_SENSOR_PORT, &GPIO_InitStructure); // 使能定时器时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 配置定时器 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructure.TIM_Period = 0xFFFF; TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIMER, &TIM_TimeBaseStructure); // 配置定时器中断 NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = TIMER_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); // 启动定时器 TIM_Cmd(TIMER, ENABLE); // 主循环 while (1) { // 获取计数器值,即电机转速 uint32_t speed = counter; // 清零计数器 counter = 0; // 在这里可以根据需要进行其他操作,比如控制电机的转速 // 延时一段时间 for (int i = 0; i < 1000000; i++); } } ``` 这段代码使用了TIM2定时器和GPIOA的引脚0作为霍尔传感器的输入引脚。在中断服务函数中,每次定时器溢出时,计数器会加一。在主循环中,可以通过读取计数器的值来获取电机的转速,并进行相应的控制操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值