【【萌新的STM32的学习--非正点原子视频的中断设计思路】】

这篇具有很好参考价值的文章主要介绍了【【萌新的STM32的学习--非正点原子视频的中断设计思路】】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

萌新的STM32学习–非正点原子视频的中断设计思路

【【萌新的STM32的学习--非正点原子视频的中断设计思路】】,stm32学习,stm32,学习,嵌入式硬件,单片机
我们分析而言

我们对于PA0 的设计就从此而来
对于边沿触发的选择我们已经有所了解了
我们下拉,但是当我们摁下开关的时候 从0到1 导通了 所以这个是下拉 上升沿触发

而对于KEY0 我们摁下是使得电路从原来悬空高阻态到地就是0 所以是下降沿触发
那么对于何种模式有很多人可能不理解
我们这么分析
【【萌新的STM32的学习--非正点原子视频的中断设计思路】】,stm32学习,stm32,学习,嵌入式硬件,单片机
这里在摁下前是什么我们不知道但是摁下了电流通过了从高到低 所以我们选择给PA0一个开始接入低 也就是下拉模式
【【萌新的STM32的学习--非正点原子视频的中断设计思路】】,stm32学习,stm32,学习,嵌入式硬件,单片机
而对于这个我们分析在摁下之后是不是要把1连接到低 那么对于原来的PE4 就是上拉模式 原来上拉到1 那么摁下就是从1到0 就是下降沿触发合情合理

关于代码部分我们的处理方式是这样的
因为我们用的是HAL库 所以怎么说呢
HAL库把很多功能集成封装起来了对我们设计都是颇有帮助的
我们在最先的使用中会先注意对外设进行初始化
因为很多都是建立在GPIO外设上的操作
ok第一步先对GPIO进行初始化
我们最先使用HAL_GPIO_Init
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
写是这么写的 一共分为了2部分
前面说的是GPIO_TypeDef *GPIOx
x就是表示我们可以在其中填入其他类型 比如说是GPIOA 等等 我们用到哪个就写入那个 不要管其他了 因为在HAL库的其他地方已经帮我们做完了基本的定义了 
第二个是GPIO_InitTypeDef GPIO_Init
这是一种关于GPIO_InitTypeDef 类型定义的
这个结构体包括了
typedef struct{
uint32_t Pin; /
引脚号 /
uint32_t Mode; /
模式设置 /
uint32_t Pull; /
上拉下拉设置 /
uint32_t Speed; /
速度设置 */} GPIO_InitTypeDef;
这是关于这个类型的叙述 我们就可以设置GPIO相应管脚的各项参数
这其实是基本的 他会把很多操作都封装起来 让你不直接接触寄存器而直接调用
其实我觉得正点原子在这方面既做的好又做的不好 课程之间并没有很爽快的那种完美连接 
就像是你之前介绍完寄存器 然后你实际用起来的时候还是把寄存器封装成一个个模块用的 那当然了我们直接用函数多方便 就是总感觉这其中差了点什么连接块 让人使用起来好不舒服 这是我的个人胡乱猜测

通过外部中断的方式让开发板上的三个独立按键控制 LED 灯:KEY_UP 控制 LED0 翻转,KEY1 控制 LED1 翻转,KEY0 控制 LED0 和 LED1 翻转。
【【萌新的STM32的学习--非正点原子视频的中断设计思路】】,stm32学习,stm32,学习,嵌入式硬件,单片机
【【萌新的STM32的学习--非正点原子视频的中断设计思路】】,stm32学习,stm32,学习,嵌入式硬件,单片机
分为红 蓝 黄 三根线
红色部分和 蓝色部分是我们 之前就已经实现过的
而对于黄色部分在此处是一种新的定义方式
目的是为了更好的连接EXTI为后续做准备
接下来展示的是exti.c
【【萌新的STM32的学习--非正点原子视频的中断设计思路】】,stm32学习,stm32,学习,嵌入式硬件,单片机
对于我们来说黄色的实现 是上面两次实验都有的
就是先把GPIO初始化再先设置
然后接下来的是新实现的两部分我们细致分析一下
HAL_NVIC_SetPriority(KEY0_INT_IRQn, 0, 2); /* 抢占 0,子优先级 2 /
HAL_NVIC_EnableIRQ(KEY0_INT_IRQn); /
使能中断线 4 /
HAL_NVIC_SetPriority(KEY1_INT_IRQn, 1, 2); /
抢占 1,子优先级 2 / HAL_NVIC_EnableIRQ(KEY1_INT_IRQn); / 使能中断线 3 / HAL_NVIC_SetPriority(WKUP_INT_IRQn, 3, 2); / 抢占 2,子优先级 2 / HAL_NVIC_EnableIRQ(WKUP_INT_IRQn); / 使能中断线 0 */
它可以分为2部分一部分是
HAL_NVIC_SetPriority
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority,uint32_t SubPriority);

这里可以分为三部分 第一部分是设置 中断号
第二部分是抢占优先级
第三部分是响应优先级
中断号是来自IRQn_Type 定义的枚举类型
我们之前在下面定义的IRQn 其实有这方面的考虑
还有一部分是
HAL_NVIC_EnableIRQ
中断使能函数
所以分析下来是这样的
【【萌新的STM32的学习--非正点原子视频的中断设计思路】】,stm32学习,stm32,学习,嵌入式硬件,单片机
【【萌新的STM32的学习--非正点原子视频的中断设计思路】】,stm32学习,stm32,学习,嵌入式硬件,单片机
void EXTI4_IRQHandler(); 这是中断服务函数
【【萌新的STM32的学习--非正点原子视频的中断设计思路】】,stm32学习,stm32,学习,嵌入式硬件,单片机
你会发现所有的各个部分写法都是这样,因为
所有的外部中断服务函数里都只调用了同样一个函数 HAL_GPIO_EXTI_IRQHandler,该函数是外部中断共用入口函数,函数内部会进行中断标志位清零,并且调用中断处理共用回调函数 HAL_GPIO_EXTI_Callback。
在他的内部会自动带上通用回调函数 所以我们不必去考虑到底何时何地才会写入这个回调函数
只要简单的记住 在中断服务函数内部只要写2个就可以了
另外再写的回调函数 会在我中断服务函数里面的第一条全世界公用的HAL_GPIO_EXTI_IRQHandler
内部会自行调用
我们在前面中断函数的处理过程中都调用了 HAL_GPIO_EXTI_IRQHandler()这个接口,它主要帮我们进行了寄存器操作,清除了中断事件,清除完中断源后,调用中断回调函数HAL_GPIO_EXTI_Callback,这个接口是一个__weak 的接口,我们通过重新实现这个函数来实现真正的外部中断控制逻辑。在该函数内部,通过判断 IO 引脚号来确定中断是来自哪个 IO 口,也就是哪个中断线,然后编写相应的控制逻辑。所以在该函数内部,我们通过 switch 语句判断IO 口来源,例如是来自 GPIO_PIN_0,那么一定是来自 PA0,因为中断线一次只能连接一个 IO口,而三个 IO 口中引脚号为 0 的 IO 口只有 PA0,所以中断线 0 一定是连接 PA0,也就是外部中断由 PA0 触发。其他的引脚号的逻辑类似。
还算可以接收的水平

所以通用步骤
其实学了很长时间的中断 甚至是寄存器的用法 哪一个都不如直接用HAL库来的实在
【【萌新的STM32的学习--非正点原子视频的中断设计思路】】,stm32学习,stm32,学习,嵌入式硬件,单片机
【【萌新的STM32的学习--非正点原子视频的中断设计思路】】,stm32学习,stm32,学习,嵌入式硬件,单片机文章来源地址https://www.toymoban.com/news/detail-681101.html

到了这里,关于【【萌新的STM32的学习--非正点原子视频的中断设计思路】】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2.基于正点原子STM32F103的定时器中断实验(HAL库实现)(cubeMX)

      基本上每一款MCU都会配备定时器这个外设,STM32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。 同样,STM32F1系列的定时器功能也很强大,包括: TIM1和TIM8两个高级定时器; TIM2~TIM5是个通用寄存器; TIM7,TIM8,两个基本定时器。 由于本次实验适用于新手入门

    2023年04月26日
    浏览(152)
  • 【【萌新的STM32学习-27--USART异步通信配置步骤】】

    USART/UART 异步通信配置步骤 1.配置串口工作参数 HAL_UART_Init() 我们会在此处调用MSP中的回调函数 2.串口底层初始化 用户定义HAL_UART_MspInit() 配置GPIO NVIC CLOCK 等 3.开启串口异步接收中断 HAL_UART_Receive_IT() 4.设置优先级,使能中断 HAL_NVIC_SetPriority() HAL_NVIC_EnableIRQ() 5.编写中断服务函数

    2024年02月10日
    浏览(27)
  • 【【萌新的STM32学习25--- USART寄存器的介绍】】

    STM32–USART寄存器介绍(F1) 控制寄存器1 (CR1) 位13: 使能USART UE 0: USART分频器和输出被禁止 1: USART模块使能 位12 : 配置8个数据位 M 该位定义了数据字的长度,由软件对其设置和清零 0: 一个起始位,8个数据位,n个停止位 1: 一个起始位,9个数据位,n个停止位 有效数

    2024年02月09日
    浏览(35)
  • STM32学习笔记3 正点原子miniSTM32串口通信实验

    初学者学习总结,如有错误,请大神指正 目的:用 STM32 的串口来发送和接收数据。 ALIENTEK MiniSTM32 V3 版开发板选择的是 STM32F103RCT6 作为 MCU,拥有5 个串口分别为 USART1、USART2、USART3、UART4、UART5, 其中只有USART1挂载在APB2总线上,其余均挂载在APB1总线上 APB1操作速度限于36MHz,A

    2024年02月04日
    浏览(51)
  • 正点原子--STM32基本定时器学习笔记(1)

    目录 1. 定时器概述 1.1 软件定时原理 1.2 定时器定时原理 1.3 定时器分类 1.4 定时器特性表 1.5 基本、通用、高级定时器的功能整体区别 2. 基本定时器简介 3. 基本定时器框图 时钟树分析 这部分是笔者对基本定时器的理论知识进行学习与总结!主要记录学习过程中遇到的重难点

    2024年02月19日
    浏览(42)
  • 【正点原子】STM32电机应用控制学习笔记——8.FOC简介

    FOC是适用于无刷电机的,而像有刷电机,舵机,步进电机是不适用FOC的。FOC是电机应用控制难度最大的部分了。 FOC(Filed Oriented Control)即磁场定向控制,又称磁场矢量控制(VC,Vector Control),也就是控制磁场的方向以及大小。 无刷电机的无感控制是六步换向,设定初始电流

    2024年01月22日
    浏览(36)
  • 正点原子STM32嵌入式学习-keil5安装教程

    前言:本人没有什么嵌入式的经验,但是看到硬件的同事做开发板比较好玩,比较感兴趣。刚好有这样一个机会,可以跟随《原子教你玩STM32(库函数版)》课程线下学习,在此,将本次课程的学习做一个记录。相信对我这样一个小白来说,帮助还是会非常大的。 目录 一.下

    2024年03月10日
    浏览(52)
  • 正点原子stm32F407学习笔记5——串口通信实验

    上位机给开发板发送数据,开发板将收到的数据发回给上位机 串口设置的一般步骤可以总结为如下几个步骤: 串口时钟使能,GPIO 时钟使能。 设置引脚复用器映射:调用 GPIO_PinAFConfig 函数。 GPIO 初始化设置:要设置模式为复用功能。 串口参数初始化:设置波特率,字长,奇

    2024年02月06日
    浏览(36)
  • STM32设计的宠物投喂器(正点原子mini开发板+2.8寸屏)

    在竞争日益激烈的今天,各行各业为提高竞争力,纷纷推出了各种新、奇的事物来吸引消费者。经过长时间的市场调查,发现广大市民及民营企业家大多还采用传统的人工喂养方式,这种方式不但耗费了大量的人力资源,而且由于现在的人力成本的不断增加,大大增加了企业

    2024年02月10日
    浏览(31)
  • 正点原子STM32MP157学习——1.开发环境及基本知识

            官方推荐使用VMWare15+Ubuntu18.04,之前自己做一些开发使用的VMWare+Ubuntu20.04,懒得重新安装,后续踩坑再填。         在Windows下需要安装STM32CubeMX、STM32CubeIDE(这两个用来配置和编写MCU代码)和STM32Programmer(烧录工具)。这三个软件需要java环境,所以还需要安装j

    2024年02月07日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包