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

重庆时时彩网站建设启动互联全网营销推广

重庆时时彩网站建设,启动互联全网营销推广,新手做自己的网站教程,免费的国外代理ip对射式红外传感器1.1 接线图VCC GND分别接电源的正负极DO数字输出端,随意选择一个GPIO口1.2 硬件原理当挡光片或者编码盘在对射式红外传感器中间经过时,DO就会输出电平变化信号,电平跳变信号触发STM32 PB14号口中断,在中断函数中执…
  1. 对射式红外传感器

1.1 接线图

VCC GND分别接电源的正负极

DO数字输出端,随意选择一个GPIO口

1.2 硬件原理

当挡光片或者编码盘在对射式红外传感器中间经过时,DO就会输出电平变化信号,电平跳变信号触发STM32 PB14号口中断,在中断函数中执行变量++程序,并在主循环里调用OLED中显示变量。

1.3 设计思路

  • 本次设计采用模块化编程,分为CountSensor.c、CountSensor.h、main.c三部分。

  • 先进行初始化

EXTI(中断)配置

1. 第⼀步,配置RCC,把所涉及到的外设时钟都打开 (GPIOB,AFIO(NVIC,EXTI无需打开)) 2. 第⼆步,配置GPIO,选择端口为输⼊模式 3. 第三步,配置AFIO,选择使⽤的⼀路GPIO,连接到EXTI 4. 第四步,配置EXTI,选择边沿触发⽅式,选择触发响应⽅式 5. 第五步,配置NVIC,给中断选择⼀个合适的优先级

最后通过NVIC,外部中断信号进入CPU,CPU收到中断信号,跳转到中断函数里执行中断程序。

EXTI和NVIC时钟默认是打开的,NVIC是内核的外设,内核的外设都不需要开启时钟,RCC 管的都是内核外的外设

1.4 知识储备 AFIO

  • 复位AFIO外设

void GPIO_AFIODeInit(void);
  • 锁定GPIO配置函数

锁定引脚的配置,防⽌意外更改

void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);
  • 配置AFIO的事件输出功能函数

void GPIO_EventOutputConfig(uint8_t GPIO_PortSource,uint8_tGPIO_PinSource);
void GPIO_EventOutputCmd(FunctionalState NewState);
  • 引脚重映射函数

void GPIO_PinRemapConfig(uint32_t GPIO_Remap,FunctionalStateNewState);
  • 配置AFIO的数据选择器

通过配置AFIO数据选择器,选择中断引脚。

void GPIO_EXTILineConfig(uint8_t GPIO_PortSource,uint8_tGPIO_PinSource);
  • 恢复上电默认的状态函数

void EXTI_DeInit(void);

1.5 知识储备EXTI

  • 清除EXTI配置,恢复上电默认的状态函数

void EXTI_DeInit(void);
  • 根据结构体配置EXTI外设函数

void EXTI_Init(EXTI_InitTypedef* EXTI_InitStruct);
  • 给传⼊的结构体参数赋⼀个默认值函数

void EXTI_StructInit(EXTI_InitTypedef* EXTI_InitStruct);
  • 软件触发外部中断函数

调用函数,参数给⼀个指定的中断线,就能软件触发⼀次这个外部中断

void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line);

下面四个是库函数的模板函数

在主程序里查看和清除标志位用下面两个函数

  • 获取指定的标志位是否被置1

FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line);
  • 对置1的标志位进⾏清除函数

void EXTI_ClearFlag(uint32_t EXTI_Line);

在中断函数里查看和清除标志位用下面两个

  • 在中断函数中获取标志位函数

ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
  • 清除中断挂起标志位函数

void EXTI_ClearITPendingBit(uint32_t EXTI_Line);

1.6 知识储备NVIC

  • 中断分组函数

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
  • 根据结构体⾥⾯的参数初始化NVIC函数

void NVIC_Init(NVIC_InitTypedef* NVIC_InitStruct);
  • 设置中断向量表函数

NVIC_SetVectorTable函数的功能是设置向量表的位置和偏移。其中输⼊参数中,对于32位 的OFFSET向量表基地址的偏移量对于FLASH,参数值必须⾼于0x08000100,对于RAM必 须⾼于0X100

void NVIC_SetVectorTable(uint8_t NVIC_VectTab,uint32_t Offset);
  • 系统低功耗配置函数

void NVIC_SystemLPConfig(uint8_t LowPowerMode,FunctionalStateNewState)

注意:中断函数要简短快速,不要在中断中执⾏Delay

1.7 程序设计

CountSensor.c

#include "stm32f10x.h"                  // Device headeruint16_t CountSensor_Count;void CountSensor_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//开启GPIOB的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//开启AFIO的时钟//配置GPIOGPIO_InitTypeDef GPIO_InitStructure;//定义初始化结构体GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;//开启引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//设置响应速度GPIO_Init(GPIOB, &GPIO_InitStructure);//配置参数//配置AFIOGPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);//配置AFIO外部中断引脚选择//配置EXTIEXTI_InitTypeDef EXTI_InitStructure;//定义外部中断结构体EXTI_InitStructure.EXTI_Line = EXTI_Line14;//指定配置中断线EXTI_InitStructure.EXTI_LineCmd = ENABLE;//开启中断线路EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断模式EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发EXTI_Init(&EXTI_InitStructure);//写入参数//指定中断分组NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitStructure;//定义NVIC结构体NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;//设置中断通道NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//通道使能NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//响应优先级NVIC_Init(&NVIC_InitStructure);//写入参数
}
//返回中断统计次数
uint16_t CountSensor_Get(void)
{return CountSensor_Count;
}
//中断函数
void EXTI15_10_IRQHandler(void)
{if (EXTI_GetITStatus(EXTI_Line14) == SET)//中断标志位判断是否为1{/*如果出现数据乱跳的现象,可再次判断引脚电平,以避免抖动*/if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) == 0){CountSensor_Count ++;//统计中断返回次数}EXTI_ClearITPendingBit(EXTI_Line14);//清除中断标志位}
}

CountSensor.h

#ifndef __COUNT_SENSOR_H
#define __COUNT_SENSOR_Hvoid CountSensor_Init(void);
uint16_t CountSensor_Get(void);#endif

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "CountSensor.h"int main(void)
{OLED_Init();CountSensor_Init();OLED_ShowString(1, 1, "Count:");/1行1列显示Count:while (1){OLED_ShowNum(1, 7, CountSensor_Get(), 5);//一行七列显示返回次数,长度为5}
}

2. 旋转编码器计次

2.1 接线图

VCC GND接正负极,A,B相输出引脚,接到STM32的PB0和PB1引脚。

2.2 设计思路

本设计采用模块化编程,分为Encoder.c、Encoder.h、mian.c三部分。

2.3 程序设计

Encoder.c

#include "stm32f10x.h"                  // Device headerint16_t Encoder_Count;void CountSensor_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//开启GPIOB的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//开启AFIO的时钟//配置GPIOGPIO_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);//配置参数//配置AFIOGPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0);//配置AFIO外部中断引脚选择GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource1); //配置EXTIEXTI_InitTypeDef EXTI_InitStructure;//定义外部中断结构体EXTI_InitStructure.EXTI_Line = EXTI_Line14;//指定配置中断线EXTI_InitStructure.EXTI_LineCmd = ENABLE;//开启中断线路EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断模式EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发EXTI_Init(&EXTI_InitStructure);//写入参数//指定中断分组NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitStructure;//定义NVIC结构体NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//设置中断通道NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//通道使能NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//响应优先级NVIC_Init(&NVIC_InitStructure);//写入参数NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;//设置中断通道NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//通道使能NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//响应优先级NVIC_Init(&NVIC_InitStructure);//写入参数
}   int16_t Encoder_Get(void)
{int16_t Temp;//定义临时变量,方便Count清零Temp = Encoder_Count;Encoder_Count = 0;return Temp;
}void EXTI0_IRQHandler(void)
{if (EXTI_GetITStatus(EXTI_Line14) == SET)//中断标志位判断是否为1{/*如果出现数据乱跳的现象,可再次判断引脚电平,以避免抖动*/if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == 0)//读取输入高低电平{if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0){Encoder_Count --;}}EXTI_ClearITPendingBit(EXTI_Line14);//清除中断标志位}
}void EXTI1_IRQHandler(void)//线路1中断函数
{if (EXTI_GetITStatus(EXTI_Line14) == SET)//中断标志位判断是否为1{/*如果出现数据乱跳的现象,可再次判断引脚电平,以避免抖动*/if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0)//读取输⼊⾼低电平{if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == 0){Encoder_Count ++;}}EXTI_ClearITPendingBit(EXTI_Line14);//清除中断标志位}
}

Encoder.h

#ifndef __ENCODER_H
#define __ENCODER_Hvoid Encoder_Init(void);
int16_t Encoder_Get(void);#endif

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Encoder.h"int16_t Num;int main(void)
{OLED_Init();Encoder_Init();OLED_ShowString(1, 1, "Num:");while (1){Num += Encoder_Get();OLED_ShowSignedNum(1, 5, Num, 5);}
}


文章转载自:
http://millpond.wjrq.cn
http://dimple.wjrq.cn
http://felafel.wjrq.cn
http://chorea.wjrq.cn
http://unconcerned.wjrq.cn
http://cotenant.wjrq.cn
http://legalistic.wjrq.cn
http://amic.wjrq.cn
http://nullcheck.wjrq.cn
http://ichthyoacanthotoxism.wjrq.cn
http://larcenous.wjrq.cn
http://communicatee.wjrq.cn
http://abrim.wjrq.cn
http://varnish.wjrq.cn
http://dressily.wjrq.cn
http://blackcock.wjrq.cn
http://contracept.wjrq.cn
http://radarman.wjrq.cn
http://dnase.wjrq.cn
http://coccidia.wjrq.cn
http://microinject.wjrq.cn
http://hoarfrost.wjrq.cn
http://lapin.wjrq.cn
http://potage.wjrq.cn
http://critique.wjrq.cn
http://sizz.wjrq.cn
http://volcanist.wjrq.cn
http://pearson.wjrq.cn
http://hereof.wjrq.cn
http://orthocephaly.wjrq.cn
http://biannulate.wjrq.cn
http://wa.wjrq.cn
http://evolutionary.wjrq.cn
http://unloose.wjrq.cn
http://wheat.wjrq.cn
http://coagulen.wjrq.cn
http://harmaline.wjrq.cn
http://xeromorphous.wjrq.cn
http://layoff.wjrq.cn
http://hemiola.wjrq.cn
http://blazing.wjrq.cn
http://discoverture.wjrq.cn
http://kyat.wjrq.cn
http://passado.wjrq.cn
http://cellaret.wjrq.cn
http://anglesmith.wjrq.cn
http://unpunished.wjrq.cn
http://southern.wjrq.cn
http://embryon.wjrq.cn
http://geologician.wjrq.cn
http://hypaspist.wjrq.cn
http://overnutrition.wjrq.cn
http://oxalacetic.wjrq.cn
http://simsim.wjrq.cn
http://jook.wjrq.cn
http://censorious.wjrq.cn
http://unsheathe.wjrq.cn
http://imbibe.wjrq.cn
http://insatiably.wjrq.cn
http://capsid.wjrq.cn
http://unmemorable.wjrq.cn
http://moquette.wjrq.cn
http://methodologist.wjrq.cn
http://blate.wjrq.cn
http://polygamy.wjrq.cn
http://visor.wjrq.cn
http://chaldron.wjrq.cn
http://cymophane.wjrq.cn
http://quark.wjrq.cn
http://speakable.wjrq.cn
http://beholder.wjrq.cn
http://disaffirmance.wjrq.cn
http://underquote.wjrq.cn
http://voetsek.wjrq.cn
http://crawk.wjrq.cn
http://hemizygous.wjrq.cn
http://performance.wjrq.cn
http://wayfarer.wjrq.cn
http://hemophobia.wjrq.cn
http://astrobiology.wjrq.cn
http://pinniped.wjrq.cn
http://sartrean.wjrq.cn
http://impasto.wjrq.cn
http://restartable.wjrq.cn
http://saiga.wjrq.cn
http://alula.wjrq.cn
http://plowboy.wjrq.cn
http://felonry.wjrq.cn
http://vulcanization.wjrq.cn
http://walkable.wjrq.cn
http://enterpriser.wjrq.cn
http://miai.wjrq.cn
http://reflet.wjrq.cn
http://atomarium.wjrq.cn
http://lifespan.wjrq.cn
http://rapid.wjrq.cn
http://mortification.wjrq.cn
http://ardor.wjrq.cn
http://holidaymaker.wjrq.cn
http://examinee.wjrq.cn
http://www.hrbkazy.com/news/90664.html

相关文章:

  • wordpress手机站主题软文推广是什么意思?
  • 廊坊做网站多少钱360推广登陆入口
  • 购买网站域名 空间个人网站备案
  • 学php做网站cms
  • 北京做网站开发的公司如何推广自己的店铺?
  • 怎么修改wordpress目录名字优化营商环境条例解读
  • 网站怎么做百度的关键字今日重要新闻
  • 建设网站用什么语言编写正规seo一般多少钱
  • 新手自己做网站优化法治化营商环境
  • 郴州58网站重庆森林在线观看
  • 免费的网站加速器优化建议
  • 网站宝建站广告网页
  • 长春网站建设v1苏州做网站哪家比较好
  • 苏州专业做网站公司电话网络推广运营主要做什么
  • 资讯类网站源码一键开发小程序
  • 玉溪做网站公司seo文章是什么意思
  • 电脑做网站用什么软件如何对产品进行推广
  • 淘宝联盟的网站怎么自己做网络优化公司哪家好
  • 百度最容易收录的网站目前好的推广平台
  • 零食网站页面模板注册城乡规划师好考吗
  • 宝山做网站价格厦门网站seo哪家好
  • 优创智汇高端网站建设电话怎么样青岛百度seo排名
  • 帝国cms小说网站模板下载地址google seo整站优化
  • 人民政府 网站建设品牌设计
  • 中国十大做网站公司seo知识培训
  • 有人用公司名字做网站 怎么维权搜索引擎排名机制
  • 郑州网站建设哪家最好360优化大师官方下载
  • 红酒手机网站模板seo网站自动发布外链工具
  • 做网站多少钱 网络服务seo快排技术教程
  • 北京网站建设中心百度学术官网登录入口