当前位置: 首页 > news >正文

[5-2] 对射式红外传感器计次旋转编码器计次 江协科技学习笔记(38个知识点)

1、

2、

3、这些缩写通常出现在嵌入式系统或微控制器的上下文中,它们各自有不同的功能:

• RCC:Reset and Clock Control(复位和时钟控制)。它负责管理微控制器的时钟系统,包括时钟源的选择、时钟频率的设置以及复位控制等。

• GPIO:General Purpose Input/Output(通用输入输出)。这是微控制器上的一组可编程引脚,可以被配置为输入或输出模式,用于与外部设备进行通信。

• AFIO:Alternate Function Input/Output(备用功能输入输出)。在一些微控制器中,它用于配置引脚的备用功能,例如将引脚用作特定的外设接口,如USART、SPI、I2C等。

• EXTI:External Interrupt/Event Controller(外部中断/事件控制器)。它用于管理外部中断和事件,允许微控制器响应外部信号,如按钮按下或传感器输入。

• NVIC:Nested Vectored Interrupt Controller(嵌套向量中断控制器)。它是一个中断控制器,用于管理微控制器的中断优先级和中断服务例程的调用。

这些组件在微控制器的设计中非常重要,因为它们提供了与外部世界交互的基本机制,以及确保系统能够正确响应各种事件和中断。

4

5

6

7

8

9

10

11

12

13

14在嵌入式系统或软件开发中,"config" 通常指的是配置文件或配置过程。

15

16

17

• ENABLE通常指开启某个功能或外设,使其可以工作。比如,使能一个GPIO端口或启动一个定时器。

• DISABLE则指关闭某个功能或外设,使其停止工作。比如,禁用一个GPIO端口或停止一个定时器。

这两个操作通常涉及到设置或清除特定的寄存器位。

18

• 中断模式:当事件发生时,微控制器会暂停当前工作,去处理这个事件,处理完后再回到原来工作的地方继续。

• 事件模式:当事件发生时,微控制器不会暂停当前工作,而是发送一个信号,让另一个系统部分去处理这个事件。

在STM32微控制器中,中断和事件的优先级处理如下:

• 中断优先级:

• 中断有优先级的概念,可以设置不同的优先级。

• 高优先级的中断可以打断低优先级的中断。

• 优先级可以通过NVIC(嵌套向量中断控制器)进行配置。

• 事件优先级:

• 事件模式本身不涉及优先级的概念,因为它不直接触发中断。

• 事件通常用于触发其他操作,如启动DMA传输,而不涉及中断服务例程。

总结:

• 中断有优先级,可以配置不同优先级来控制中断的处理顺序。

• 事件模式没有优先级,它更多用于触发其他操作,而不是直接处理事件。

19

20

22

23

24

好的,以下是GPIO、AFIO、EXTI和NVIC的中文介绍以及它们的用途:

• GPIO(通用输入输出):

• 是什么:GPIO是微控制器上的一组多功能引脚,可以被配置为输入或输出模式。

• 有什么用:用于与外部设备进行数字信号的交互,如读取按钮状态、控制LED灯等。

• AFIO(备用功能输入输出):

• 是什么:AFIO是STM32微控制器中用于配置引脚备用功能的模块。

• 有什么用:可以将GPIO引脚映射到特定的外设功能,如USART、SPI、I2C等,使得同一个引脚可以用于不同的功能。

• EXTI(外部中断/事件控制器):

• 是什么:EXTI是用于管理外部中断和事件的模块。

• 有什么用:可以检测外部引脚上的信号变化(如上升沿、下降沿),并生成中断或事件信号,触发相应的处理程序。

• NVIC(嵌套向量中断控制器):

• 是什么:NVIC是STM32微控制器中的中断控制器,用于管理中断和异常。

• 有什么用:负责中断的优先级管理、中断使能和禁用,以及在中断发生时进行任务切换,确保高优先级的中断能够及时得到处理。

这些模块共同协作,使得STM32微控制器能够有效地处理外部信号和中断,实现与外部设备的交互和控制。

25

26

27

28

29

30

31

32

33

/*** 函    数:旋转编码器初始化* 参    数:无* 返 回 值:无*/void Encoder_Init(void){/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);                //开启GPIOB的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);                //开启AFIO的时钟,外部中断必须开启AFIO的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);                                                //将PB0和PB1引脚初始化为上拉输入/*AFIO选择中断引脚*/GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0);//将外部中断的0号线映射到GPIOB,即选择PB0为外部中断引脚GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource1);//将外部中断的1号线映射到GPIOB,即选择PB1为外部中断引脚/*EXTI初始化*/EXTI_InitTypeDef EXTI_InitStructure;                                                //定义结构体变量EXTI_InitStructure.EXTI_Line = EXTI_Line0 | EXTI_Line1;                //选择配置外部中断的0号线和1号线EXTI_InitStructure.EXTI_LineCmd = ENABLE;                                        //指定外部中断线使能EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                        //指定外部中断线为中断模式EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;                //指定外部中断线为下降沿触发EXTI_Init(&EXTI_InitStructure);                                                                //将结构体变量交给EXTI_Init,配置EXTI外设/*NVIC中断分组*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                                //配置NVIC为分组2//即抢占优先级范围:0~3,响应优先级范围:0~3//此分组配置在整个工程中仅需调用一次//若有多个中断,可以把此代码放在main函数内,while循环之前//若调用多次配置分组的代码,则后执行的配置会覆盖先执行的配置/*NVIC配置*/NVIC_InitTypeDef NVIC_InitStructure;                                                //定义结构体变量NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;                        //选择配置NVIC的EXTI0线NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                //指定NVIC线路使能NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;        //指定NVIC线路的抢占优先级为1NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                        //指定NVIC线路的响应优先级为1NVIC_Init(&NVIC_InitStructure);                                                                //将结构体变量交给NVIC_Init,配置NVIC外设NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;                        //选择配置NVIC的EXTI1线NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                //指定NVIC线路使能NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;        //指定NVIC线路的抢占优先级为1NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;                        //指定NVIC线路的响应优先级为2NVIC_Init(&NVIC_InitStructure);                                                                //将结构体变量交给NVIC_Init,配置NVIC外设}/*** 函    数:旋转编码器获取增量值* 参    数:无* 返 回 值:自上此调用此函数后,旋转编码器的增量值*/int16_t Encoder_Get(void){/*使用Temp变量作为中继,目的是返回Encoder_Count后将其清零*//*在这里,也可以直接返回Encoder_Count但这样就不是获取增量值的操作方法了也可以实现功能,只是思路不一样*/int16_t Temp;Temp = Encoder_Count;Encoder_Count = 0;return Temp;}

34

35

36

37

38

38

相关文章:

  • XL32F001国产低成本单片机,24MHz主频,24KB Flash,3KB SRAM
  • 【探寻C++之旅】第十三章:红黑树
  • Python Cookbook-7.8 使用 Berkeley DB 数据库
  • TensorFlow 2.x入门实战:从零基础到图像分类项目
  • 物流无人机自动化装卸技术解析!
  • Python在自动驾驶实时数据处理中的应用:让AI驾驶更智能、更高效
  • Python奶茶系统
  • 能耗优化新引擎:EIOT平台助力企业降本增效
  • Redis实现分布式获取全局唯一自增ID的案例。
  • 二极管的动态特性
  • 如何设置内网映射端口到外网访问?哪些软件可以进行端口映射?
  • 多级路由器如何避免IP冲突
  • Go:简洁高效,构建现代应用的利器
  • VR博物馆,足不出户云逛展
  • Spring Security(笔记)
  • OPCUA,OPCDA与MODBUS学习笔记
  • P2392 kkksc03考前临时抱佛脚
  • 【C++ Qt】多元素控件(ListWidget、TableWidget、TreeWidget)
  • PPT画图导出为PDF格式
  • 15 个 Azure DevOps 场景化面试问题及解答
  • 见微知沪|优化营商环境,上海为何要当“细节控”自我加压?
  • 公募基金行业迎系统性变革:基金公司业绩差必须少收费
  • 印观察|印巴战火与莫迪政府三重冒险:南亚火药桶已至临界点
  • 央行将增加3000亿元科技创新和技术改造再贷款额度
  • 俄军击落多架企图攻击莫斯科的无人机
  • 消费持续升温,这个“五一”假期有何新亮点?