- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 随机过程(北大何书元)-课后习题集答案.pdf VIP
- 水文预报课程设计报告.doc
- 智慧职教平法识图与钢筋算量(宁波职院)章节测验作业期末考试答案.docx
- 中职外研版英语基础模块2全册教案教学设计.docx
- 理想 RISO 9050 7050 3050 7010 3010 闪彩印王中文技术维修手册 后面可以参考理想闪彩印王 EX7200 EX9050 EX9000 EX7250 系列中文维修手册 .pdf
- 索爱E-19蓝牙音箱说明书用户手册.pdf
- 地铁可视化接地管理系统安装工法19.3.6.doc
- 初中地理教学中学生学习兴趣的培养获奖科研报告论文.docx
- 情绪智力量表(Law,K.S.,Wong,C.S.&Song,L.,2004).doc
- 室外给排水施工方案.docx VIP
文档评论(0)