一、说明本文学习内容来自普中开发板官方学习文档。STM32实现按键检测,可以使用扫描或中断的方式。本文采用扫描的方式来实现。本文使用的按键电路原理图如下:按键KEY_UP接在GPIOA端口上,其他按键连接在GPIOE上;LED接在GPIOC上。其中KEY_UP通过电阻连接到3.3v,连接到PA0口,其具有一个唤醒的功能,连接高电平有效。要判断是否按下,看其是 …
最新内容
1 前言最近在公司维护的项目中碰到一个解决了定位很久的 bug , bug 找到的时候发现犯了很低级的错误——在中断处理函数中调用了 printf 函数,因为中断处理函数的调用了不可重入函数,导致中断丢失和系统位置错误,这里直接导致嵌入式 linux 系统应用进程中的所有线程停掉,进而导致看门狗进程得不到喂狗,设备重启。那什么是不可重入函数呢?为什么中断处理 …
最近项目需求开始使用STM32,很多年不用了,以前用STM32的时候还没有HAL库。调试串口的中断接收一直有问题,网上看了各路大神的帖子,都写得比较混乱。耽误大半天,终于调通了,这里简单记录一下。首先需要明白的是CUBEMX生成的代码里面虽然配置了串口,但是串口功能是关闭的,手动开启串口接收中断。手动配置开启中断的函数是HAL_UART_Receive_IT …
这里以 KEIL 开发环境和 STM32F103RET6 为例。上电时单片机首先进入复位中断 Reset_Handler,即汇编文件的复位中断处理函数。并且有一个中断向量表默认存在于 flash 地址开始处。为什么说是默认呢?这是因为如果没有特殊要求的话很少会去改中断向量表。实际上这个中断向量表是可以更改的。但是在更改向量表之前必须在地址开始处建立一个向量表 …
如何编写 STM 单片机的中断服务函数?在单片机碰到异常事件时,它会执行对应的中断服务函数来处理异常事件。单片机的每一种电路都有中断功能,对应电路的中断服务函数该怎么写?可以按照以下步骤来实现。1. 搭建好函数的代码框架。可以按照以下模板搭建。2. 要确定好第一步的函数名写入。可以在单片机工程中找到类似这样的.S 文件,再从中找到想要的函数名写入在第一步的框 …
在MCU开发过程中,最常用的函数之一就是Delay函数(即延时函数)。在Firmware执行过程中,需要等待一定时间,确保执行动作顺利完成,如继电器控制,通常需要延时10~20ms。STM32系列的HAL库提供了默认的Delay函数,函数精度为ms级别。HAL库中的Delay函数的思路是,ARM内核会提供一个32位的滴答定时器(即Systick),利用这个定 …
今天讲一下单片机-定时器中断,这个是难点中的难点,小编第一次放弃自学单片机就是中断,第二次就是定时器中断[泣不成声]首先你要知道什么是中断,这个可以翻一下上篇看一下,或是“中断”-嵌入式的灵魂 直接过去。知道中断后,我们看一下,这个特殊的中断-定时器中断。它特殊在哪呢?1、它的中断请求是“内部”的,我们感受不到的,这也是很多人迷茫的地方;2、它的机制是一般是 …
为什么需要中断?如果让内核定期对设备进行轮询,以便处理设备,那会做很多无用功,因为外设的处理速度一般慢于CPU,而CPU不能一直等待外部事件。所以能让设备在需要内核时主动通知内核,会是一个聪明的方式,这便是中断。嵌入式进阶教程分门别类整理好了,看的时候十分方便,由于内容较多,这里就截取一部分图吧。需要的朋友私信【内核】即可领取。内核学习地址:Linux内核源 …
1.stm32的每个IO口都可以作为外部中断输入。GPIOA-G,7组,每组PX0-15,16个Pin,共112个。2.外部中断线线0-15:对应外部IO口的输入中断。PA0-PG0映射到外部中断线0(EXTI0)、PX.15映射到外部中断线15(EXTI15)。每个中断线同一时刻只能有一个Pin,例如:PA0映射到EXIT0时,PB0-PG0就不能映射。每 …