STM8输入捕获(网上).doc

STM8输入捕获(网上).doc

ID:59252475

大小:725.00 KB

页数:6页

时间:2020-09-08

STM8输入捕获(网上).doc_第1页
STM8输入捕获(网上).doc_第2页
STM8输入捕获(网上).doc_第3页
STM8输入捕获(网上).doc_第4页
STM8输入捕获(网上).doc_第5页
资源描述:

《STM8输入捕获(网上).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、[原]STM8输入捕获2014-9-4阅读324评论0最近在用STM8的过程中需要用到一个频率检测的功能,还好STM8S207的定时器中自带有输入捕获功能,之前还想着用定时器计数方式来实现的,但既然人家提供了该功能,那就试试吧,由于硬件里面接的是PC1引脚就只看了Timer1,其他的定时器应该也是类似的,看了资料之后发现STM8的输入捕获其实与STC12C5A60S2中的PCA捕获模式很类似,但是看资料没有后者清晰易懂。。。在捕获模式中,基本上只用到了读进程,在STM8中有一个影子寄存器,但对于我们来说是看不到的,我们仅操作预装载寄存器即可。而且需要注意的是无论

2、是计数器还是捕获/比较寄存器都是先读/写高8位,后读/写低8位数据。在文档中给出了一个输入捕获模式的流程按着这个流程来就可以完成我们的输入捕获文档中首先提到将TIM1_CCMR1寄存器的CC1S位写01,将端口配置为输入,但在TIM1_CCMR1的寄存器中有说明CC1S位的更改需在通道关闭时(TIM1_CCER1寄存器的CC1E=0)才可写入,因此在配置中先将TIM1_CCER1寄存器的CC1E位写0,然后将TIM1_CCMR1的CC1S位写01,TIM1_CCER1&=(unsignedchar)~0x01;//清零TIM1_CCER1中的CC1E位,之后才可

3、配置TIM1_CCMR1TIM1_CCMR1=0x01;//配置TIM1_CCMR1中的CC1S位为1,CC1通道配置为输入,IC1映射到TI1FP1上//无滤波器、无预分频器(捕获输入口上检测到的每一个边沿都触发一次捕获)TIM1_CCMR1寄存器有两种功能,分别对应捕获模式和比较模式,只需要捕获模式即可滤波器是用来避免频率波动的直接写0即可,无滤波器,分频器我们也写00不用分频器,当然也可以使用分频器,提高准确率。接着是设置触发方式,我们选择上升沿触发TIM1_CCER1&=(unsignedchar)~0x02;//上升沿或者高电平触发最后使能捕获功能,设

4、置TIM1_CCER1寄存器的CC1E位=1,由于我们采用中断方式因此也将TIM1_IER寄存器的CC1IE位置1,允许中断请求。完整的初始化代码如下voidsignal_capture_Init(void){TIM1_CNTRH=0x00;//清零计数器高8位TIM1_CNTRL=0x00;//清零计数器低8位TIM1_PSCRH=0x00;//计数器时钟分频高8位TIM1_PSCRL=0x10;//计数器时钟分频低8位16分频TIM1_CCER1&=(unsignedchar)~0x01;//清零TIM1_CCER1中的CC1E位,之后才可配置TIM1_CC

5、MR1TIM1_CCMR1=0x01;//配置TIM1_CCMR1中的CC1S位为1,CC1通道配置为输入,IC1映射到TI1FP1上//无滤波器、无预分频器(捕获输入口上检测到的每一个边沿都触发一次捕获)TIM1_CCER1&=(unsignedchar)~0x02;//上升沿或者高电平触发TIM1_IER

6、=0x02;//CC1IE=1,使能捕获/比较1中断TIM1_CCER1

7、=0x01;//捕获使能TIM1_CR1

8、=0x01;//使能定时/计数器}当发生一个输入捕获时,计数器的值被传送到TIM1_CCR1寄存器中,计时器的时钟源在程序中我们设置为16分

9、频分频过后计数器的频率为1MHz,这里采用分频主要是避免计数器溢出,这样同时也降低了精度,同时设置计数器的初值为0,计数器默认计数方式是向上计数,计到最大值后又从0开始计数,中断处理代码如下@far@interruptvoidsignal_capture_irq(void){if(TIM1_SR1&0x02){TIM1_SR1&=(unsignedchar)~0x02;//清除CC1IF标志if(vsync_cap_data_old==0x00){//第一次捕获中断来临vsync_cap_data_old=TIM1_CCR1H;//先读取高8位数据vsync_c

10、ap_data_old=(unsignedint)(vsync_cap_data_old<<8)+TIM1_CCR1L;//再读取低8位数据}else{//第二次捕获中断来临vsync_cap_data_new=TIM1_CCR1H;//先读取高8位数据vsync_cap_data_new=(unsignedint)(vsync_cap_data_new<<8)+TIM1_CCR1L;//再读取低8位数据TIM1_IER&=(unsignedchar)~0x02;//禁止通道1捕获/比较中断TIM1_CR1&=(unsignedchar)~0x01;//停止计数

11、器if(vsync_ca

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。