攻击jsp网站,网站空间更换,朔州网站建设收费,如何进行网站维护前言
本篇文章属于stm32单片机#xff08;以下简称单片机#xff09;的学习笔记#xff0c;来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记#xff0c;只能做参考#xff0c;细节方面建议观看视频#xff0c;肯定受益匪浅。
STM32入门教程-2023版 细…前言
本篇文章属于stm32单片机以下简称单片机的学习笔记来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记只能做参考细节方面建议观看视频肯定受益匪浅。
STM32入门教程-2023版 细致讲解 中文字幕_哔哩哔哩_bilibili
一、编码器接口简介 二、正交编码器 检测一个相的边沿然后再检测另一个相的电平状态得到编码器的正转还是反转 三、编码器接口基本结构 GPIO口借用的就是输入捕获的通道1和通道2 产生TIFP1和TI2FP2后就接到编码器接口后续输入捕获的结构与它无关 四、工作模式 仅在TI1计数即仅检测TI1的边沿和TI2的电平状态不检测TI2的边沿 在TI1和TI2上计数就是同时检测TI1和TI2的边沿 一般使用在TI1和TI2上计数因为这个精度高 一个电平不变另一个电平持续变化就是产生了毛刺这次计数器就会执行加减加减的操作最终的计数值不会变化上图是两个信号都不反相 上图的TI1通过极性选择后反相了给编码器的信号应该对TI1信号取反再查表 五、实例编码器接口测速 Encoder.c 输入捕获通道使用结构体初始化函数其它参数不需要只需要通道和滤波即可 #include stm32f10x.h // Device headervoid Encoder_Init(void)
{//开启内部时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//GPIO口初始化RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin GPIO_Pin_6 | GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA, GPIO_InitStructure);//时基单元初始化TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_TimeBaseInitStructure.TIM_ClockDivision TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode TIM_CounterMode_Up;TIM_TimeBaseInitStructure.TIM_Period 65536 - 1; //ARRTIM_TimeBaseInitStructure.TIM_Prescaler 1 - 1; //PSCTIM_TimeBaseInitStructure.TIM_RepetitionCounter 0;TIM_TimeBaseInit(TIM3, TIM_TimeBaseInitStructure);//输入捕获通道初始化TIM_ICInitTypeDef TIM_ICInitStructure;TIM_ICStructInit(TIM_ICInitStructure);TIM_ICInitStructure.TIM_Channel TIM_Channel_1;TIM_ICInitStructure.TIM_ICFilter 0xF;TIM_ICInit(TIM3, TIM_ICInitStructure);TIM_ICInitStructure.TIM_Channel TIM_Channel_2;TIM_ICInitStructure.TIM_ICFilter 0xF;TIM_ICInit(TIM3, TIM_ICInitStructure);//配置编码器接口TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);//使能定时器TIM_Cmd(TIM3, ENABLE);
}int16_t Encoder_Get(void)
{int16_t Temp;Temp TIM_GetCounter(TIM3);TIM_SetCounter(TIM3, 0);return Temp;
}main.c 使用定时器每隔1s来取计数器的值1s即为闸门时间 #include stm32f10x.h // Device header
#include Delay.h
#include OLED.h
#include Timer.h
#include Encoder.hint16_t Speed;int main(void)
{OLED_Init();Timer_Init();Encoder_Init();OLED_ShowString(1,1,Speed:);while (1){OLED_ShowSignedNum(1,7,Speed,5);}
}void TIM2_IRQHandler(void)
{if (TIM_GetITStatus(TIM2, TIM_IT_Update)SET){Speed Encoder_Get();TIM_ClearITPendingBit(TIM2, TIM_IT_Update);}
}