STM32CUBEMX 中断管理

发布者:shengju最新更新时间:2019-03-24 来源: eefocus关键字:STM32CUBEMX  中断管理 手机看文章 扫描二维码
随时随地手机看文章

使用cube开发工具进行开发,使用HAL库,有一个问题就是当我们在cube界面配置完成后“以为完全配置好了”,结果在实际代码编写的时候回发现常见以下问题:


1:中断没配置


2:优先级没配置


这里简单分析以下手动开启中断的配置 取两个例子


example1:如何在无法改动cube工程的情况下 使能外部中断


step1


gpio.c 中


  GPIO_InitStruct.Pin = MotoFG_Pin;

  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

  GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;

  GPIO_InitStruct.Pull = GPIO_PULLUP;

  HAL_GPIO_Init(MotoFG_GPIO_Port, &GPIO_InitStruct);

 

  HAL_NVIC_SetPriority(EXTI3_IRQn, 5, 0); //改为外部中断9

  HAL_NVIC_EnableIRQ(EXTI3_IRQn); //手动修改外部中断设置


step2


it.c中


void EXTI3_IRQHandler(void)

{

  

  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3); //增加中断句柄

}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) //添加中断相应函数处理

{

 switch(GPIO_Pin)

 {

   case GPIO_PIN_3:

     {

      PulseCome++;

     }

   break;

  default:

   break;

 }

}


example2:如何在无法改动cube工程的情况下 利用timer2 ch4 开启PWM输出

这里有个坑,在103c8中timer2 ch4恰好是SWD口,PB3所以开启时需要开启复用时钟

/* TIM2 init function */

void MX_TIM2_Init(void)//117

{  

 TIM_ClockConfigTypeDef sClockSourceConfig;

  TIM_MasterConfigTypeDef sMasterConfig;

  TIM_OC_InitTypeDef sConfigOC;

  htim2.Instance = TIM2;

  htim2.Init.Prescaler = 71;

  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;

  htim2.Init.Period = 3600;

  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;

  if (HAL_TIM_Base_Init(&htim2) != HAL_OK)

  {

    _Error_Handler(__FILE__, __LINE__);

  }

  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;

  if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)

  {

    _Error_Handler(__FILE__, __LINE__);

  }

  if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)

  {

    _Error_Handler(__FILE__, __LINE__);

  }

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;

  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;

  if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)

  {

    _Error_Handler(__FILE__, __LINE__);

  }

  sConfigOC.OCMode = TIM_OCMODE_PWM1;

  sConfigOC.Pulse = 1234;

  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

  sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;

  if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)

  {

    _Error_Handler(__FILE__, __LINE__);

  }

  HAL_TIM_MspPostInit(&htim2);

}

继续追进去  

void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)

{

  GPIO_InitTypeDef GPIO_InitStruct;

  if(timHandle->Instance==TIM2) //117

  {

  

    GPIO_InitStruct.Pin = timer2Pwm;

    GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;

    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

    HAL_GPIO_Init(timerpwm_GPIO_Port, &GPIO_InitStruct);

    __HAL_AFIO_REMAP_TIM2_PARTIAL_2(); // 开AFIO时钟

  

  }

}

最后,别忘了在it.c中加入句柄

void TIM2_IRQHandler(void) //117

{

  /* USER CODE BEGIN TIM4_IRQn 0 */

  /* USER CODE END TIM4_IRQn 0 */

  HAL_TIM_IRQHandler(&htim2);

  /* USER CODE BEGIN TIM4_IRQn 1 */

  /* USER CODE END TIM4_IRQn 1 */

}


关键字:STM32CUBEMX  中断管理 引用地址:STM32CUBEMX 中断管理

上一篇:STM32CubeMX串口接收中断
下一篇:STM32CubeMX:EXTI操作

推荐阅读最新更新时间:2024-03-16 16:26

基于STM32CubeMX&HAL库写代码之串口
首先打开新建好的STM32CubeMX工程 最后点击右上角的GENERATE CODE生成代码即可 发送个hello world看看是否初始化成功 HAL_UART_Transmit(&huart1, (uint8_t *) hello worldrn , sizeof( hello worldrn ), 0xffff); 重定义printf 方法一 //重定义fputc函数 int fputc(int ch, FILE *f) { while((USART1- SR&0X40)==0);//循环发送,直到发送完毕 USART1- DR = (uint8_t) ch; return ch;
[单片机]
基于STM32CubeMX&HAL库写代码之串口
STM32CubeMX系列 | 定时器中断
1. 定时器中断简介 STM32的定时器功能十分强大,有高级定时器(TIM1和TIM8)、通用定时器(TIM2~TIM5)和基本定时器(TIM6和TIM7);本实验主要介绍难度适中的通用定时器,通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。 它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。 使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。 每个定时器都是完全独立的,没有互相共享任何资源。 通用TIMx (TIM2、TIM3、TIM4和TIM5)定时器功能包括: 16位向上、向下、向上/向下自动装载计数器 16位
[单片机]
STM32CubeMX系列教程18:文件系统FATFS
FATFS简介 FatFS是一个为小型嵌入式系统设计的通用FAT(File Allocation Table)文件系统模块。FatFs 的编写遵循ANSI C,并且完全与磁盘I/O层分开。它可以被嵌入到低成本的微控制器中,如AVR, 8051, PIC, ARM等等。兼容Windows文件系统。 关于FATFS文件系统的API函数介绍,底层移植接口和例程等可以查到FATFS官网。 FATFS官网: http://elm-chan.org/fsw/ff/00index_e.html 结合STM32cubeMX软件移植FATFS文件系统非常简单。本章程序在上一章SDMMC工程的基础上修改,复制串口SDMMC的工程,修改文件
[单片机]
<font color='red'>STM32CubeMX</font>系列教程18:文件系统FATFS
STM32CubeMX系列教程10:串行外设接口SPI(一)
1.SPI简介 SPI(Serial Peripheral Interface),串行外围设备接口,一种高速的,全双工,同步的通信总线。芯片的管脚上只占用四根线。 MISO: 主器件数据输出,从器件数据输入。 MOSI:主器件数据输入,从器件数据输出。 SCK: 时钟信号,由主设备控制发出。 NSS(CS): 从设备选择信号,由主设备控制。当NSS为低电平则选中从器件。 如下为主器件与多个从器件通信,其中SCK,MOSI,MISO是接在一起的,NSS分别接到不同的IO管脚控制。主器件要和从器件通信就先拉低对应从器件的NSS管脚使能。默认状态IO1,IO2,IO3全为高电平,当主器件和从器件1通信时,拉低IO1管脚使能从
[单片机]
<font color='red'>STM32CubeMX</font>系列教程10:串行外设接口SPI(一)
STM32CubeMx(STM32F4 +FreeRTOS+CMSIS-RTOS)之队列(queue)创建
一.CMISIS-RTOS中queue相关API概览 模块 宏定义 描述 消息队列定义 osMessageQDef 定义一个消息队列 osMessageQ 访问一个消息队列定义 模块 API 描述 消息队列管理: 定义,创建,发送和接收数据 osMessageCreate 创建一个消息队列 osMessageGet 从消息队列中取得一个数据(可以是数值,也可以是指针) osMessagePut 把消息放入消息队列中 二.创建一个消息队列 //osMessageQDef(消息队列的名字, 消息队列的长度, 该消息支持传递的数据类型,如:uint8_t); osMess
[单片机]
<font color='red'>STM32CubeMx</font>(STM32F4 +FreeRTOS+CMSIS-RTOS)之队列(queue)创建
STM32CubeMX教程之简介及基本使用
STM32CubeMX是意法半导体推出的图形化配置工具,通过傻瓜化的操作便能实现相关配置,最终能够生成C语言代码,支持多种工具链,比如MDK、IAR For ARM、TrueStudio等。尤其值得一提的是,TrueStudio已经被ST收购,提供完全免费的版本,并且,通过插件式安装,可以将STM32CubeMX集成在一个IDE,使用十分方便。如下图: 图1 TrueStudio中的STM32CubeMX 接下来将分步骤介绍使用STM32CubmeMX及MDK、STM32CubmeMX及TrueStudio进行STM32程序设计。 一、新建工程(方式1 使用ST官方的开发板) 打开STM32CubmeMX,在主界面选择Ne
[单片机]
<font color='red'>STM32CubeMX</font>教程之简介及基本使用
STM32CubeMX】2,STM32CubeMX常用的自动生成函数
1,在#include stm32f1xx_hal.h 的头文件中, 常用 void HAL_Delay(uint32_t Delay); 2,GPIO.H void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin); GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); void HAL_GPIO_WriteP
[单片机]
【<font color='red'>STM32CubeMX</font>】2,<font color='red'>STM32CubeMX</font>常用的自动生成函数
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved