一、STM32
5.2 - 对射式红外传感器计次&旋转编码器计次
1.Keil 5程序步骤与注意事项:
(1)配置头文件&初始化函数;
(2)外部中断的配置:配置RCC,打开外设时钟 —— 配置GPIO,打开端口为输入模式 —— 配置AFIO,选择所用的GPIO,连接至EXTI —— 配置EXTI,选择边沿触发方式,以及触发响应方式 —— 配置NVIC,选择优先级 —— 中断信号通过NVIC进入CPU,执行中断程序;
(3)内核外设无需开启时钟!
2.初始化GPIOX:
(1)GPIO_MODE可选择浮空、上拉或下拉输入模式;
(2)GPIO_PIN根据面包板上的电路接口来输入;
(3)GPIO_SPEED无特殊要求常见使用50MHz。
注:关于GPIO详细介绍可浏览“STM32单片机学习记录(11.10)”
3.配置AFIO:
(1)GPIO_AFIODeInit 函数:用于清楚原AFIO外设;
(2)GPIO_PinLockConfig 函数:用于锁定GPIO配置,防止意外更改;
(3)GPIO_EventOutputConfig & GPIO_EventOutputCmd 函数:用于配置AFIO事件输出功能;
(4)GPIO_PinRemapConfig 函数:用于进行引脚重映射,(映射方式,状态);
(5)GPIO_EXTILineConfig 函数:用于配置AFIO数据选择器,选择中断引脚;
(6)GPlO_ETH_MedialnterfaceConfig 函数:以太网外设。
(7)以上以GPIO为开头的函数控制的是AFIO中断。
4.配置EXTI:
(1)EXTI_DeInit & EXTI_Init & EXTI_StructInit 函数:用于初始化EXTI,用法与GPIO初始化一致;
(2)EXTI_GenerateSWInterrupt 函数:用于软件触发外部中断,参数给软件触发中段线(若只需外部引脚触发,则无需该函数);
(3)FlagStatus EXTI_GetFlagStatus & EXTI_ClearFlag 函数:读写寄存器函数,分别用于查询和清楚寄存器内数据(用于主程序);
(4)ITStatus_EXTI_GetITStatus & EXTI_ClearITPendingBit 函数:与上面两个函数类似,但只用于读写与中断有关的标志位并做出判断(用于中断函数)。
5.关于EXTI部分主程序:
(1)先定义EXTI_InitStructure变量名,接下来对其结构体变量进行定义;
(2)EXTI_Line 变量:配置所需中断线;
(3)EXTI_LineCmd 变量:指定选择的中断线的新状态(Enable或Disable);
(4)EXTI_Mode 变量:指定外部中断线格式(中断模式Interrupt或时间模式Event);
(5)EXTI_Trigger 变量:指定触发方式(上升沿Rising、下降沿Falling或都触发Rising_Falling)。
6.配置NVIC:
(1)NVIC_PriorityGroupConfig 函数:用于分组中断;
(2)NVIC_Init 函数:根据结构体内指定的参数初始化NVIC;
(3)NVIC_SetVectorTable 函数:设置中断向量表;
(4)NVIC_SystemLPConfig 函数:系统低功耗设置。
7.最后找到对应的中断函数且自行构造计数变量函数即可。
8.切记在主函数和中断函数中同时调用OLED!可多使用变量和标志位,减少代码间耦合性,让各部分代码互相独立,让程序更加清晰。
6.1 - TIM定时中断简介
1.TIMER定时器:根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型,可以对输入的时钟进行计数,并在计数值达到设定值时触发中断,不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能。
2.定时中断基本结构:
6.2 - 定时器定时中断&定时器外部中断
1.程序步骤:
(1)RCC开启时钟——定时器基准时钟与外设时钟都会开启;
(2)选择时基单元时钟源(定时中断选择内部时钟源);
(3)配置时基单元(包括PSC预分频器、CNT计数器、ARR自动重装器);
(4)配置输出中断控制,允许更新中断输出到NVIC;
(5)配置NVIC,在NVIC中打开定时器中断通道,并分配一个优先级;
(6)运行控制,使能计数器,编写定时器中断函数。
2.关于TIM的函数
(1)TIM_TimeBaseInit 函数:时基单元初始化,用于配置时基单元;
(2)TIM_TimeBaseStructInit 函数:将结构体变量赋予默认值;
(3)TIM_Cmd 函数:计数器,用于运行控制;
(4)TIM_ITConfig 函数:使能中断输出信号,即为中断输出控制;
(5)TIM_XClockConfig 函数:选择内部、ITRx、ETR以及外部1、2时钟或不选择时钟;
(6)TIM_CounterModeConfig 函数:改变计数器计数模式;
(7)TIM_ARRPreloadConfig 函数:自动重装器预装功能配置;
以上为基础函数,更多相关函数可自行浏览函数库。
3.完成主程序后,别忘了用TIM_ClearlTPendingBit清除标志位!
4.用TIM_ClearFlag函数避免初始化后中断。
6.3 - TIM输出比较
1.OC(Output Compare)输出比较:输出比较可以通过比较CNT与CCR(捕获/比较寄存器)寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形,每个高级定时器和通用定时器都拥有4个输出比较通道,前3个通道额外拥有死区生成和互补输出的功能。
2.PWM(Pulse Width Modulation)脉冲宽度:调制在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速,LED亮度等领域。
3.PWM参数:频率=1/Ts,占空比=Ton/Ts,分辨率=占空比变化步距。
4.当CNT>=CCR时,输出模式控制器就会改变电平。当极性选择输入0时,电平不改变;输入1时,电平翻转。
5.输出比较模式如下图:
6.关于PWM的数值计算:PWM频率:Freq=CK PSC/(PSC+1)/(ARR + 1);PWM占空比:Duty=CCR/(ARR + 1);PWM分辨率:Reso=1/(ARR+1)。
7.舵机简介:舵机是一种根据输入PWM信号占空比来控制输出角度的装置,输入PWM信号要求:周期为20ms,高电平宽度为0.5ms~2.5ms。
8.直流电机及驱动简介:直流电机是一种将电能转换为机械能的装置,有两个电极,当电极正接时,电机正转,当电极反接时,电机反转。直流电机属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作。常见的TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制其转速和方向。
标签:NVIC,函数,TIM,中断,11.22,STM32,单片机,GPIO,EXTI From: https://blog.csdn.net/2402_86234774/article/details/143931934