- 博客(108)
- 收藏
- 关注
原创 SOC-ESP32S3部分:16-I2C
通过调用 i2c_new_master_bus和i2c_master_bus_add_device安装好 I2C 主机控制器驱动程序后,ESP32-S3 就可以与其他 I2C 设备进行通信了。从一些 I2C 设备中读取数据之前需要进行写入配置,可通过 i2c_master_transmit_receive接口进行配置。将一个 I2C 设备添加到已创建的 I2C 总线上,该函数配置指定地址的 I2C 从设备,并返回一个设备句柄,以便后续对该设备进行读写操作。主机向从机设备写入并从从机设备读取数据。
2025-05-27 21:01:50
560
原创 SOC-ESP32S3部分:15-PWM脉冲宽度调制
ESP32-S3 提供了LED PWM 控制器,简写为LEDC,用于生成控制LED 的脉冲宽度调制信号,这里仅仅是命名的区别,其实控制LEDC就是通用的PWM控制器。ESP32-S3的SW_PWM功能允许我们通过软件来控制PWM,而不需要额外的硬件。通过改变脉冲的宽度,我们可以控制电源的输出,从而控制例如LED的亮度或电机的速度。ledc_channel_config_t用于配置 LEDC PWM 通道,并将其应用到指定的 GPIO 引脚。是用于设置和更新 LEDC 通道占空比的两个关键函数。
2025-05-27 20:57:00
363
原创 SOC-ESP32S3部分:13-定时器
示例开始时创建并启动一个周期性和一个一次性定时器,回调函数打印自启动以来经过的时间,一次性定时器的回调函数会重新定义周期性定时器的周期并重启它,之后芯片进入浅睡眠,唤醒后定时器再执行一些回调函数,最后停止并删除定时器以释放内存。API文档位于https://docs.espressif.com/projects/esp-idf/zh_CN/v5.4/esp32s3/api-reference/system/esp_timer.html。ESP_Timer定时器创建esp_timer_create。
2025-05-26 18:26:40
722
原创 SOC-ESP32S3部分:14-错误处理
为了让我们编写的代码更健壮,我们可以给所有带返回状态的函数添加错误处理代码,一旦某些资源初始化失败,可以马上终止程序,避免运行异常,触发不确定的问题。这个错误处理代码就是使用IDF提供的ESP_ERROR_CHECK宏定义。定时器代码添加错误处理参考。
2025-05-26 18:21:51
177
原创 SOC-ESP32S3部分:12-2、编码器驱动
可以从图中可以看出当从CW方向转动的时候,A的波形上升沿比B波形的上升沿快,具体快多少,这里数据手册给出24±3°,当从CCW方向转动的这个时候恰好相反,B的相位上升沿快于A的上升沿。编码器的驱动比较简单,我们在基础课程已经有学习过编码器的原理,我们这里就不重复讲解原理了,大家可以跳转32部分课程了解下原理,这里主要给大家演示下ESP32S3结合IO中断、消息队列实现的编码器方向和按下事件。编码器有四根线,A\B是编码输出,S是按钮状态,C是公共端。首先我们查看原理图,了解编码器的接线如下。
2025-05-25 19:15:24
286
原创 SOC-ESP32S3部分:12-1、任务通信-队列
以往我们大循环中两个模块进行通信,或者中断和大循环通信,很多时候都用一个全局变量标志位的方式进行,在学习单片机部分串口通信时,我们也使用过队列的方式进行,但是都是需要我们自己编写代码实现,像我们前面说到,按键中断触发后,不应该在中断内部打印,需要把触发的事件发出来,然后在任务中进行处理,这里我们就可以使用队列进行通信。而IDF集成了FreeRTOS后,我们就可以直接使用FreeRTOS的队列功能,来实现任务与任务,中断与任务的通信。例如,创建一个队列,然后在任务1中间隔1s发送消息,任务2中接收消息。
2025-05-25 19:13:15
226
原创 SOC-ESP32S3部分:11-任务创建
在我们学习单片机的时候,main函数入口中一般有一个while大循环在不停轮询,如果我们需要实现多种不同的业务,就需要用到状态机,根据不同时刻的要求执行不同的代码,虽然可以实现需求,但这种情况下代码是比较臃肿的。但是需要注意的是,IDF的例程中,是不会单独对FreeRTOS通用的任务创建、任务通信等RTOS相关特性进行讲解,这部分我们可以参考FreeRTOS官方文档或者IDF API文档进行了解。IDF默认是集成了实时操作系统FreeRTOS的,所以FreeRTOS相关接口我们都是可以用的。
2025-05-24 22:57:20
819
原创 SOC-ESP32S3部分:10-GPIO中断&按键中断实现
因为中断中不能执行耗时操作,而打印函数就是耗时操作,更加规范的做法是,在中断回调函数中发送消息,在外部任务中进行处理,这也是我们接下来两节课要讲解的多任务和消息队列。我们看到官方例程中,添加了一个关键词IRAM_ATTR,IRAM_ATTR 表示该函数将被放置在内部高速 RAM(IRAM)中执行,以提高中断处理的速度。这里我们需要注册一个回调函数,一旦触发中断,系统就会运行这个函数的代码,学习了GPIO输入和输出功能后,参考示例工程,我们再来看看GPIO中断,IO中断的配置分为三步。
2025-05-24 22:54:17
607
原创 SOC-ESP32S3部分:9-GPIO输入&按键状态读取
这部分和GPIO输出的配置比较类似,GPIO的输入配置和输出配置,用的都是一个函数gpio_config,我们只需要把参数中的mode设置为输入模式即可。这里我们使用按键作为GPIO输入例程讲解,先查看原理图,找到按键连接的GPIO,如下图所示,板卡的GPIO42连接到按键。前面我们学习了GPIO的输出,GPIO输入部分其实也是一样的,这里我们使用按键作为GPIO输入例程讲解,分三步走。然后按下按键,可以看到打印level:0,松开按键打印level:1。
2025-05-23 19:48:37
371
原创 SOC-ESP32S3部分:8-GPIO输出&LED控制
GPIO例程的源码文件在esp-idf/examples/peripherals/gpio/generic_gpio/main/gpio_example_main.c中,IO口的选择通过Kconfig进行配置esp-idf/examples/peripherals/gpio/generic_gpio/main/Kconfig.projbuild。例如,这节课我们的需求是,需要通过GPIO控制指示灯的亮灭,也就是需要使用GPIO的输出控制功能,那如何了解GPIO的输出功能呢?
2025-05-23 19:46:17
789
原创 SOC-ESP32S3部分:7-如何学习ESP32S3-IDF开发
通过前面几章的学习,我想大家都感觉到了,ESP32的开发和普通单片机开发还是有一定差异的,我们在学习51时主要学习的是寄存器的开发,学习STM32时,主要学习的是各类芯片资源、外设的库函数开发,而学习ESP32时,除了基础芯片资源、外设,还有各类WiFi、蓝牙、网络、安全、系统、音频等等模块。ESP32的资源非常多,大模块包含蓝牙、WiFi、系统、外设、存储、安全、配网联网等等,每个大模块又包含非常多的小模块,对于这类芯片的应用,我们不可能像学习基础教程一样,逐个模块进行讲解,那样可能几百节课程都讲不完。
2025-05-22 22:41:09
583
原创 SOC-ESP32S3部分:6-任务看门狗
ESP32-S3的任务看门狗功能是一个重要的系统保护机制,它可以确保在程序发生异常(如进入死循环或跑飞)时,系统能够自动重启,以保障系统的稳定运行。工具或者搜索引擎,也可以快速定位问题,不要看到一大串英文就慌,其实英文越多这个错误就越具体,只需要仔细查看错误的描述即可。在这里,我们可以知道默认情况下TWDT是开启的,间隔时间默认是5s,这个点,我们在menuconfig中也是可以看到的。的错误日志是非常完善的,看错误日志就可以判断出是哪里出现了问题,如果我们看不懂,我们可以把日志贴给。
2025-05-22 22:38:11
976
原创 SOC-ESP32S3部分:5-IDF的日志管理
也就是说我们可以配置CONFIG_LOG_DEFAULT_LEVEL这个宏来决定打印日志的类型,等于或小于这个宏值能打印,高的不能打印,在sdkconfig文件中可以看到CONFIG_LOG_DEFAULT_LEVEL默认为3,所以ESP_LOG_ERROR、ESP_LOG_WARN、ESP_LOG_INFO都可以打印。但是企业中开发项目,其实要求我们可以更好管理日志,例如调试的日志在发布时不打印,例如应为每个模块设置不同的日志级别。如何使用idf的日志库呢?到这里,我们就可以看到所有的日志都打印出来了。
2025-05-21 15:57:09
527
原创 SOC-ESP32S3部分:4-参数配置可视化menuconfig
你可以把这里的配置比作Keil中的魔法棒窗口,可以配置各类编译参数、烧录参数,里面的内容非常多,但是这节课我们暂时不需要修改其中任何模块,我们只需要了解下这个窗口的操作按键即可。可以选择对应菜单,按Enter回车可以进入下一层,这里我们修改下信息,选择对应选项后,按Enter回车输入内容,然后按ESC退出,然后输入Y保存。接着,我们可以添加一点自己的配置,我们先按Esc按键退出,如果你已经修改了配置,这里会提问你是否保存,记得点击按键N即可。配置,如果没有编译所有模块,意味着你是没有修改到。
2025-05-21 15:54:11
657
原创 SOC-ESP32S3部分:3-参考helloworld动手新建自己的最小工程
编译后,你可以看到工程中多了个build文件夹,这就是我们编译配置产生的结果文件,还多了个sdkconfig文件,这个是我们执行idf.py set-target esp32s3 产生的,针对特定芯片生成的文件,都是过程文件。main.c为工程入口源码,我们简单看看每句代码的含义,这里需要特别说明的是,IDF是默认适配了FreeRTOS的,所以我们可以直接使用FreeRTOS相关的功能,比如多任务、队列、通知等等。至此,我们已经自己独立搭建了一个最小的工程,后续创建其它工程,操作都是一样的。
2025-05-20 15:11:02
431
原创 SOC-ESP32S3部分:2-2-VSCode进行编译&烧录
无论是使用Window搭建IDF开发环境,还是使用Linux Ubuntu搭建IDF开发环境,我们都建议使用VSCode进行代码编写和编译,VSCode界面友好,支持各类免费的插件,可以大大加速我们开发,接下来,我们看看如何使用VScode进行工程编译烧录。我们可以看到VSCode的底部出现了一个powershell的终端,这就是使用VSCode的好处,编辑源码,编译,烧录都可以在一个IDE完成,这样,我们就不用手动另外在打开powershell啦。然后,我们执行脚本配置下IDF的环境变量。
2025-05-20 15:03:26
836
原创 SOC-ESP32S3部分:2-1-编译烧录第一个工程
在IDF中其实给我们提供了非常多的例程,我们开发时一般也是参考其中的例程进行开发,在这里,我们参考官方提供的hello_world工程,带大家了解下idf工程如何编译和烧录。第一个工程是学习后续课程的基础,因为不同电脑环境差异较大,你在做实验的过程中可能会遇到各类奇怪的问题,课程很难遍历出所有可能出现的问题,建议你多结合。指令,非常简单,这些指令可以大大加速我们开发速度,虽然是Linux命令,在Window Power shell中也是可以使用的。接着把板卡通过TypeC线接到电脑,然后就可以执行烧录。
2025-05-19 11:36:31
754
原创 SOC-ESP32S3部分:1、ESP32开发IDF-5.4环境搭建
在以前,ESP32开发环境的搭建是一件极其痛苦的事情,因为乐鑫之前只支持Linux的开发方式,安装的开发环境很多插件都在Github上,而很多包又特别大,国内访问Github本身就比较麻烦,这类特别大的包,网络一旦不稳定,很容易下载失败,搭建个环境可能需要一到两天。注意,使用Linux环境搭建,需要有Linux相关命令行使用经验,小白用户建议用Window环境搭建,如果要用Linux,先学习下Linux相关知识,建议看书籍:鸟哥的 Linux 私房菜。,建议上魔法多尝试,出现问题时自行搜索相关教程安装。
2025-05-19 11:33:03
549
原创 SOC-ESP32S3部分:0、什么是ESP32
完善的安全机制使芯片能够满足严格的安全要求。但准确点来说,ESP32其实不是一款芯片,而是一个系列的芯片,这个和STM32有点类型,STM32有L系列、F系列、H系列,ESP32也有不同的系列。• 支持 SPI 协议:SPI、Dual SPI、Quad SPI、Octal SPI、QPI、OPI,可外接 flash、片外 RAM 和其他 SPI 设备。很多不同的模组公司基于乐鑫的芯片,把他封装为不同形态的模组,当然,乐鑫也做ESP32的模组,所以他们的形态各异,但是把壳子扣掉后,里面都是ESP32核心。
2025-05-18 11:01:43
701
原创 SOC-ESP32S3部分:快速烧录&上手使用
查看插入的开发板对应的COM端口号,(不确定的请插拔一下开发板USB接口,看卸载和新识别的COM端口号就是要选择的COM端口号),记住此COM口,后续烧录需要用到,不同电脑下方的COM口可能不一样,记住自己的即可。配网步骤完成后,设备已连接到互联网,此时设备屏幕会显示6位数字的验证码,或者通过“你好,小智”唤醒,并出现要求添加设备的提示语6位设备验证码(可以重复唤醒重听)。喇叭的2Pin线接在板卡的PH1.0端子上,注意端子有正反,可以从侧面看下孔位,反了插不进去的,拔喇叭线时,注意左右挪动轻轻拔出。
2025-05-18 10:53:47
911
原创 进阶-数据结构部分:3、常用查找算法
是指:从一些数据之中,找到一个特殊的数据的实现方法。查找算法与遍历有极高的相似性,唯一的不同就是查找算法可能并不一定会将每一个数据都进行访问,有些查找算法如二分查找等,并不需要完全访问所有的数据。(Binary Search),多数的人喜欢叫他二分查找。顺序查找算法是最简单的查找算法,其意思为:线性的从一个端点开始,将所有的数据依次访问,并求得所需要查找到的数据的位置,此时,线性查找可以称呼为遍历。查找算法适用于很多场景,最典型的应用场景就是已知次品商品的特征,如何从一堆商品当中查找出这些次品。
2025-05-17 21:34:01
337
原创 进阶-数据结构部分:2、常用排序算法
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,A1=A2,且A1在A2之前,而在排序后的序列中,A1仍在A2之前,则称这种排序算法是稳定的;如果一个算法的时间复杂度是O(logn),logn表示以2为底n的对数,比如,当数据增大256倍时,耗时只增大8倍,256/2除尽的次数。它描述了算法在处理数据时所需的时间/空间量随着数据规模的增加而增加的速度。比较相邻的元素,把大的交换到右边,从第一对到最后一对,这步做完后,最后的元素会是最大的数。
2025-05-17 21:32:37
818
原创 进阶-数据结构部分:1、数据结构入门
后退/前进功能:网页浏览器中的后退和前进按钮可以使用栈来实现。在浏览网页时,每次访问一个新页面时,当前页面的信息将被推入栈中。当用户点击后退按钮时,程序将从栈中弹出最近的访问页面,并显示上一个页面。编写代码,实现演唱会购票用户(id、座位区域(A、B、C))购票与出票。场景:实现一个用户信息管理系统,支持插入、查找、删除。按购票顺序先后处理,先购票先出票。
2025-05-16 17:29:44
259
原创 单片机-STM32部分:18、WiFi模组
上述配置完成后, 点击下方START开始烧录,若一直停在等待上电同步,可以点击板卡的RES按钮,就可以开始下载了,下载一般20s左右,如果1S内完成的,一般是上面没勾选,如果长时间没下载完,一般是线有问题,可以换杜邦线重新接稳。下载完成后,拔掉J10的IO0的杜邦线,从下载模式切换到运行模式,打开串口助手,设置波特率115200 8 N 1,按RES按钮,就可以看到设备启动数据,注意。下载AT指令固件到本地后,我们需要先按下方接好线,DC电源头供电,核心板不接,然后只接TX RX GND。
2025-05-16 17:22:52
1828
原创 单片机-STM32部分:17、数码管
其二,我们不用担心会有其他的东西干扰数码管刷新,因为我们是将数码管放在定时器中断里刷新的,只要配置的中断优先级足够高,就一定不会有其他的进程干扰数码管刷新!但是这里我们遇到一个问题,点亮一个数码管,需要8个IO,两个数码管则需要16个IO,很多时候,单片机没有这么多IO分配到给这个模块使用,所以我们用两颗74HC595芯片来扩展驱动数码管。本设计使用了一个2位的数码管,为共阴型,为了节省单片机的IO口,使用了两片74HC595作为数码管的驱动芯片,共占用3个IO口。OE:使能,低电平使能。
2025-05-15 20:18:45
1164
原创 单片机-STM32部分:15、直流电机与步进电机 PWM/IO
下图是单极性步进电机整步旋转的过程,其中,在图示中分为5根线,分别为A、B、C、D和公共端(+),公共端需要一直通电, 剩下ABCD相中只要有一个相通电,即可形成回路产生磁场,图中的通电顺序为A->B->C->D,即可完成上图中的顺时针旋转, 如果想要逆时针旋转只需要将其倒序即可。而步进电机和直流电机内部是没有控制芯片的,如果使用stm32直接接电机,因为stm32芯片引脚驱动能力弱而驱动不起甚至损坏芯片,stm32每个IO的最大电流为40mA,一般步进电机跑起来可能需要几百mA到几A。
2025-05-15 00:18:25
947
原创 单片机-STM32部分:14、SPI
线SPI和4线SPI,这里的4线SPI的意思是,在SPI的CS MOSI MISO CLK的基础上,多了一个D/C,指令/数据切换引脚,由于屏幕只需要接收主机发送的数据,主机不需要读取屏幕的数据,所以4线SPI的引脚为CS MOSI CLK D/C,3线则是CS MOSI CLK,少了一个D/C引脚。OLED屏幕就是一个个小的有机自发光二极管组成的阵列,作为例子的屏幕的分辨率是128*64,即每行有128个发光二极管,一共有64行,如果我们需要显示一个图案,可以按图案的坐标点亮对应位置的发光二极管即可。
2025-05-14 19:17:14
1167
原创 单片机-STM32部分:13-1、蜂鸣器
配置PWM的具体参数,预分频系数为 72-1,自动重装载值为 500-1,定时器溢出频率,即PWM的周期,就是 72MHz/(72)/(500) = 2kHz 这里的72是因为从0开始计算到71,500同理。//设置默认的占空比值。无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音。型三极管进行驱动,因为单片机的引脚驱动能力有限,蜂鸣器的功率比较大,所以需要通过三极管来驱动,蜂鸣器有正负极,顶部印有+号的为正极,若蜂鸣器引脚没剪,则长的为正极。
2025-05-12 22:45:07
1119
原创 单片机-STM32部分:13-1、编码器
可以从图中可以看出当从CW方向转动的时候,A的波形上升沿比B波形的上升沿快,具体快多少,这里数据手册给出24±3°,当从CCW方向转动的这个时候恰好相反,B的相位上升沿快于A的上升沿。2、可以同时捕获A项的上升、下降边沿,然后判断A项第一个边沿中断时候获取B和A项的电平,在第二个边沿触发中断的时候捕获B和A项的电平,根据两次捕获B和A项的值就可以知道旋转的方向。需要增加测量的精度时,可以采用4倍频方式,即分别在A、B相波形的上升沿和下降沿计数,分辨率可以提高4倍,大大的方便我们的开发。
2025-05-12 22:42:41
1315
原创 单片机-STM32部分:13、PWM
例如输出占空比为50%,频率为10Hz的脉冲,高电平为3.3V.则其输出的模拟效果相当于输出一个1.65V的高电平。调节占空比最终会反映到输出的电流、电压上,或者可以理解为输出的总能量变化,100%占空比时输出100%能量,50%占空比时,只会输出一半的能量,例如50%占空比控制LED会比较暗,控制电机力气会比较小。预分频系数为 72-1,自动重装载值为 500-1,定时器溢出频率,即PWM的周期,就是 72MHz/(72)/(500) = 2kHz 这里的72是因为从0开始计算到71,500同理。
2025-05-11 20:49:02
1382
原创 单片机-STM32部分:12、I2C
SMBus总线和I2C是比较类似的,所以STM32兼容了这两种设计,一般场景比较少用SMBus,I2C则是非常多外设使用的接口,我们本节课以I2C为主,看看如何使用STM32的I2C功能。这两种模式支持的通讯速率不同,在标准模式中,最大只能设置100KHz,作为主机时,速率大小要看从机支持的最大速率,一般来说100KHz可以满足上述的触摸屏、传感器、EEPROM的驱动。则用Mem_Write。选择为I2C功能后,会自动选择对应的IO作为I2C的IO,这里I2C是支持重映射的,我们可以根据需要手动修改。
2025-05-11 20:43:21
2115
原创 单片机-STM32部分:11、ADC
开发板使用PA0做ADC采集实验,PA0外部接了一个滑动电阻器,R92为保护电阻,当我们滑动电阻器时,PA0上的电压会在0-3.3V变化,而PA0是绑定到ADC的通道0上的,所以我们可以采集ADC1通道0的值,来计算出PA0的电压。例如,我们想在芯片突然掉电时,保存一些必要数据。规则通道就是普通的通道,注入通道就是“插队”通道,是优先级高的通道,如果规则通道遇到注入通道插队,就必须先执行完注入通道的数据转换,再进行规则通道的数据转换,这点类似中断优先级的概念。
2025-05-10 23:41:18
956
原创 单片机-STM32部分:10-2、逻辑分析仪
安装包如下:根据自己的系统选择,目前这个工具只有window版本哦。安装方法比较简单,都按默认下一步即可,注意不要安装到中文路径哦。其余部分参考飞书文档。
2025-05-10 23:35:02
277
原创 单片机-STM32部分:10-1、485
在接收数据的过程中,TX引脚是一直保持高电平的,当TXD是高电平时,RE是低电平,正好变成了接收状态,然后485芯片的RO引脚(也就是接RX的引脚)就会接收AB传输过来的数据。当TX发送0时,三极管不导通,DE接高电平,进入发送模式,485芯片会把DI上的电平反应到AB引脚上输出,因为DI已经接地,所以AB引脚会传输0。所以,当TXD发送0时,AB引脚发送0。当TX发送1时,三极管导通,RE接低电平,进入接收模式,485芯片的AB引脚进入高阻状态,因为R2把A拉高,R1把B拉低,所以,AB传输的是1。
2025-05-10 23:33:28
978
原创 单片机-STM32部分:10、串口UART
比如A设备有个TX向B设备RX发送数据,A设备发的太快导致B处理不过来,如果没有硬件流控制,B就只能抛弃新数据或者覆盖原数据了,如果有硬件流控制,在硬件电路上会多出一根线,如果B没准备好接收就置于高电平,准备好了就置低电平,A只会在B准备好的时候发送数据。因此在批量数据传输,通信波特率较高时,建议采用。我们可以看到,上方的方式都是阻塞式发送,轮询接收的,简单的产品这样设计没有问题,但是做一些复杂的,对实时性有要求的产品时,就满足不了了,所以我们可以用到串口中断的功能,在CUBEMX中使能中断。
2025-05-09 18:43:14
1183
原创 单片机-STM32部分:9-1、触控检测芯片
该芯片内建稳压电路,提供稳定电压给触摸感应电路使用, 同时内部集成高效完善的触摸检测算法,使得芯片具有稳定的触摸检测效果。玻璃盖板下通过一个触摸PAD连接到触摸芯片中,触摸PAD可以用PCB铜箔、金属片、平顶圆柱弹簧、导电棉、导电油墨、导电橡胶、导电玻璃的ITO层等。当有人体手指靠近触摸按键时,人体手指与大地构成的感应电容并联焊盘与大地构成的感应电容,会使总感应电容值增加。电容式触摸按键IC在检测到某个按键的感应电容值发生改变后,将输出某个按键被按下的确定信号。同时添加LED1作为测试效果展示。
2025-05-09 18:27:20
482
原创 单片机-STM32部分:9、定时器
当使用内部时钟源时,PSC可以将时钟信号频率除以一个固定的分频系数,以降低计数器的时钟频率,从而扩大计数器的计时范围。当一个定时器的计数器计数到预设值时,就会产生一个触发输出,可以将该输出信号连接到其他定时器或外设的启动输入端,以实现多个定时器或外设同步工作(如:定时器更新产生TRGO信号来触发ADC的同步转换)。这样可以实现定时器的周期性计数,从而实现定时和计时的功能。这种通过一个定时器触发另一个定时器的工作方式称为定时器的同步,发出触发信号的定时器工作于主模式,接受触发信号而启动的定时器工作于从模式。
2025-05-08 19:57:34
769
原创 单片机-STM32部分:8、外部中断
如果B的抢占优先级没有高过A的抢占优先级,则程序不会打断A的中断服务程序,而是待定A的中断服务程序运行完成后才运行B的中断服务程序。主要由三个参数,一个是中断使能,一个是抢占优先级(主优先级),还有一个就是响应优先级(子优先级),中断系统通常有优先级分层,挂起寄存器确保低优先级的中断在高优先级的中断处理完毕后才被服务。例如A中断触发,正在运行A中断的服务程序,此时B中断也触发,中断使能很好理解,就是是否开启中断,如果开启中断,则满足中断触发条件时程序会跳到中断服务程序运行,否则不响应中断主程序继续运行。
2025-05-08 19:50:06
837
原创 单片机-STM32部分:7、GPIO输入 按键
生成成功后,如果我们没打开Keil,可以点击Open Project,如果已经打开了Keil,可以点击Close,切换到Keil界面。在我们需要读取模拟量时,例如ADC或DAC的功能,就需要把IO设置为模拟数据,后续ADC章节讲解。如果外部没有上下拉的,内部就选择上下拉,钳住IO电平,让IO信号更稳定。设置为下拉模式,在无外部信号输入时,IO电平是低电平。当外部没有上下拉时,如果外部有效信号是低电平,选择上拉输入。当外部没有上下拉时,如果外部有效信号是高电平,选择下拉输入。
2025-05-07 19:12:30
1204
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人