关于STM32F407输入捕获的问题.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
关于STM32F407输入捕获的问题

关于STM32F407输入捕获的问题 由于ST给出了库函数,要想实现输入捕获很简单,可是对于寄存器层面的操作网上少之又少,关于寄存器配置,讲的最多的就是小船的,很感谢小船。 小船只给出了通用定时器的寄存器简介,并没有给出具体的例程,本人近日无事故调试了一下寄存器层面的配置。 功能:Timer2实现输入捕获 对于Timer的操作平时用的最多的就是定时器,PWM,对于其输入捕获功能也是第一次用。 直接上代码: void Timer2_Cap_Init(u16 arr,u16 psc) { NVIC_InitTypeDef NVIC_InitStructure; 上面这行代码的作用主要在意定义中断结构体。 RCC-APB1ENR|=(10); //Timer2时钟使能 RCC-AHB1ENR |=(10); //使能portA时钟 这两行的作用相信都明白,维持控制器工作的主要就是时钟,这点和大自然一样,时间是唯一度量。 GPIOA-MODER |= 0//pa设置为复用模式 STM32F4的GPIO模式寄存器与STM32F3的不同,F4的只要不是用于GPIO那一般都得设置为复用功能,此处需要特别慎重。问题一般都出在这里,当你设置为复用功能后,由于IO的映射关系,一个IO口上可能同时映射好几个功能,你需要指定到底是什么功能,下面这句就是指定GPIOA.0复用功能为Timer2_CH1。 GPIOA-AFR[0]|=0 //复用功能选择AF1 TIMER2_CH1 由于GPIO结构体里面定义的AFR寄存器为GPIOA-AFR[2],而芯片手册里给出的是GPIOA-AFRL和GPIOA-AFRH,此处特别容易产生错误,当你写GPIOA-AFRL时会报错(找不到GPIOA-AFRL),可是仔细看会发现GPIOA-AFRL对应的寄存器起始地址为:0x20,stm32f4××.h里面定义的AFR寄存器为GPIO-AFR[2],所以此处GPIO-AFR[0]对应的为GPIO-AFRL。为何取值为0,可以参考D第60页Alternate function mapping。 GPIOA-OSPEEDR |= 0//PA0快速模式50MHz GPIOA-PUPDR |= 0//上拉模式 TIM2-ARR=arr; //设定计数器重装载值 TIM2-PSC=psc; //设定预分频值 TIM2-SMCR|=0X00D4; TIM2-CCMR1|=10; //CC1S=01 IC1映射在TI1上 TIM2-CCMR1|=04; //IC1F=0000 不滤波 TIM2-CCMR1|=02; //IC2PS=00 不分频 TIM2-CCMR1|=28; TIM2-CCER|=11; //CC1P=0 上升沿作为捕获信号 TIM2-CCER|=10; //CC1E=1 捕获使能,允许捕获发生时计数器的值写进CCR1寄存器中 TIM2-CCER|=14; TIM2-CCER|=15; TIM2-DIER|=12; //允许捕获/比较2中断 TIM2-DIER|=11; //允许捕获/比较1中断 TIM2-DIER|=10; //允许更新中断 TIM2-CNT=0; 以上代码的大意就是要指定输出方向为输入,然后就是设定捕获输入信号,以及设定输入信号的种类,计数器开启的触发信号类型等,最后就是开启中断以及定时器。 //TIM2-CR2=0X0080; TIM2-CR1=0x0001; //使能定时器2 NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(NVIC_InitStructure); } 此处没有直接操作寄存器,而是应用了库函数的方法,当然如果感兴趣的话可以配置寄存器,需要配置的就是:SCB-AIRCR NVIC-IP[**] NVIC-ISER

文档评论(0)

shenlan118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档