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

刚刚做的网站怎么排名廊坊企业网站建设公司

刚刚做的网站怎么排名,廊坊企业网站建设公司,软文推广公司有哪些,无需下载直接观看的正能量文章目录 单片机编程的原理GPIO中断EXTI外部中断定时器中断、串口中断 定时器定时器中断配置过程通用定时器输出比较功能#xff1a;PWM波的生成定时器的输入捕获功能主从触发模式PWMI模式 定时器的编码器接口 DMA简介通信接口USART软件配置流程#xff1a;1、仅发数据的配置… 文章目录 单片机编程的原理GPIO中断EXTI外部中断定时器中断、串口中断 定时器定时器中断配置过程通用定时器输出比较功能PWM波的生成定时器的输入捕获功能主从触发模式PWMI模式 定时器的编码器接口 DMA简介通信接口USART软件配置流程1、仅发数据的配置2、收发数据的配置 I2CI2C时序基本单元具体应用指定地址写主机发送指定地址读总结 MPU6050通信流程 SPI起始终止时序交换一个字节 通信协议比较USARTI2CSPI 单片机编程的原理 编程的目的是通过配置stm32的外设来实现相应的功能。 注意在操作外设之前必须使能时钟。 GPIO 在STM32中所有的GPIO都是挂载在APB2外设总线上的。 其中 寄存器是一个特殊的存储器内核可以通过APB2总线对寄存器进行读写。驱动器负责增大驱动能力。 GPIO电路图 可配置为8种输入输出模式。 在输出模式下输入模式也是有效的 在输入模式下输出模式无效。 中断 NVIC是一个内核外设用来分配优先级和管理中断 抢占优先级高的可以中断嵌套响应优先级高的可以优先排队 抢占优先级和响应优先级均相同的按中断号排队。 EXTI外部中断 大致来说就是监控电平跳变的信号触发GPIO口的中断。 具体来说 1、EXTI可以监测指定GPIO口的电平信号当其指定的GPIO口产生电平变化时EXTI将立即向NVIC发出中断申请经过NVIC裁决后即可中断CPU主程序使CPU执行EXTI对应的中断程序 2、支持的触发方式上升沿/下降沿/双边沿/软件触发 3、支持的GPIO口所有GPIO口但相同的Pin不能同时触发中断 4、通道数16个GPIO_Pin外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒 5、触发响应方式中断响应/事件响应 打开RCC时钟GPIO和AFIO 配置GPIO为输入模式 配置AFIO接线 配置EXTI设置线路选择边沿触发方式选择触发响应方式中断响应 配置NVIC内核的外设无需时钟设置优先级分组初始化NVIC。 void CountSensor_Init(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); GPIO_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);GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);EXTI_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_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){/*如果出现数据乱跳的现象可再次判断引脚电平以避免抖动*/if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) 0){CountSensor_Count ;}EXTI_ClearITPendingBit(EXTI_Line14); // 清除中断标志位} }定时器中断、串口中断 下面介绍 定时器 定时器可以对输入的时钟进行计数在计数值达到设定值时触发中断。 基本定时器 16为计数器 预分频器 自动重装寄存器时基单元 通用定时器 无论是什么定时器内部的基准时钟都是72MHz 定时器中断配置过程 打开RCC时钟 配置时基单元 // 如果只需要定时器配置到这里就结束 配置输出中断控制允许更新中断输出到NVIC 配置NVIC在NVIC种打开定时器中断的通道并分配优先级 最后使能时基单元中的定时器。 决定定时时间的参数为结构体TIM_Period和结构体TIM_Prescaler 计数器溢出频率定时频率 72M/(PSC1)/(ARR1) 如果需要1hz则代码如下 上述代码红色框部分为 分频系数ARR10000-1; PSC7200-1在72M/7200 10k的频率下计10000个数就是1s。 定时器中断也可以产生pwm波设置定时器中断在中断里手动计数手动翻转电平。 定时器中断也可以完成输入捕获来个外部中断在中断里手动把CNT取出来放在变量里面。 定时器中断也可以完成编码器接口的硬件功能在中断中手动自增或自减计数。 以上都是消耗软件资源 通用定时器输出比较功能PWM波的生成 输出比较可以通过比较CNT和CCR捕获比较寄存器值的关系来对输出电平进行置1、置0或翻转的操作从而输出。 使用硬件资源CCR来输出PWM波不需要中断只需要比较计数器和寄存器的值就行了 同一个定时器可以通过不同的通道来输出PWM具体哪个通道通过函数配置来实现。 通过ARR、PSC、CCR的设置来调整PWM的参数。 所以ARR100-1; PSC 720-1; CCR 50// 50%的占空比 void PWM_Init(void) {RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);// RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2, ENABLE); // GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; //GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA, GPIO_InitStructure);TIM_InternalClockConfig(TIM2);TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_TimeBaseInitStructure.TIM_ClockDivision TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode TIM_CounterMode_Up;TIM_TimeBaseInitStructure.TIM_Period 100 - 1; //ARRTIM_TimeBaseInitStructure.TIM_Prescaler 720 - 1; //PSCTIM_TimeBaseInitStructure.TIM_RepetitionCounter 0;TIM_TimeBaseInit(TIM2, TIM_TimeBaseInitStructure);TIM_OCInitTypeDef TIM_OCInitStructure;TIM_OCStructInit(TIM_OCInitStructure);TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High;TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse 0; //CCRTIM_OC1Init(TIM2, TIM_OCInitStructure);TIM_Cmd(TIM2, ENABLE); }一般只调节PSC不会影响CCR和ARR的占空比。一般先根据分辨率确定ARR再根据pwm频率条件PSC分频。 示波器输出 项目使用TB6612双路H桥型的直流电机驱动芯片可以驱动两个直流电机。双路H桥型电路由两个推挽电路组成。H桥可以变换电流的方向。 定时器的输入捕获功能 测输入PWM波的频率和占空比 输入捕获4个通道和输出比较4个通道只能使用其中一个。 输入捕获当通道输入引脚出现上升沿或下降沿时将当前CNT的值锁存到CCR中可测量PWM波的频率、占空比等等参数。 主从触发模式 可配合主从触发模式实现硬件全自动测量。不用再使用中断去清空CNT 注意CNT计数可能会溢出0-65535 PWMI模式 可配置为PWMI模式同时测量hz和占空比 频率测量的方法 测频法在一个闸门时间T内记录上升沿出现的次数N然后计算 测周法在两个上升沿内用单片机的标注频率fc计次记录次数N到CCR然后计算。一般使用这个随时都能取CCR的值 定时器的编码器接口 电机驱动项目使用pwm驱动电机再使用编码器测量电机的速度然后再用PID进行控制。 通用定时器拥有一个编码器接口。 正交编码器能够抗噪声通过双相查表来对抗噪声。 所以问TIMER你一般用来做什么 DMA简介 直接存储器读取协助CPU完成数据转运的工作提供外设存储器、存储器存储器的高速数据传输 一般情况下程序都是在flash程序存储器下运行 DMA外设可以直接访问32内部的寄存器包括运行内存SRAM程序存储器flash寄存器等等 寄存器是一种特殊的存储器一、cpu可以对寄存器进行读写类型读取运行内存二、寄存器都连接了一根导线可以控制电路状态如高低电平的切换导通和断开开关。所以寄存器是连接软件和硬件的桥梁软件读取寄存器就相当于在控制硬件的执行。 寄存器与存储器不同的是寄存器的每一位都对应着外设电路的状态。 通信接口 需要制定通信协议通信双方按照协议规则进行数据收发。 USART USART外设按照串口协议来产生和接收高低电平信号。点对点通信。 串口参数 波特率串口通信的速率。因为串口是异步通信如果速率不同会导致读取数据的错位。 起始位标志一个数据帧的开始固定为低电平串口空闲时为高电平 数据位数据帧的载荷。如发送0x0F低位先发于是电平为11110000的波形。注意串口一次只能发送一个 8 位1 个字节的数据。 停止位数据帧的间隔固定为高电平。 翻转电平是由usart外设完成的无需编程。软件只需要读写DR寄存器。 重点在发送数据寄存器TDR和接收数据寄存器RDR。 在数据转运到接收数据寄存器RDR时会置一个RXNE标志位RXNE就可以去申请中断从而在收到数据时便快速的进行数据的处理。 上图看似有四个寄存器但是软件层面只有一个DR寄存器供我们读写。 软件配置流程 1、仅发数据的配置 开启USART的时钟开启GPIOA的时钟初始化GPIO引脚TX引脚位复用推挽输出RX位输入脚选择上拉输入模式初始化串口配置 USART_Cmd开启串口之后就可以使用函数接口发送数据 USART_SendData(USART1, uint8_t) // uint8_t就是char8位封装之后 void Serial_SendByte(uint8_t Byte) {USART_SendData(USART1, Byte);while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) RESET); }调用这个库函数Byte变量就写入TDR中了再等待一下TDR的数据转移到移位寄存器中才能放心不然数据就覆盖了。所以还需要检查标识位TXETDR是否为空 while(USART_GETFlagStatus(USART1, USART_FLAG_TXE) RESET); 注读数据寄存器非空的标志为RXNE下面会用到。 2、收发数据的配置 USART_InitStruture.USART_Mode USART_Mode_Tx | USART_Mode_Rx; 一般使用中断触发处理数据所以下一步 配置NVIC 开启RXNE标志位到NVIC的输出RXNE一旦置1就会向NVIC申请中断 编写中断处理函数 void USART1_IRQHandler(void) {if(USART_GETITStatus(USART1, USART_IT_RXNE) SET){// 有数据来了接收uint8_t Serial_RXData USART_ReceiveData(USART1);USART_ClearITPendingBit(USART1, USART_IT_RXNE); // 清除标识位} }以上是单字节的数据收发数据包的收发类似。 I2C 目的读取外挂寄存器数据CPU要读取MPU6050的寄存器而串口的工作是传输数据。 ##I2C的功能 发送数据后另一端能够应答 同步时序半双工串口是异步时序有USART硬件的支持对硬件要求不是很严格 支持总线挂载多设备一般为一主多从。 所有I2C设备的SCL连在一起SDA连在一起 设备的SCL和SDA均要配置成开漏输出模式且SCL和SDA各添加一个上拉电阻阻值一般为4.7KΩ左右弱上拉电阻开漏输出模式 MPU6050已经在硬件上接入上拉电阻了。 复习 开漏输出只能输出低电平只能下拉 I2C时序基本单元 起始条件SCL高电平期间SDA从高电平切换到低电平 终止条件SCL高电平期间SDA从低电平切换到高电平 注意只用主机才能产生起始和终止。只有主机才能控制SCL。 一个字节主机发送从机接收 主机拉下SCL主机把数据放在SDA高位先行主机松开SCL从机读取SDA的数据SCL高电平期间SDA不允许变换因为从机正在读。如此循环八次就发送了一个字节的数据。 低电平主机放数据高电平从机读数据。 一个字节主机接收从机发送 SCL低电平期间从机把数据放在SDA上然后释放SCL主机在SCL高电平期间读取SDA数据SCL高电平期间SDA不允许变换。如此循环八次就发送了一个字节的数据。 低电平从机放数据高电平主机读数据。 总结所有设备包括主机都处于输入模式当主机需要发送时主动去拉下SDA。而在主机被动接收的时必须先释放SDA释放总线不然永远是低电平别人没法写总线是“或”逻辑。 应答机制 从机应答操作的是SDA这根线当主机松手SDA时从机需要拉住SDA告诉主机自己收到了。 主机应答 具体应用 指定地址写主机发送 对于指定从机设备地址MPU6050地址0xD0在指定从机设备的指定寄存器地址下0x19写入指定数据0xAA 从机设备地址站前7位第8位为主机想写就是0想读就是1。 指定地址读 对于指定从机设备地址MPU6050地址0xD0指定从机设备的指定寄存器地址0x19对于指定从机设备地址MPU6050地址0xD0但是第8位为1表述主机想读之后直接收数据。 实现了指定地址读和写就可以实现STM32读取外挂芯片寄存器的操作。 总结 只有主机SCL下拉期间SDA的数据才能动要么主机放数据、要么从机放。主机松手SCL高电平一律不准动SDA因为要读要么主机要么从机。 MPU6050通信流程 初始化I2C 指定MPU6050地址指定要写的寄存器地址 初始化MPU6050的寄存器其实就是主机往指定的寄存器中写数据电源管理寄存器解除睡眠、选择陀螺仪时钟、6个轴不待机。。。 再发一次MPU6050地址指定读然后读取指定寄存器的数据1632AccGypo SPI SPI与I2C的目的相同为了读取外部寄存器。 SCK、MOSI主机输出从机输入、MISO主机输入从机输出、SS从机选择线 同步时序、全双工数据发送和接收各占一条线 SCK时钟线由主机掌握 主机另外引出多条SS控制线拉低为呼叫。 输出引脚配置为推挽输出输入引脚为浮空或上拉输入 推挽输出高低电平均有很强的驱动能力下降沿上升沿非常迅速 SPI的数据收发都是基于字节交换单元来实现的 起始终止时序 起始条件: SS从高电平切换到低电平 终止条件: SS从低电平切换到高电平 SS低电平为数据传输的过程 交换一个字节 模式1SCK第一个边沿移出数据到线第二个边沿移入数据到寄存器。 一般用的是模式0在SCK第一个边沿之前就要移出数据第一个边沿移入数据。 模式2 通信协议比较 USART 定义好波特率等等参数之后调用接口发送数据 发送 USART_SendData(USART1, uint8_t) // uint8_t就是char8位封装之后 void Serial_SendByte(uint8_t Byte) {USART_SendData(USART1, Byte);while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) RESET); }接收 中断处理函数 void USART1_IRQHandler(void) {if(USART_GETITStatus(USART1, USART_IT_RXNE) SET){// 有数据来了接收uint8_t Serial_RXData USART_ReceiveData(USART1);USART_ClearITPendingBit(USART1, USART_IT_RXNE); // 清除标识位} }I2C 优点一根通信线兼顾收发无论挂载多少设备、寻址机制应答机制。 缺点因为I2C要实现半双工要经常切换输入输出所以采用开漏上拉电阻的设计这种设计使得通信线高电平驱动能力较弱导致SDA从低到高上升沿的耗时较长限制传输速度。 SPI 优点传输更快推挽输出无需寻址SS线负责。 缺点硬件要求高资源浪费全双工。 四根通信线SCKMOSI、MISO、SS。
http://www.w-s-a.com/news/946356/

相关文章:

  • 开发一个卖东西的网站多少站长工具永久
  • 公司网站怎么突然多了好多友情链接如何删除宁波有几个区
  • 临沂seo网站推广wordpress新编辑器
  • c2c网站设计店面logo设计制作
  • 网站建设任务执行书重庆今天新闻事件
  • 怎样发布自己的网站南宁制作网站公司
  • wordpress装多站点百度查一下
  • 怎么优化一个网站搭建网站免费空间
  • 山东建设和城乡建设厅注册中心网站首页wordpress安装教材
  • 个人风采网站制作毕节网站开发公司电话
  • 网络网站销售设计主题和设计理念
  • 做网站一般用什么服务器承德专业做网站
  • 松北区建设局网站网站建设分为几种
  • 网站建设的合同 体会智联招聘网站建设情况
  • 记的网站域名wordpress地方信息主题
  • 淄博好的建网站公司网站建设 海口
  • 有人做网站花了10几万2017做啥网站能致富
  • 做网站有什么软件cod建站平台
  • 合肥学校网站建设怎么做免费的产品图片网站
  • 营养早餐网站的设计与制作建设通网站怎么查项目经理在建
  • 浑南区建设局网站永州网站建设公司推荐
  • 做外贸都得有网站吗绵阳网站建设制作
  • 功能性的网站建设北京餐饮品牌设计公司
  • php做网站优势视频直播软件
  • 怎么安装php网站哪个网站是专门为建设方服务的
  • 重慶网站开发sina app engine wordpress
  • wampserver网站开发步骤中冠工程管理咨询有限公司
  • 自己做网站商城需要营业执照吗老外做牛排的视频网站
  • 网站推广效果的评估指标主要包括公司广告推广
  • 昆明网站建设那家好哪个网站学做凉皮