ToB企服应用市场:ToB评测及商务社交产业平台

标题: 01 EXTI串讲复习:通过按键触发制止控制LED灯状态 [打印本页]

作者: 水军大提督    时间: 2024-11-24 10:14
标题: 01 EXTI串讲复习:通过按键触发制止控制LED灯状态
01 EXTI串讲复习:通过按键触发制止控制LED灯状态

大家好,今天我们来复习一下怎样通过按键触发制止,进而控制LED灯的状态。这个需求听起来简单,但实际上涉及到STM32的制止系统和GPIO设置,这些都是嵌入式开发中非常紧张的概念。好了,让我们直接进入正题。
信号传递的出发点

起首,整个信号的传递是从GPIO引脚开始的。我们希望外部的按键信号可以大概传递到CPU的制止事件里。那么,这个引脚应该设置成什么状态呢?当然是输入状态。我们来想一想,GPIO引脚有几种状态?起首是通用输入,然后是通用开漏,还有复用功能,模拟输入,浮空输入,上拉输入等等。
流程图:
     GPIO引脚的模式选择

在输入模式下,GPIO引脚实际上不分复用照旧通用。它们都会经过一个施密特触发器,同时传递给IDR(输入数据寄存器)和复用模块。但是,这个复用模块背面有很多功能,比如串口、SPI、I2C,乃至是我们的EXTI。以是,你必要规定这个引脚到底给谁用。这个选择是由AFIO(外设功能重映射)来做的。
流程图:
     EXTI模块的设置

现在,我们要让外部的上升沿触发内部的一个制止事件。至少你应该先把这个引脚设置成输入模式。输出模式肯定不是我们想要的,因为我们希望控制权在外,而非CPU主动控制。以是,我们要把它配成输入模式。
流程图:
     制止信号的传递

输入模式的信号会传递到EXTI模块。EXTI模块内部有一个边缘检测电路,它非常简单,就是检测输入信号是否有上升沿或降落沿。具体是检测上升沿照旧降落沿,这取决于我们的设置。
流程图:
     NVIC的优先级设置

制止信号从EXTI传递到NVIC之前,会经过一系列的处理。起首,信号会遇到一个事件屏蔽寄存器,只有当该寄存器设置为1时,信号才能继续传递。接着,信号会到达挂起寄存器,假如挂起寄存器为1,则会触发CPU内部的制止。
流程图:
     优先级的具体应用

我们可以通过两个例子来明确优先级的应用。假设有两个制止,制止一的优先级设置为0x01,制止二的优先级设置为0x10。在差别的优先级划分下,制止一可能打断制止二,或者等待制止二实行完毕后再实行。假如两个制止的嵌套优先级和排队优先级都相等,那么它们会按照制止号的顺序实行。
例子:
假设我们有两个制止,制止一的优先级为0x01,制止二的优先级为0x10。假如制止一的嵌套优先级高于制止二,那么制止一可以打断制止二。假如两者的嵌套优先级相同,那么它们将按照排队优先级实行,即制止一将先于制止二实行。
流程图:
     总结

好了,同砚们,我们今天复习了怎样通过按键触发制止,以及涉及到的GPIO设置和制止处理机制。这些都是STM32制止系统的基础,也是嵌入式开发中非常紧张的知识点。希望这次的复习可以大概资助你们更好地明确和应用这些概念。
02 讲解了一堆要配的寄存器:STM32 EXTI 设置详解

大家好,今天我们来深入探讨一下STM32中那些必要设置的寄存器。在我们开始编写代码之前,先得把每个模块的寄存器搞清楚。起首,我们来看EFL寄存器。
引言

在我们开始之前,必要先了解每个模块的寄存器。我们先从AFIO寄存器开始,它和GPIO寄存器都在第八章中。
AFIO寄存器设置

AFIO(Alternate Function I/O)用于设置GPIO引脚的复用功能。我们直接打开AFIO的手册,找到第八章的AFIO技能描述。
流程图:
     外部制止设置

在AFIO寄存器中,我们关注与EXTI(External Interrupt)相干的部分。EXTI是用于处理外部制止信号的。
流程图:
     EXTI设置详解

每个EXTI寄存器是32位的,但只有低16位是有效的。低16位中,每4位用来表示一个选择,因为2^4=16,正好覆盖0到15。
流程图:
     选择GPIO引脚

假如我们想让PA0触发制止,我们必要在AFIO的EXTICR寄存器中举行设置。这里,我们必要选择ABCDEFG中的一个引脚。
流程图:
     EXTI寄存器设置

接下来,我们设置EXTI寄存器。我们必要选择是上升沿、降落沿照旧双边触发。
流程图:
     事件屏蔽寄存器

事件屏蔽寄存器默认值都是0,表示禁止状态,以是我们可以不用设置。
流程图:
     上升沿和降落沿触发选择

根据硬件电路的具体需求,我们选择上升沿或降落沿触发。
流程图:
     软件制止事件寄存器

软件制止事件寄存器用于在没有外部信号的情况下触发制止服务函数。
流程图:
     NVIC设置

最后,我们还必要设置NVIC,但通常我们不通过寄存器的方式来设置,而是通过其他方法。
流程图:
     总结

好了,同砚们,今天我们详细讲解了STM32中那些必要设置的寄存器,包罗AFIO和EXTI寄存器的设置。这些都是嵌入式开发中非常紧张的知识点。希望这次的讲解可以大概资助你们更好地明确和应用这些概念。
03按键点灯需求和GPIO设置讲解

大家好,今天我们来聊一聊按键点灯的需求和GPIO的设置。这个需求在我们的文档里有详细的描述,我们来一步步地搞清楚。
需求描述

起首,我们的需求是利用开发板上的一个按键(K3),当按键被按下时,翻转LED的显示。这个操作我们之前做过,其时写了一个函数叫做toggleLED,通过异或的方式来实现。现在,我们要实现这个功能,逻辑非常简单,就是检测按键K3是否被按下,假如被按下,就触发一个制止函数,制止函数里只做一件事:翻转LED,调用toggleLED函数即可。
GPIO设置

确定按键对应的GPIO引脚

要设置GPIO,我们起首必要知道K3对应的是哪个GPIO引脚。根据我们的原理图,K3对应的是PF10。这个引脚对应制止事件是EXTI10。
设置EXTI10

接下来,我们要设置EXTI10。我们必要知道按键按下时是触发上升沿照旧降落沿。对于按键SW5,当按键按下时,PF10的电平会从低变高,以是我们设置EXTI10为上升沿触发。
确定按键状态

按键未按下时,PF10的状态是高电平,因为PF10直接连接到芯片,中间没有上拉电阻和下拉电阻。当按键按下时,PF10的电平会变为低电平,因为按键将PF10连接到了地。
设置GPIO模式

我们必要设置GPIO的工作模式。默认情况下,GPIO是浮空输入模式,这意味着电平状态是不确定的。为了制止这种情况,我们可以将GPIO设置为下拉输入模式,如许当按键未按下时,PF10的电平可以稳定在低电平。
流程图

下面是整个流程的流程图,资助大家更好地明确:
     总结

通过今天的学习,我们了解了怎样根据需求设置GPIO,以及怎样处理按键制止。希望这个博客能资助你更好地明确和学习按键点灯的需求和GPIO设置。假如你有任何问题,接待随时提问。

以上就是今天的课程内容,希望可以大概资助你更好地明确和掌握按键点灯的需求和GPIO设置。假如有任何不清楚的地方,或者必要进一步的解释,随时接待提问。祝你学习愉快!
04 创建05_led_toggle_led_register项目

大家好,今天我们来聊聊怎样创建一个新的项目,名为05_led_toggle_led_register。这个项目是基于我们之前的LEDflow项目,我们将复制粘贴的方式来创建新项目。接下来,我会一步步地带你完成这个过程。
复制粘贴创建新项目

起首,我们要复制之前的LEDflow项目。为什么如许做呢?因为我们的新项目必要调用之前写的LED函数。以是,同砚们一定要留意,天天都要跟上课程,因为我们背面会经常基于前面的项目创建新项目。假如你哪一天漏掉了一个项目,背面可能就跟不上了。
步骤1:复制项目

步骤2:重命名项目

将复制的项目重命名为05_led_toggle_led_register,这次我们的项目就是按键翻转LED,计算器版本。
步骤3:删除遗留文件

打开新项目文件夹,删除之前项目遗留的文件,比如listing和objects文件夹。
步骤4:重新设置项目

右键项目,选择“重新设置”,将其改为我们的新项目名。
步骤5:设置调试器

双击打开项目,点击把戏棒(Project Explorer),找到debug设置,将调试器从ulink改为STlink,并设置主动复位。
添加硬件设置

这次我们添加了一个额外的硬件——按键。我们必要在Keil中创建一个新的文件夹,与按键相干的设置。
步骤1:创建新目次

在Keil中创建一个新的目次,命名为k,表示按键。
步骤2:添加文件

在k目次下添加两个文件:k.c和k.h。
步骤3:留意文件范例

创建文件时,一定要创建文本文档,不要创建二进制文件,如Excel或Word文档。
步骤4:添加到项目

将k.c和k.h添加到项目中,创建一个新的group,命名为hardware-k,并将这两个文件添加进去。
步骤5:添加到Keil设置

在Keil的把戏棒中,找到C/C++,新建一个文件夹,选择hardware-k,添加进去。
完成设置

完成以上步骤后,整个项目就算设置完成了。我们可以休息一会儿,十五分钟后返来继续上课。

以上就是我们今天的内容,希望这个博客能资助你更好地明确和掌握怎样创建新项目05_led_toggle_led_register。假如有任何不清楚的地方,或者必要进一步的解释,随时接待提问。祝你学习愉快!
流程图

下面是整个流程的流程图,资助大家更好地明确:
     希望这个流程图能资助你更清楚地回顾今天的学习内容。假如有任何问题,随时接待提问。
05 为什么没有IOPFEN这个宏:STM32项目设置详解

大家好,今天我们来聊聊在STM32项目中,为什么偶然候我们找不到IOPFEN这个宏,以及怎样办理这个问题。这个问题看似简单,但实际上涉及到项目设置和宏界说的深层知识。
项目创建与代码编写

起首,我们创建好项目后,打开我们的IDE(比如Keil或者VSCode),开始写代码。我们的目标是将我们的LED操作的代码添加进来。
流程图:
     找不到K点H文件

当我们实验添加代码时,发现找不到K点H文件。这通常是因为我们没有精确地包含头文件。
流程图:
     设置GPIO

接下来,我们必要设置GPIO。这包罗界说GPIO的工作模式,选择精确的引脚,以及设置EXTI和NVIC。
流程图:
     为什么没有IOPFEN宏

在我们设置GPIO时,可能会遇到一个问题:为什么没有IOPFEN这个宏?这个问题实际上是由于我们的项目没有精确地界说STM32的型号。
流程图:
     项目芯片型号界说

我们的项目必要知道我们使用的STM32的型号,这是因为差别的型号有差别的外设和引脚。这个信息通常是在项目创建时界说的。
流程图:
     办理方案

办理方案是确保我们的项目精确地界说了STM32的型号。这可以通过在编译器控制字符串中添加相应的界说来实现。
流程图:
     总结

好了,同砚们,今天我们详细讲解了在STM32项目中,为什么偶然候我们找不到IOPFEN这个宏,以及怎样办理这个问题。我们从项目创建开始,一步步分析了问题的根源,并提供了办理方案。这些都是嵌入式开发中非常紧张的知识点。希望这次的讲解可以大概资助你们更好地明确和应用这些概念。

以上就是我们今天复习的内容,假如你有任何疑问,或者想要进一步探讨,接待在批评区给我留言。记得点赞和关注,如许你就不会错过更多的嵌入式开发知识和技巧。下次见!
06 设置GPIO工作模式:STM32 GPIO设置详解

大家好,今天我们来详细讲解一下怎样在STM32中设置GPIO的工作模式。这个问题对于嵌入式开发来说非常基础,但也非常关键。我们从发现IOPFEN宏不在的问题开始,一步步办理,现在终于可以拿到IOPFEN了。接下来,我们开始设置GPIO。
开始设置GPIO

起首,我们必要对GPIO举行时钟设置,如许才能开始设置模式。
流程图:
     设置为下拉输入模式

我们选择的模式是下拉输入模式。那么,怎样设置GPIO为下拉输入模式呢?
流程图:
     参考手册设置

根据STM32的参考手册,我们可以找到GPIO的设置方法。对于输入模式,我们必要将MODE设置为0,CNF设置为01,如许就能设置为下拉输入模式。
流程图:
     设置GPIO寄存器

STM32的GPIO寄存器分为CRL和CRH两个设置寄存器。我们必要设置的是PF10,这个引脚在CRL寄存器中。
流程图:
     具体设置步骤

流程图:
     代码实现

在代码中,我们必要根据上述步骤举行设置。这里是一个简化的代码示例:
  1. // 假设GPIOF的时钟已经开启
  2. // CNF配置为01,MODE配置为00
  3. GPIOF->CRL &= ~(0x0F << 4); // 清除PF10的配置
  4. GPIOF->CRL |= (0x02 << 4); // 设置PF10为下拉输入模式
  5. // ODR配置为0
  6. GPIOF->ODR &= ~(1 << 10); // 确保PF10输出为低
复制代码
总结

好了,同砚们,今天我们详细讲解了怎样在STM32中设置GPIO的工作模式为下拉输入模式。我们从参考手册的设置描述开始,一步步分析了怎样设置GPIO的CNF、MODE和ODR寄存器。这些都是嵌入式开发中非常紧张的知识点。希望这次的讲解可以大概资助你们更好地明确和应用这些概念。

以上就是我们今天复习的内容,假如你有任何疑问,或者想要进一步探讨,接待在批评区给我留言。记得点赞和关注,如许你就不会错过更多的嵌入式开发知识和技巧。下次见!
07 AFIO和EXTI的寄存器设置:STM32详细指南

大家好,今天我们来聊聊STM32中的AFIO和EXTI寄存器设置。这但是嵌入式开发中的关键步骤,我们从GPIO设置完成后,接下来就该设置AFIO和EXTI了。
设置AFIO

起首,我们得确定要把信号线分配给哪个EXTI。以PF10为例,它对应的是EXTI10,以是我们必要在EXTI10里举行设置。
流程图:
     寻找寄存器和设置

接下来,我们必要找到AFIO寄存器的描述,并设置EXTI10。在参考手册中,我们可以直接找到EXTI设置寄存器。
流程图:
     编写代码

在编写代码时,我们起首必要开启AFIO的时钟,然后设置AFIO寄存器。
流程图:
     设置EXTI

对于EXTI的设置,我们必要选择是上升沿触发照旧降落沿触发。假如希望按键按下立即触发制止,我们选择上升沿触发。
流程图:
     代码实现

下面是设置AFIO和EXTI的代码示例:
  1. // 开启AFIO时钟
  2. RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
  3. // 配置AFIO寄存器,将PF10分配给EXTI10
  4. AFIO->EXTICR[2] |= (0x1 << (4 * 2)); // EXTICR[2]对应EXTI8-15
  5. // 配置EXTI10为上升沿触发
  6. EXTI->RTSR |= EXTI_RTSR_TR10; // 使能上升沿触发
复制代码
总结

好了,同砚们,今天我们详细讲解了STM32中AFIO和EXTI寄存器的设置。我们从信号线分配给EXTI开始,一步步分析了怎样查找寄存器描述、编写代码以及设置触发方式。这些都是嵌入式开发中非常紧张的知识点。希望这次的讲解可以大概资助你们更好地明确和应用这些概念。

以上就是我们今天复习的内容,假如你有任何疑问,或者想要进一步探讨,接待在批评区给我留言。记得点赞和关注,如许你就不会错过更多的嵌入式开发知识和技巧。下次见!
08 NVIC的三行设置:STM32制止控制详解

大家好,今天我们来聊聊STM32中的NVIC(Nested Vectored Interrupt Controller)设置。NVIC的设置逻辑非常简单,但却是嵌入式开发中至关紧张的一部分。我们将从根本概念开始,渐渐深入到具体的设置步骤。
NVIC的根本概念

起首,NVIC是ARM Cortex-M内核的一部分,负责管理制止哀求。它的紧张功能是响应制止并根据优先级调度制止服务函数。我们通常不必要直接举行底层寄存器编程,而是通过调用相应的函数来完成设置。
流程图:
     设置优先级分组

在设置NVIC时,第一步是设置制止优先级分组。优先级分组决定了制止的嵌套和排队战略。我们可以通过调用一个函数来设置优先级分组。
流程图:
     示例代码

下面是设置优先级分组的示例代码:
  1. NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_3); // 设置优先级分组
复制代码
设置制止优先级

接下来,我们必要为每个制止设置具体的优先级。NVIC的优先级是通过一个枚举范例来表示的,我们必要传入制止的编号和优先级。
流程图:
     示例代码

以下是设置制止优先级的示例代码:
  1. NVIC_SetPriority(EXTI15_10_IRQn, 3); // 设置EXTI10-15的优先级为3
复制代码
使能制止

最后一步是使能制止哀求。通过调用相应的函数,我们可以使能特定的制止。
流程图:
     示例代码

使能制止的示例代码如下:
  1. NVIC_EnableIRQ(EXTI15_10_IRQn); // 使能EXTI10-15中断
复制代码
总结

好了,同砚们,今天我们详细讲解了怎样设置STM32中的NVIC。我们从根本概念开始,渐渐分析了优先级分组的设置、制止优先级的设置以及制止的使能。这些都是嵌入式开发中非常紧张的知识点。希望这次的讲解可以大概资助你们更好地明确和应用这些概念。

以上就是我们今天复习的内容,假如你有任何疑问,或者想要进一步探讨,接待在批评区给我留言。记得点赞和关注,如许你就不会错过更多的嵌入式开发知识和技巧。下次见!
09 制止向量表:STM32制止服务函数详解

大家好,今天我们来聊聊STM32中的制止向量表和制止服务函数。我们已经完成了初始化,现在来写制止服务函数。这但是嵌入式开发中的核心部分,让我们一步步来深入了解。
制止服务函数的位置

起首,我们来确定制止服务函数应该写在那里。其实,制止服务函数不必要写在头文件(k点h)中,它只必要在你的项目中的任何位置界说即可。
流程图:
     明确制止向量表

接下来,我们要明确什么是制止向量表。制止向量表是一个数据布局,它包含了指向所有制止服务函数的指针。
流程图:
     向量表的根本概念

向量表,顾名思义,就是由向量组成的表。在数学中,向量是具有巨细和方向的量,而在计算机科学中,向量通常指的是一种数据布局,雷同于数组。
流程图:
     制止服务函数的编写

现在,我们来编写制止服务函数。在STM32中,每个制止都有一个对应的向量函数名,我们只必要找到这个名字并实现它。
流程图:
     示例代码

下面是制止服务函数的示例代码:
  1. void EXTI15_10_IRQHandler(void) {
  2.     // 你的中断处理逻辑
  3. }
复制代码
编译器怎样处理制止服务函数

编译器在编译时会查找与向量表中函数名匹配的函数,并将其内容主动搬运到对应的内存位置。
流程图:
     总结

好了,同砚们,今天我们详细讲解了STM32中的制止向量表和制止服务函数。我们从根本概念开始,渐渐分析了怎样编写制止服务函数以及编译器怎样处理这些函数。这些都是嵌入式开发中非常紧张的知识点。希望这次的讲解可以大概资助你们更好地明确和应用这些概念。

以上就是我们今天复习的内容,假如你有任何疑问,或者想要进一步探讨,接待在批评区给我留言。记得点赞和关注,如许你就不会错过更多的嵌入式开发知识和技巧。下次见!
10 制止服务函数的编写和标记位的打扫:STM32实践指南

大家好,今天我们来深入探讨STM32制止服务函数的编写以及怎样精确打扫制止标记位。这些都是嵌入式开发中的关键步骤,让我们一步步来深入了解。
编译器怎样处理制止服务函数

起首,我们来聊聊编译器是怎样处理制止服务函数的。编译器在编译时会使用一个特殊关键字weak,这个关键词允许我们重写汇编文件中界说的弱函数。
流程图:
     编写制止服务函数

在编写制止服务函数时,我们必要留意一些关键点。例如,对于按键触发的制止,我们必要处理抖动问题,确保按键稳定后再实行操作。
流程图:
  1. graph LR
  2.     A[编写中断服务函数] --> B[处理按键抖动]
  3.     B --> C[延时等待稳定]
  4.     C --> D[执行操作,如翻转LED状态]
复制代码
示例代码

下面是处理按键抖动并翻转LED状态的示例代码:
  1. #include "delay.h"  // 引入延时函数的头文件
  2. void EXTI15_10_IRQHandler(void) {
  3.     delay_ms(15);  // 延时15毫秒,等待按键稳定
  4.     LED_Toggle();  // 翻转LED状态
  5.     EXTI->PR = EXTI_PR_PR10;  // 清除中断标志位
  6. }
复制代码
打扫制止标记位

在制止服务函数中,打扫制止标记位黑白常紧张的一步。假如没有打扫,制止会不断触发,导致程序无法正常运行。
流程图:
     打扫标记位的代码

打扫EXTI制止标记位的代码如下:
  1. EXTI->PR = EXTI_PR_PR10;  // 清除EXTI Line 10的中断标志位
复制代码
总结

好了,同砚们,今天我们详细讲解了STM32制止服务函数的编写以及怎样精确打扫制止标记位。我们从编译器怎样处理制止服务函数开始,到编写制止服务函数,再到打扫制止标记位,这些都是嵌入式开发中非常紧张的知识点。希望这次的讲解可以大概资助你们更好地明确和应用这些概念。

以上就是我们今天复习的内容,假如你有任何疑问,或者想要进一步探讨,接待在批评区给我留言。记得点赞和关注,如许你就不会错过更多的嵌入式开发知识和技巧。下次见!
11 寄存器版本制止服务函数的最终实现:STM32制止处理详解

大家好,今天我们来讨论STM32制止服务函数的最终实现。我们已经完成了初始化,现在要编写制止服务函数,并确保它可以大概正常工作。让我们一步步来看看具体的实现过程。
制止服务函数的根本布局

起首,制止服务函数在被调用时,第一件事就是打扫制止标记位。否则,这个函数会被多次实行,导致程序出现非常。
流程图:
     示例代码

下面是制止服务函数的根本布局示例代码:
  1. void EXTI15_10_IRQHandler(void) {    // 打扫制止标记位    EXTI->PR = EXTI_PR_PR10;  // 清除EXTI Line 10的中断标志位
  2.         // 处理逻辑    delay_ms(15);  // 软件消抖    if (GPIOF->IDR & (1 << 10)) {  // 查抄PF10的状态        LED_Toggle();  // 翻转LED状态    }}
复制代码
软件消抖处理

在处理制止时,我们必要思量按键的抖动问题。按键按下时,可能会产生多个快速的电平变革,因此我们必要举行消抖处理。通常的方法是延时一段时间,确保按键状态稳定后再举行判定。
流程图:
     读取GPIO状态

在判定按键状态时,我们必要读取GPIO的输入数据寄存器(IDR)。通过与掩码举行与运算,可以确定按键是否被按下。
流程图:
     示例代码

读取GPIO状态的代码示例:
  1. if (GPIOF->IDR & (1 << 10)) {  // 检查PF10的状态
  2.     LED_Toggle();  // 翻转LED状态
  3. }
复制代码
打扫制止标记位的紧张性

打扫制止标记位是确保制止服务函数正常工作的关键步骤。假如不打扫标记位,制止将会不断触发,导致程序无法正常运行。
流程图:
     总结

好了,同砚们,今天我们详细讲解了STM32制止服务函数的最终实现,包罗怎样打扫制止标记位、处理软件消抖以及读取GPIO状态。这些都是嵌入式开发中非常紧张的知识点。希望这次的讲解可以大概资助你们更好地明确和应用这些概念。

以上就是我们今天复习的内容,假如你有任何疑问,或者想要进一步探讨,接待在批评区给我留言。记得点赞和关注,如许你就不会错过更多的嵌入式开发知识和技巧。下次见!
12 制止服务函数总结及何时打扫标记位:STM32深入解析

大家好,今天我们来总结一下STM32的制止服务函数,以及探讨一下在制止处理中何时打扫标记位的问题。这些都是嵌入式开发中非常紧张的知识点,让我们一步步来深入了解。
制止服务函数的编写

在STM32开发中,制止服务函数的编写是一个关键步骤。它不仅涉及到功能的实现,还涉及到程序的稳定性和响应速度。
打扫制止标记位的紧张性

起首,我们来讨论一下为什么必要打扫制止标记位。假如我们不打扫制止标记位,制止服务函数可能会被多次实行,导致程序出现非常。
流程图:
     何时打扫标记位

关于何时打扫标记位,有两种常见的做法:一种是在函数的开始处打扫,另一种是在函数的结束处打扫。
流程图:
     打扫标记位的位置选择

一样平常来说,有80%的情况下,我们会在制止服务函数的第一行就打扫标记位。如许做的缘故因由是为了制止在函数实行期间发生第二次制止事件,导致制止服务函数被跳过。
流程图:
     例子

假设我们在实行制止服务函数的过程中,又发生了一次制止事件。假如我们在函数的最后打扫标记位,那么第二次制止事件可能就会被忽略,因为我们的标记位还没有被打扫。
最佳实践

因此,最佳实践是在制止服务函数的开始处立即打扫标记位,如许可以确保纵然在函数实行期间发生第二次制止事件,也可以大概被精确处理。
流程图:
     总结

好了,同砚们,今天我们总结了STM32制止服务函数的编写,以及探讨了何时打扫标记位的问题。这些都是嵌入式开发中非常紧张的知识点。希望这次的讲解可以大概资助你们更好地明确和应用这些概念。

以上就是我们今天复习的内容,假如你有任何疑问,或者想要进一步探讨,接待在批评区给我留言。记得点赞和关注,如许你就不会错过更多的嵌入式开发知识和技巧。下次见!
13 制止服务函数补充:EXTI判定详解

大家好,今天我们来补充一下制止服务函数的知识,特别是关于怎样判定是哪个EXTI线触发了制止。这是一个在嵌入式开发中经常会遇到的问题,让我们一步步来深入了解。
制止服务函数的问题

到目前为止,我们的制止服务函数可能还存在一个重大问题。这个问题不是关于消抖,而是关于怎样区分是哪个EXTI线触发了制止。
流程图:
     判定EXTI线的紧张性

我们的制止服务函数同时服务于EXTI10到EXTI15。假如PF10和PF11都连接了按键,而且都设置为EXTI,那么按这两个按键都会触发同一个制止服务函数。因此,我们必要在函数内部举行判定,确定是哪个EXTI线触发了制止。
流程图:
     怎样判定EXTI线

我们可以通过查抄EXTI的挂起寄存器(PR)来判定是哪个EXTI线触发了制止。这个寄存器的每一位对应一个制止的标记位。
流程图:
     示例代码

下面是怎样判定EXTI线的示例代码:
  1. void EXTI15_10_IRQHandler(void) {
  2.     if (EXTI->PR & EXTI_PR_PR10) {  // 检查是否是EXTI10触发
  3.         EXTI->PR = EXTI_PR_PR10;    // 清除EXTI10的中断标志位
  4.         // 执行EXTI10对应的操作
  5.     }
  6.     if (EXTI->PR & EXTI_PR_PR11) {  // 检查是否是EXTI11触发
  7.         EXTI->PR = EXTI_PR_PR11;    // 清除EXTI11的中断标志位
  8.         // 执行EXTI11对应的操作
  9.     }
  10.     // 以此类推,为其他EXTI线添加判断和处理逻辑
  11. }
复制代码
总结

好了,同砚们,今天我们补充了制止服务函数的知识,特别是关于怎样判定是哪个EXTI线触发了制止。这是嵌入式开发中非常紧张的一个知识点,希望这次的讲解可以大概资助你们更好地明确和应用这些概念。

以上就是我们今天复习的内容,假如你有任何疑问,或者想要进一步探讨,接待在批评区给我留言。记得点赞和关注,如许你就不会错过更多的嵌入式开发知识和技巧。下次见!
14 EXTI HAL库工程创建到完成LED GPIO的设置:STM32项目实战

大家好,今天我们来聊聊怎样使用STM32的HAL库来创建一个工程,并完成LED GPIO的设置。这是一个非常实用的教程,得当那些已经有一些基础,但想要深入了解HAL库使用的同砚。
创建HAL库工程

起首,我们要打开STM32CubeMX来创建一个新的项目。
流程图:
     选择芯片型号

在创建项目时,我们必要选择精确的芯片型号。假如你之前有收藏过芯片型号,可以直接从收藏夹中选择。
流程图:
     设置项目

接下来,我们必要设置项目的一些根本参数,比如时钟源(HSE)和启动模式(SW)。
流程图:
     设置时钟源和启动模式

确保时钟源设置为外部晶体振荡器(HSE),启动模式设置为软件(SW),这对于后续的程序下载和运行至关紧张。
流程图:
     设置GPIO

现在,我们要设置GPIO,特别是用于控制LED的引脚。
流程图:
     设置LED引脚

我们必要将PA0、PA1和PA8这三个引脚设置为GPIO输出模式,并设置为默认高电平、无上下拉、最高速度,并给它们分别添加标签LED1、LED2和LED3。
流程图:
     示例代码

下面是设置LED引脚的示例代码:
  1. /* LED1 */
  2. GPIO_InitTypeDef GPIO_InitStruct = {0};
  3. GPIO_InitStruct.Pin = GPIO_PIN_0;
  4. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  5. GPIO_InitStruct.Pull = GPIO_NOPULL;
  6. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  7. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  8. /* LED2 */
  9. GPIO_InitStruct.Pin = GPIO_PIN_1;
  10. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  11. /* LED3 */
  12. GPIO_InitStruct.Pin = GPIO_PIN_8;
  13. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码
总结

好了,同砚们,今天我们学习了怎样使用STM32的HAL库来创建一个工程,并完成了LED GPIO的设置。这是一个非常实用的技能,希望这次的讲解可以大概资助你们更好地明确和应用STM32的HAL库。

以上就是我们今天复习的内容,假如你有任何疑问,或者想要进一步探讨,接待在批评区给我留言。记得点赞和关注,如许你就不会错过更多的嵌入式开发知识和技巧。下次见!
15 完成EXTI HAL的设置:STM32 HAL库项目实战

大家好,今天我们来聊聊怎样在STM32项目中完成EXTI(外部制止)的HAL库设置。这是一个非常实用的步骤,得当那些已经有一些基础,但想要深入了解HAL库使用的同砚。
创建HAL库工程

起首,我们要打开STM32CubeMX来创建一个新的项目。
流程图:
     选择芯片型号

在创建项目时,我们必要选择精确的芯片型号。假如你之前有收藏过芯片型号,可以直接从收藏夹中选择。
流程图:
     设置项目

接下来,我们必要设置项目的一些根本参数,比如时钟源(HSE)和启动模式(SW)。
流程图:
     设置GPIO

现在,我们要设置GPIO,特别是用于控制LED的引脚。
流程图:
     设置LED引脚

我们必要将PA0、PA1和PA8这三个引脚设置为GPIO输出模式,并设置为默认高电平、无上下拉、最高速度,并给它们分别添加标签LED1、LED2和LED3。
流程图:
     设置EXTI

接下来,我们要设置PF10这个引脚为外部制止模式。
流程图:
     设置触发方式和标签

我们选择外部制止模式,上风险触发,并添加标签“K”。
流程图:
  1. graph LR
  2.     A[设置触发方式] --> B[上风险触发]
  3.     B --> C[添加标签"K"]
复制代码
设置NVIC

最后,我们必要设置NVIC(嵌套向量制止控制器)。
流程图:
     设置优先级和启用制止

我们设置EXTI的优先级,并启用制止。
总结

好了,同砚们,今天我们学习了怎样在STM32项目中完成EXTI的HAL库设置。这是一个非常实用的技能,希望这次的讲解可以大概资助你们更好地明确和应用STM32的HAL库。

以上就是我们今天复习的内容,假如你有任何疑问,或者想要进一步探讨,接待在批评区给我留言。记得点赞和关注,如许你就不会错过更多的嵌入式开发知识和技巧。下次见!
16 HAL库的制止服务函数的特点:深入解析

大家好,今天我们来深入探讨一下HAL库中制止服务函数的特点。这对于我们明确和使用STM32的HAL库举行制止处理非常紧张。
打开项目和主函数

起首,我们必要打开我们的项目。在MDK-ARM中,我们通常通过右键的方式打开项目,并找到我们的主函数。主函数中会包含一些核心逻辑。
流程图:
     制止服务函数的位置

在HAL库中,制止服务函数并不在每个外设的初始化函数中。这是因为HAL库将EXTI视为GPIO的附属功能。
流程图:
     GPIO和EXTI的初始化

在HAL库中,GPIO的初始化函数已经包含了PF10的相干操作。这是因为PF10被设置为EXTI输入。
流程图:
     NVIC设置

在HAL库中,NVIC的设置也是主动完成的。假如我们必要修改优先级,可以在NVIC设置中举行设置。
流程图:
     编写制止服务函数

在HAL库中,制止服务函数位于stm32f1xx_it.c文件中。这个文件包含了所有制止服务函数的框架。
流程图:
     示例代码

下面是在stm32f1xx_it.c文件中编写制止服务函数的示例:
  1. void EXTI15_10_IRQHandler(void) {
  2.     HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10);
  3. }
复制代码
HAL库提供的制止处理函数

HAL库提供了一个制止处理函数HAL_GPIO_EXTI_IRQHandler(),我们必要在制止服务函数中调用这个函数。
流程图:
  1. graph LR
  2.     A[中断服务函数] --> B[调用HAL库中断处理函数]
  3.     B --> C[HAL_GPIO_EXTI_IRQHandler()]
复制代码
总结

好了,同砚们,今天我们学习了HAL库中制止服务函数的特点。我们了解了制止服务函数的位置,GPIO和EXTI的初始化,NVIC的设置,以及怎样在HAL库中编写制止服务函数。这些都是嵌入式开发中非常紧张的知识点,希望这次的讲解可以大概资助你们更好地明确和应用STM32的HAL库。

以上就是我们今天复习的内容,假如你有任何疑问,或者想要进一步探讨,接待在批评区给我留言。记得点赞和关注,如许你就不会错过更多的嵌入式开发知识和技巧。下次见!
17 HAL库文件关系和HAL制止源码的阅读:深入分析

大家好,今天我们来深入探讨一下HAL库中的文件关系,以及怎样阅读HAL制止的源码。这对于我们明确和使用STM32的HAL库举行制止处理非常紧张。
HAL库文件关系

起首,我们来搞清楚HAL库中的文件关系。在MDK-ARM项目中,我们通常有以下几个紧张的文件夹:
流程图:
     阅读HAL制止源码

接下来,我们来看怎样阅读HAL制止的源码。制止服务函数(ISR)通常非常简单,它们只是调用了HAL库提供的制止处理函数。
流程图:
     示例代码

下面是制止服务函数的示例代码:
  1. void EXTI15_10_IRQHandler(void) {
  2.     HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10);
  3. }
复制代码
在这个例子中,我们可以看到制止服务函数只是调用了HAL_GPIO_EXTI_IRQHandler()函数,并将GPIO_PIN_10作为参数传递。
明确宏和函数

在HAL库中,我们经常看到一些看起来像函数但实际上是宏的代码。这些宏通常用于简化代码和进步效率。
流程图:
     示例宏

  1. #define __HAL_GPIO_EXTI_GET_IT(__PIN__) ((__EXTI->PR & (__PIN__)) ? SET : RESET)
复制代码
这个宏用于查抄指定的GPIO引脚是否触发了制止。
打扫制止标记位

在HAL库中,打扫制止标记位的操作也非常紧张。这通常在制止处理函数中完成。
流程图:
     示例代码

  1. EXTI->PR = __PIN__;
复制代码
这行代码打扫了指定引脚的制止标记位。
总结

好了,同砚们,今天我们学习了HAL库中的文件关系,以及怎样阅读HAL制止的源码。我们了解了制止服务函数的简单性,宏的界说,以及怎样在制止处理函数中打扫制止标记位。这些都是嵌入式开发中非常紧张的知识点,希望这次的讲解可以大概资助你们更好地明确和应用STM32的HAL库。

以上就是我们今天复习的内容,假如你有任何疑问,或者想要进一步探讨,接待在批评区给我留言。记得点赞和关注,如许你就不会错过更多的嵌入式开发知识和技巧。下次见!
18 使用HAL库完成按键翻转灯:STM32实践指南

大家好,今天我们来聊聊怎样使用STM32的HAL库来完成一个简单的任务——通过按键翻转LED灯的状态。这是一个非常基础但实用的嵌入式开发项目,得当初学者学习和实践。
编写制止服务函数

起首,我们必要编写制止服务函数。这个函数会在每次按键制止发生时被调用。
流程图:
     示例代码

  1. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
  2.     if (GPIO_Pin == GPIO_PIN_10) {
  3.         // 翻转LED状态的逻辑
  4.     }
  5. }
复制代码
在这个示例中,我们查抄是否是特定的GPIO引脚(例如PF10)触发了制止,然后实行相应的操作。
翻转LED状态

接下来,我们必要编写翻转LED状态的逻辑。这通常涉及到读取GPIO的状态,然后根据状态翻转LED。
流程图:
     示例代码

  1. HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0); // 翻转PA0引脚的LED状态
复制代码
这行代码会翻转连接在PA0上的LED的状态。
软件消抖

由于按键可能会产生抖动,我们必要在代码中实现软件消抖。这通常通过延时来实现。
流程图:
     示例代码

  1. HAL_Delay(20); // 延时20毫秒进行消抖
  2. if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_10) == GPIO_PIN_SET) {
  3.     // 执行翻转LED的操作
  4. }
复制代码
这段代码起首延时20毫秒,然后查抄按键是否仍然被按下,假如按下,则实行翻转LED的操作。
编译和烧录

最后,我们必要编译代码并将其烧录到STM32芯片中。
流程图:
     总结

好了,同砚们,今天我们学习了怎样使用STM32的HAL库来完成按键翻转LED灯的任务。我们了解了怎样编写制止服务函数,怎样翻转LED状态,以及怎样实现软件消抖。这些都是嵌入式开发中非常紧张的知识点,希望这次的讲解可以大概资助你们更好地明确和应用STM32的HAL库。

以上就是我们今天复习的内容,假如你有任何疑问,或者想要进一步探讨,接待在批评区给我留言。记得点赞和关注,如许你就不会错过更多的嵌入式开发知识和技巧。下次见!
19 宏是怎么来的:STM32 HAL库宏界说解析

大家好,今天我们来聊聊在STM32 HAL库中,那些宏是怎么来的。这对于我们明确和使用HAL库中的宏非常有资助。
宏的来源

起首,我们来办理一个常见的疑问:这些宏是怎么来的?其实,这些宏大多数都来源于我们在STM32CubeMX中对GPIO的标签设置。
流程图:
     标签与宏的关系

当我们在STM32CubeMX中给GPIO引脚设置标签后,它会实行两个操作:一是将这些标签(user labels)全部放在.h文件中界说;二是为每个标签生成相干的宏。
流程图:
     LED宏的例子

以LED为例,我们在STM32CubeMX中可能给PA0引脚设置了标签“LED1”。然后,HAL库会为我们生成两个宏:
这两个宏联合起来就代表了GPIOA, GPIO_PIN_0,即PA0。
流程图:
     按键宏的例子

同样地,假如我们给一个按键设置了标签“K”,HAL库也会为我们生成雷同的宏。
流程图:
     总结

通过今天的讲解,我们了解了STM32 HAL库中宏的来源和它们是怎样与我们在STM32CubeMX中的设置相干联的。这些宏大大简化了我们的编程工作,使得代码更加清楚和易于管理。

以上就是我们今天复习的内容,假如你有任何疑问,或者想要进一步探讨,接待在批评区给我留言。记得点赞和关注,如许你就不会错过更多的嵌入式开发知识和技巧。下次见!
20 EXTI回调函数里加if判定:制止差别EXTI污染

大家好,今天我们来讨论一下在STM32的HAL库中,为什么在EXTI回调函数里加上if判定是须要的,以及怎样制止差别EXTI之间的干扰。
EXTI回调函数的编写

在我们编写EXTI回调函数时,可能会遇到多个EXTI共用同一个回调函数的情况。这时,我们必要区分是哪个EXTI触发了回调。
流程图:
     为什么必要if判定

假设我们有两个EXTI,EXTI10和EXTI11,它们共用同一个回调函数。假如没有if判定,那么回调函数将无法区分是哪个EXTI被触发。
流程图:
     示例代码

  1. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
  2.     if (GPIO_Pin == GPIO_PIN_10) {
  3.         // 处理EXTI10的逻辑
  4.     } else if (GPIO_Pin == GPIO_PIN_11) {
  5.         // 处理EXTI11的逻辑
  6.     }
  7. }
复制代码
在这个示例中,我们通过if判定来区分是哪个EXTI被触发,并实行相应的逻辑。
怎样制止差别EXTI的干扰

为了制止差别EXTI之间的干扰,我们必要在回调函数中加入if判定,确保每个EXTI的逻辑只处理对应的EXTI。
流程图:
     示例代码

  1. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
  2.     if (GPIO_Pin == LED1_Pin) {
  3.         // 翻转LED1的状态
  4.         HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
  5.     } else if (GPIO_Pin == K_Pin) {
  6.         // 处理按键的逻辑
  7.     }
  8. }
复制代码
在这个示例中,我们通过比力GPIO_Pin和预界说的宏来区分是哪个EXTI被触发,并实行相应的操作。
总结

通过今天的讲解,我们了解了在STM32的HAL库中,为什么在EXTI回调函数里加上if判定是须要的,以及怎样制止差别EXTI之间的干扰。这对于我们编写更稳定、更可靠的制止服务程序非常紧张。

以上就是我们今天复习的内容,假如你有任何疑问,或者想要进一步探讨,接待在批评区给我留言。记得点赞和关注,如许你就不会错过更多的嵌入式开发知识和技巧。下次见!
21 标准库的Start目次下文件都是做啥的:深入解析

大家好,今天我们来深入探讨一下STM32标准库中Start目次下的文件都是做什么的。这对于我们明确STM32项目的布局和启动过程非常紧张。
启动文件的作用

起首,我们来聊聊启动文件。启动文件(startup.s)是STM32项目中不可或缺的一部分,它负责初始化内存、设置制止向量表,以及在主函数实行前插入一些须要的函数。
流程图:
     系统时钟设置

接下来,我们来看系统时钟设置。在HAL库项目中,我们通常在CubeMX中设置时钟,但在寄存器版本项目中,这个设置是在那里完成的呢?
流程图:
     system_stm32f10x.c文件

在Start目次下,有一个system_stm32f10x.c文件,这个文件提供了系统的初始化函数SystemInit(),它在复位后、主函数之前被调用。
流程图:
     示例代码

  1. void SystemInit(void) {
  2.     // 设置系统时钟源
  3.     // 配置AHB、APB分频系数
  4.     // 配置PLL
  5. }
复制代码
这个函数会设置系统时钟源,包罗内部时钟源和外部时钟源,以及AHB、APB的分频系数和PLL设置。
CMSIS文件的作用

最后,我们来聊聊CMSIS文件。CMSIS是Cortex Microcontroller Software Interface Standard的缩写,它提供了一套标准,使得我们可以更容易地在差别的Cortex-M内核之间移植代码。
流程图:
     总结

通过今天的讲解,我们了解了STM32标准库中Start目次下的文件的作用,包罗启动文件、系统时钟设置、system_stm32f10x.c文件以及CMSIS文件。这些文件共同协作,确保了STM32项目的顺利启动和运行。

以上就是我们今天复习的内容,假如你有任何疑问,或者想要进一步探讨,接待在批评区给我留言。记得点赞和关注,如许你就不会错过更多的嵌入式开发知识和技巧。下次见!
22 SysTick制止的优先级为什么一定要比EXTI制止的优先级高

大家好,今天我们来探讨一个在STM32开发中非常紧张的问题:为什么SysTick制止的优先级一定要比外部制止(EXTI)的优先级高。这个问题直接关系到我们的程序能否正常运行。
SysTick制止和EXTI制止

起首,我们来回顾一下SysTick制止和外部制止(EXTI)的根本概念。
SysTick制止

外部制止(EXTI)

流程图:
  1. graph LR
  2.     A[SysTick中断] --> B[系统时基服务]
  3.     C[外部中断(EXTI)] --> D[响应外部事件]
复制代码
为什么SysTick优先级要高

在设置NVIC时,我们通常会设置SysTick制止的优先级高于外部制止。这是为什么呢?
流程图:
     代码示例

下面是设置NVIC的代码示例:
  1. // 设置SysTick中断优先级
  2. HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  3. // 设置外部中断优先级
  4. HAL_NVIC_SetPriority(EXTI15_10_IRQn, 1, 0);
复制代码
在这个例子中,SysTick制止的优先级被设置为0,而外部制止的优先级被设置为1,确保了SysTick的优先级高于外部制止。
总结

通过今天的讲解,我们了解了为什么SysTick制止的优先级一定要比外部制止的优先级高。这不仅包管了系统时钟的精确性,还制止了可能的死锁情况。这是嵌入式开发中一个非常紧张的知识点,希望可以大概资助大家更好地明确和应用。

以上就是我们今天复习的内容,假如你有任何疑问,或者想要进一步探讨,接待在批评区给我留言。记得点赞和关注,如许你就不会错过更多的嵌入式开发知识和技巧。下次见!
23 作业要求:通过按键控制流水灯方向

大家好,今天我们来重新部署一下作业。这个作业是基于我们之前学到的知识,特别是关于STM32的按键和流水灯控制。作业的要求非常简单,但也非常实用。
作业内容

本次作业的核心是使用你开发板上的按键(SW5)来控制流水灯的方向。
初始状态


按键操作


流程图:
     技能要求


示例代码

以下是实现上述功能的示例代码:
  1. // 假设LED1到LED3分别连接在PA0到PA2
  2. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
  3.     if (GPIO_Pin == GPIO_PIN_5) { // 假设SW5连接在PA5
  4.         static uint8_t direction = 0; // 0表示从LED1到LED3,1表示从LED3到LED1
  5.         direction = !direction; // 切换方向
  6.         if (direction) {
  7.             // 从LED3到LED1
  8.             HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);
  9.             HAL_Delay(100);
  10.             HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
  11.             HAL_Delay(100);
  12.             HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
  13.             HAL_Delay(100);
  14.             HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
  15.         } else {
  16.             // 从LED1到LED3
  17.             HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
  18.             HAL_Delay(100);
  19.             HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
  20.             HAL_Delay(100);
  21.             HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
  22.             HAL_Delay(100);
  23.             HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);
  24.         }
  25.     }
  26. }
复制代码
总结

这个作业的目的是让你们实践怎样使用STM32的按键来控制流水灯的方向。希望你们可以大概通过这个作业加深对STM32编程的明确。

以上就是我们今天复习的内容,假如你有任何疑问,或者想要进一步探讨,接待在批评区给我留言。记得点赞和关注,如许你就不会错过更多的嵌入式开发知识和技巧。下次见!
24 串口的并行穿行、单工、半双工、全双工:深入解析

大家好,今天我们来深入探讨一下串口通信中的一些根本概念,包罗并行通信、串行通信,以及单工、半双工和全双工的通信方式。这些都是嵌入式开发中非常紧张的知识点。
并行通信与串行通信

起首,我们来复习一下并行通信和串行通信的区别。

流程图:
     串行通信的硬件要求

串行通信中,我们必要一个特殊的硬件——计数器,它负责把数据一位一位地传出去。
流程图:
     并行通信的限制

虽然理论上并行通信速度比串行快,但实际上它受到间隔的限制,因为并行通信的数据线多,容易产生干扰。
流程图:
     串行通信的优势

串行通信的优势在于简化了布线,得当远间隔传输,成本低,抗干扰本领强。
流程图:
     单工、半双工与全双工

接下来,我们来讨论一下单工、半双工和全双工的概念。

流程图:
     同步与异步通信

最后,我们来区分一下同步和异步通信。

流程图:
     总结

通过今天的讲解,我们了解了串行通信和并行通信的区别,以及单工、半双工和全双工的通信方式。我们还探讨了同步和异步通信的特点。这些都是嵌入式开发中非常紧张的知识点,希望可以大概资助大家更好地明确和应用这些概念。

以上就是我们今天复习的内容,假如你有任何疑问,或者想要进一步探讨,接待在批评区给我留言。记得点赞和关注,如许你就不会错过更多的嵌入式开发知识和技巧。下次见!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4