当前位置: 首页 > 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

http://www.xdnf.cn/news/334027.html

相关文章:

  • 服务器数据恢复—Linux操作系统服务器意外断电导致部分文件丢失的数据恢复
  • 力扣刷题Day 41:除自身以外数组的乘积(238)
  • 【Linux】Linux工具(1)
  • 基于Centos7的DHCP服务器搭建
  • 【MySQL】存储引擎 - MyISAM详解
  • ARM 芯片上移植 Ubuntu 操作系统详细步骤
  • 云原生架构下的企业数字化转型之路:理念、挑战与落地实战
  • 2. Windows+Msys2+QGis3.36.1编译运行
  • 【Python开源】深度解析:一款高效音频封面批量删除工具的设计与实现
  • Axios替代品Alova
  • nutui-uniapp项目:弹框、弹出层的组件选择问题(组件对比)
  • 基于腾讯云MCP广场的AI自动化实践:爬取小红书热门话题
  • STM32系统定时器以及微秒延时函数分析
  • 电池自动分选机:新能源时代的“质检卫士”
  • Excel学习笔记
  • 蓝桥杯第十六届c组c++题目及个人理解
  • C++入门(下)--《Hello C++ World!》(2)(C/C++)
  • 【C++】手搓一个STL风格的string容器
  • 【开源解析】基于Python的智能文件备份工具开发实战:从定时备份到托盘监控
  • 键盘固件刷写详解:Bootloader
  • AppInventor2如何实现写文件不覆盖,而是在文件尾部追加?
  • 使用 React 实现语音识别并转换功能
  • Java游戏服务器开发流水账(2)开发中Maven的管理
  • CROSS 技术全解析:边缘计算如何成为行业价值新引擎
  • Linux下使用openssh搭建sftp服务
  • SQL:MySQL函数:字符串函数
  • 金仓数据库征文-金仓KES数据同步优化实践:逻辑解码与增量同步
  • 深入理解负载均衡:传输层与应用层的原理与实战
  • KRaft (Kafka 4.0) 集群配置指南(超简单,脱离 ZooKeeper 集群)还包含了简化测试指令的脚本!!!
  • WSL部署CosyVoice