哪个网站可有做投票搭建,动漫网页设计论文,阳江人才招聘网,送上门卤菜网站要怎么做目录
前言 一、硬件介绍
1.对射红外线传感器
2.旋转编码器
二、EXTI外部中断C编程
1.开启RCC时钟
2.配置GPIOK口初始化
3.配置AFIO
4.配置EXIT
5.配置NVIC
三、EXIT外部中断项目实操
1.对射红外传感器计数
2.选择编码器计数 前言 本期接着上一期的内容继续学习stm3…目录
前言 一、硬件介绍
1.对射红外线传感器
2.旋转编码器
二、EXTI外部中断C编程
1.开启RCC时钟
2.配置GPIOK口初始化
3.配置AFIO
4.配置EXIT
5.配置NVIC
三、EXIT外部中断项目实操
1.对射红外传感器计数
2.选择编码器计数 前言 本期接着上一期的内容继续学习stm32的外部中断系统上一期链接stm32入门-----EXTI外部中断上 ——理论篇-CSDN博客。本期的主要是进行实践操作stm32的外部中断分为两个部分红外线传感器进行计数和转动旋转编码器进行计数。视频[5-2] 对射式红外传感器计次旋转编码器计次_哔哩哔哩_bilibili 一、硬件介绍
1.对射红外线传感器 工作电压3.3V-5V 输出形式数字开关量D0输出(0 和 1)模拟输出A0引脚无效 使用方式 接好VCC和GND模块电源指示灯会亮模块槽中无遮挡时接收管导通模块DO输出低电平开关指示灯亮;遮挡时DO输出高电平开关指示灯灭。模块DO可与继电器相连组成限位开关等功能也可以与有源蜂鸣器模块相连组成报警器。DO输出接口可以与单片机I0口直接相连一般接外部中断检测传感器是否有遮档如用电机码盘则可检测电机的转速。 硬件电路
2.旋转编码器 旋转编码器用来测量位置、速度或旋转方向的装置当其旋转轴旋转时其输出端可以输出与旋转速度和方向对应的方波信号读取方波信号的频率和相位信息即可得知旋转轴的速度和方向类型机械触点式/霍尔传感器式/光栅式 硬件电路
这里可以看到旋转编码器有两个输出口分别是A和B口当没有进行旋转的时候此时两个输出口都会被拉升为高电平当逆时针转动的时候A口的电路与GND导通此时A口拉倒低电平输出为低电平但B处不变顺时针就刚好反过来。想了解详细可查看江协科技STM32——旋转编码器计次软件消抖_旋转编码器消抖-CSDN博客
二、EXTI外部中断C编程
我们可以用C语言的库函数来取调用这些外部中断实际上只需要按照上一期理论的知识去进行相关的初始化设置就行了。大体上分为5步。 EXIT外部中断结构图 1.开启RCC时钟 设置时钟包括GPIO口的时钟和AFIO的时钟GPIO的时钟我们前面学习GPIO口的时候就已经学习过了如果没有去指定开启GPIO的时钟那么这个GPIO口是无法使用的。同样的AFIO的时钟如果不开的话也是无法使用的。 对于EXIT外部中断这两个时钟都要开启GPIO是作为输入口二AFIO是作为中断引脚的选择口。这里我们就使用APB2外设的时钟
示例如下 // 1.开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);2.配置GPIOK口初始化
这个的我们之前就已经学习过了这里就不多讲了不过要注意的是配置GPIOK口的工作方式最好选择上拉输入或者下拉输入或者浮空输入以保证输入的电平是保持稳定的当且仅当外部硬件输入变化才产生变化。
示例如下
//2.配置GPIO口GPIO_InitTypeDef GPIO_initstruct;GPIO_initstruct.GPIO_ModeGPIO_Mode_IPU;//选择上拉输入GPIO_initstruct.GPIO_PinGPIO_Pin_14; //选用14号引脚GPIO_initstruct.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOB,GPIO_initstruct); //GPIOB口初始化
3.配置AFIO
这里要用到void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)这个函数这个函数是用来去配置AFIO不过这个函数的名称连AFIO都没出现反而出现了EXIT我觉得也挺奇怪的但是这个函数的内部是实际对AFIO进行操作的。
AFIO配置GPIO线路关系图如下 相关定义如下 示例如下
//3.配置AFIOGPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14); //AFIO打到GPIOB处的14号引脚
4.配置EXIT
配置EXIT包括配置工作方式中断模式还是事件模式、触发方式、以及配置外部中断的中断线路上面我们配置好了AFIO与GPIO之间的线路这里我们只需要去配置AFIO与EXIT之间的线路就行了。如下图所示 下图是EXIT在C语言中的结构体定义 代码的写法跟配置GPIO口的基本上是一模一样的示例如下
//4.配置EXTIEXTI_InitTypeDef EXTI_initstruct;//定义EXIT结构体EXTI_initstruct.EXTI_LineEXTI_Line14;//选择中断线这里选择外部中断14号线EXTI_initstruct.EXTI_LineCmdENABLE;//设置上面选择好的中断线是否使用进行使能操作这里是设置ENABLE进行使能EXTI_initstruct.EXTI_ModeEXTI_Mode_Interrupt;//配置模式中断模式还是事件模式这里选择中断模式EXTI_initstruct.EXTI_TriggerEXTI_Trigger_Falling;//选择触发方式上升沿触发还是下降沿触发等等这里选择下降沿触发EXTI_Init(EXTI_initstruct);//初始化
5.配置NVIC
配置NVIC包括配置优先级抢占优先级和响应优先级、EXIT通道也就是NVIC与上面配置好的EXIT之间的通道、分组情况。
NVIC是分为5组的不同的分组指定的抢占优先级和响应优先级的个数是不同的分组配置的注释如下 代码示例如下 //5.配置NVICNVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置分组可放到主函数去分NVIC_InitTypeDef NVIC_initstruct;//定义结构体NVIC_initstruct.NVIC_IRQChannel EXTI15_10_IRQn ; //选择通道EXTI通道EXTI15_10_IRQnNVIC_initstruct.NVIC_IRQChannelCmdENABLE;//指定上面通道是否开启,同理//由于当前只有一个中断优先级可以根据当前分组随便设置如果多个的话才涉及这个NVIC_initstruct.NVIC_IRQChannelPreemptionPriority1;//设置抢占优先级NVIC_initstruct.NVIC_IRQChannelSubPriority1;//设置响应优先级NVIC_Init(NVIC_initstruct);//初始化
三、EXIT外部中断项目实操
1.对射红外传感器计数
先看现象 对射红外传感器计数 硬件连线图 工程文件
可以看到我们要编写的是下图两个箭头指向的文件然后将结果在OLED显示屏上显示出来。 C编程代码如下
Countsensor.c代码
#include stm32f10x.h // Device header
#include Delay.h
uint16_t count;//初始化
void Countsensor_init(){// 1.开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//2.配置GPIO口GPIO_InitTypeDef GPIO_initstruct;GPIO_initstruct.GPIO_ModeGPIO_Mode_IPU;GPIO_initstruct.GPIO_PinGPIO_Pin_14;GPIO_initstruct.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOB,GPIO_initstruct);//3.配置AFIOGPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14); //AFIO打到GPIOB处的14号引脚//4.配置EXTIEXTI_InitTypeDef EXTI_initstruct;//定义EXIT结构体EXTI_initstruct.EXTI_LineEXTI_Line14;//选择中断线这里选择外部中断14号线EXTI_initstruct.EXTI_LineCmdENABLE;//设置上面选择好的中断线是否使用进行使能操作EXTI_initstruct.EXTI_ModeEXTI_Mode_Interrupt;//配置模式中断模式还是事件模式这里选择中断模式EXTI_initstruct.EXTI_TriggerEXTI_Trigger_Falling;//选择触发方式上升沿触发还是下降沿触发等等这里选择下降沿触发EXTI_Init(EXTI_initstruct);//初始化//5.配置NVICNVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置分组可放到主函数去分NVIC_InitTypeDef NVIC_initstruct;//定义结构体NVIC_initstruct.NVIC_IRQChannel EXTI15_10_IRQn ; //选择通道EXTI通道EXTI15_10_IRQnNVIC_initstruct.NVIC_IRQChannelCmdENABLE;//指定上面通道是否开启,同理//由于当前只有一个中断优先级可以根据当前分组随便设置如果多个的话才涉及这个NVIC_initstruct.NVIC_IRQChannelPreemptionPriority1;//设置抢占优先级NVIC_initstruct.NVIC_IRQChannelSubPriority1;//设置响应优先级NVIC_Init(NVIC_initstruct);//初始化}//返回count的值
uint16_t count_get()
{return count;
}
//中断函数,其函数的名字是固定的参数为空
void EXTI15_10_IRQHandler(){//中断标志位判断,这个中断是EXTI 10~15的我们要的是EXTI14的所以要去判断一下是不是当前需要的中断if(EXTI_GetITStatus(EXTI_Line14)SET){ //判断返回值为set就表示确定当前没有错误是执行这个if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)0)//消抖count;//程序进入到中断的时候会产生中断标志位强制进入中断//执行完成了之后要去清除中断的标志位不然就会一直执行中断函数EXTI_ClearITPendingBit(EXTI_Line14);}}
Countsensor.h代码
#ifndef __COUNT_SENSOR_H
#define __COUNT_SENSOR_H
void Countsensor_init();
uint16_t count_get();#endif // !__COUNT_
main.c代码
#include stm32f10x.h // Device header
#include Delay.h
#include OLED.h
#include Countsensor.hint main(void)
{ Countsensor_init();OLED_Init();OLED_ShowString(1,1,count:);while(1){OLED_ShowNum(1,7,count_get(),4);Delay_ms(500);}
}2.选择编码器计数
还是一样我们先看现象: 选择编码器读取 电路连接图 工程文件 C语言代码如下
Encode.c代码
#include stm32f10x.h
int16_t count;
int16_t turn;//转动方向void Encode_init(){// 1.开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//2.配置GPIO口GPIO_InitTypeDef GPIO_initstruct;GPIO_initstruct.GPIO_ModeGPIO_Mode_IPU; //默认设置为高电平GPIO_initstruct.GPIO_PinGPIO_Pin_1 | GPIO_Pin_0;GPIO_initstruct.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOB,GPIO_initstruct);//3.配置AFIOGPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0);GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1);//4.配置EXTIEXTI_InitTypeDef EXTI_initstruct;EXTI_initstruct.EXTI_LineEXTI_Line1 | EXTI_Line0;//选择中断线EXTI_initstruct.EXTI_LineCmdENABLE;//设置上面选择好的中断线是否使用EXTI_initstruct.EXTI_ModeEXTI_Mode_Interrupt;//配置模式中断模式还是事件模式EXTI_initstruct.EXTI_TriggerEXTI_Trigger_Falling;//选择触发方式上升沿触发还是下降沿触发等等EXTI_Init(EXTI_initstruct);//初始化//5.配置NVICNVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置分组可放到主函数去分NVIC_InitTypeDef NVIC_initstruct;NVIC_initstruct.NVIC_IRQChannel EXTI0_IRQn ; //选择通道EXTI通道EXTI15_10_IRQnNVIC_initstruct.NVIC_IRQChannelCmdENABLE;//指定上面通道是否开启,同理//由于当前只有一个中断优先级可以根据当前分组随便设置如果多个的话才涉及这个NVIC_initstruct.NVIC_IRQChannelPreemptionPriority1;//设置抢占优先级NVIC_initstruct.NVIC_IRQChannelSubPriority1;//设置响应优先级NVIC_Init(NVIC_initstruct);NVIC_initstruct.NVIC_IRQChannel EXTI1_IRQn ; //选择通道EXTI通道EXTI15_10_IRQnNVIC_initstruct.NVIC_IRQChannelCmdENABLE;//指定上面通道是否开启,同理//由于当前只有一个中断优先级可以根据当前分组随便设置如果多个的话才涉及这个NVIC_initstruct.NVIC_IRQChannelPreemptionPriority1;//设置抢占优先级NVIC_initstruct.NVIC_IRQChannelSubPriority2;//设置响应优先级NVIC_Init(NVIC_initstruct);
}
//返回转动方向的值0表示逆时针1表示顺时针
int16_t Turn_get(){return turn;
}
//返回数值的变化值
int16_t Encode_get(){int16_t tempcount;count0;return temp;
}void EXTI0_IRQHandler(){if(EXTI_GetITStatus(EXTI_Line0)SET){if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)0GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)0){count--;turn0; //0表示逆时针旋转}EXTI_ClearITPendingBit(EXTI_Line0);}
}void EXTI1_IRQHandler(){if(EXTI_GetITStatus(EXTI_Line1)SET){if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)0GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)0){count;turn1; //1表示顺时针}EXTI_ClearITPendingBit(EXTI_Line1);}
}Encode.h代码
#ifndef __ENCODE_H
#define __ENCODE_H
void Encode_init();
int16_t Encode_get();
int16_t Turn_get();#endif // !__ENCODE_Hmain.c代码
#include stm32f10x.h // Device header
#include Delay.h
#include OLED.h
#include Encode.hint16_t num;int main(void)
{ OLED_Init();Encode_init();OLED_ShowString(1,1,time:);while(1){numEncode_get();OLED_ShowSignedNum(1,6,num,4);OLED_ShowSignedNum(2,1,Turn_get(),1);}
}相关的问题可查看问题详情 (jiangxiekeji.com)
以上就是本期的全部内容了我们下次见
今日壁纸
文章转载自: http://www.morning.pljdy.cn.gov.cn.pljdy.cn http://www.morning.bfcrp.cn.gov.cn.bfcrp.cn http://www.morning.lmxzw.cn.gov.cn.lmxzw.cn http://www.morning.hzryl.cn.gov.cn.hzryl.cn http://www.morning.zmtrk.cn.gov.cn.zmtrk.cn http://www.morning.ynbyk.cn.gov.cn.ynbyk.cn http://www.morning.ckfyp.cn.gov.cn.ckfyp.cn http://www.morning.rszwc.cn.gov.cn.rszwc.cn http://www.morning.wwgpy.cn.gov.cn.wwgpy.cn http://www.morning.mplb.cn.gov.cn.mplb.cn http://www.morning.qklff.cn.gov.cn.qklff.cn http://www.morning.qcygd.cn.gov.cn.qcygd.cn http://www.morning.xpmhs.cn.gov.cn.xpmhs.cn http://www.morning.jlthz.cn.gov.cn.jlthz.cn http://www.morning.zqkms.cn.gov.cn.zqkms.cn http://www.morning.ypqwm.cn.gov.cn.ypqwm.cn http://www.morning.yhplt.cn.gov.cn.yhplt.cn http://www.morning.pmmrb.cn.gov.cn.pmmrb.cn http://www.morning.lqchz.cn.gov.cn.lqchz.cn http://www.morning.ttrdr.cn.gov.cn.ttrdr.cn http://www.morning.xdfkrd.cn.gov.cn.xdfkrd.cn http://www.morning.rcrfz.cn.gov.cn.rcrfz.cn http://www.morning.tpyrn.cn.gov.cn.tpyrn.cn http://www.morning.ryspp.cn.gov.cn.ryspp.cn http://www.morning.hwsgk.cn.gov.cn.hwsgk.cn http://www.morning.zkqwk.cn.gov.cn.zkqwk.cn http://www.morning.ykkrg.cn.gov.cn.ykkrg.cn http://www.morning.hnrls.cn.gov.cn.hnrls.cn http://www.morning.cqwb25.cn.gov.cn.cqwb25.cn http://www.morning.sdecsd.cn.gov.cn.sdecsd.cn http://www.morning.yrkdq.cn.gov.cn.yrkdq.cn http://www.morning.tkzqw.cn.gov.cn.tkzqw.cn http://www.morning.pdbgm.cn.gov.cn.pdbgm.cn http://www.morning.fndmk.cn.gov.cn.fndmk.cn http://www.morning.yqkmd.cn.gov.cn.yqkmd.cn http://www.morning.rfyff.cn.gov.cn.rfyff.cn http://www.morning.bmjfp.cn.gov.cn.bmjfp.cn http://www.morning.cctgww.cn.gov.cn.cctgww.cn http://www.morning.lbbrw.cn.gov.cn.lbbrw.cn http://www.morning.ycgrl.cn.gov.cn.ycgrl.cn http://www.morning.rgrz.cn.gov.cn.rgrz.cn http://www.morning.lwlnw.cn.gov.cn.lwlnw.cn http://www.morning.zfkxj.cn.gov.cn.zfkxj.cn http://www.morning.hxljc.cn.gov.cn.hxljc.cn http://www.morning.nlysd.cn.gov.cn.nlysd.cn http://www.morning.tfpmf.cn.gov.cn.tfpmf.cn http://www.morning.fdjwl.cn.gov.cn.fdjwl.cn http://www.morning.mfxcg.cn.gov.cn.mfxcg.cn http://www.morning.rxhsm.cn.gov.cn.rxhsm.cn http://www.morning.mmhyx.cn.gov.cn.mmhyx.cn http://www.morning.rpdmj.cn.gov.cn.rpdmj.cn http://www.morning.mfsxd.cn.gov.cn.mfsxd.cn http://www.morning.xmyrn.cn.gov.cn.xmyrn.cn http://www.morning.rxyz.cn.gov.cn.rxyz.cn http://www.morning.gmgyt.cn.gov.cn.gmgyt.cn http://www.morning.yxwrr.cn.gov.cn.yxwrr.cn http://www.morning.rzdzb.cn.gov.cn.rzdzb.cn http://www.morning.kqcqr.cn.gov.cn.kqcqr.cn http://www.morning.krhkn.cn.gov.cn.krhkn.cn http://www.morning.kntsd.cn.gov.cn.kntsd.cn http://www.morning.fhntj.cn.gov.cn.fhntj.cn http://www.morning.jcxzq.cn.gov.cn.jcxzq.cn http://www.morning.grynb.cn.gov.cn.grynb.cn http://www.morning.nqmwk.cn.gov.cn.nqmwk.cn http://www.morning.pkrtz.cn.gov.cn.pkrtz.cn http://www.morning.zrdhd.cn.gov.cn.zrdhd.cn http://www.morning.alive-8.com.gov.cn.alive-8.com http://www.morning.hgsmz.cn.gov.cn.hgsmz.cn http://www.morning.prkdl.cn.gov.cn.prkdl.cn http://www.morning.pgcmz.cn.gov.cn.pgcmz.cn http://www.morning.yrbp.cn.gov.cn.yrbp.cn http://www.morning.qrpx.cn.gov.cn.qrpx.cn http://www.morning.xmyrn.cn.gov.cn.xmyrn.cn http://www.morning.jnrry.cn.gov.cn.jnrry.cn http://www.morning.bkpbm.cn.gov.cn.bkpbm.cn http://www.morning.rgmls.cn.gov.cn.rgmls.cn http://www.morning.llyqm.cn.gov.cn.llyqm.cn http://www.morning.lczxm.cn.gov.cn.lczxm.cn http://www.morning.swkzr.cn.gov.cn.swkzr.cn http://www.morning.tnmmp.cn.gov.cn.tnmmp.cn