
STM3--输入捕获和输出比较.docx
8页概述首先,明确一点对比AD的构造,stm32有3个AD,每个AD有很多通道〔一个外设可以有多个中断通道,但是每个中断通道只有一个外设〕,使用哪个通道就配置成哪个通道〔只设置用一个就可以〕,这里定时器也如此,有很多定时器TIMx,每个定时器有很多CHx<通道>,可以配置为输入捕捉-------测量频率用,也可以配置为输出比较--------输出PWM使用输入捕获输入捕捉:可以用来捕获外部事件,并为其赋予时间标记以说明此事件的发生时刻.外部事件发生的触发信号由单片机中对应的引脚输入〔对应的引脚设置成输入〕〔具体可以参考单片机的datasheet〕,也可以通过模拟比较器单元来实现.时间标记可用来计算频率,占空比与信号的其他特征,以与为事件创建日志,主要是用来测量外部信号的频率.1.1、朋友,可以解释一下输入捕获的工作原理不?很简单,当你设置的捕获开始的时候,cpu会将计数寄存器的值复制到捕获比较寄存器中并开始计数,当再次捕捉到电平变化时,这是计数寄存器中的值减去刚才复制的值就是这段电平的持续时间,你可以设置上升沿捕获、下降沿捕获、或者上升沿下降沿都捕获.它没多大用处,最常用来测频率.1.2、计数寄存器的初值,是自己写进去的吗?是的,不过默认不要写入〔即计数寄存器为零〕1.3、我如果捕获上升沿,两个值相减,代表的时两个上升沿中间那段电平的时间.对不?是的1.4、timer1有五个通道〔对应五个IO引脚〕,在同一时刻,只能捕获一个引脚的值,对不?那是肯定的,通道很像ADC通道,是可以进行切换的.输出比较输出比较:定时器中的计数寄存器在初始化完后会自动的计数,从bottom计数到top,并且有不同的工作模式.另外,还有个比较寄存器.一旦计数寄存器在从bottom到top计数过程中与比较寄存器匹配〔在计数的过程中进行比较,不单指bottom或top〕则会产生比较中断〔比较中断使能的情况下〕,这里的匹配指的是计数寄存器的值与比较寄存器的值相等.然后根据不同的工作模式计数寄存器将清零或者计数到top值.2.1、那输出比较的原理你可以帮我介绍一下不?这里有两个单元:一个计数器单元和一个比较单元,比较单元就是个双缓冲寄存器,比较单元的值是可以根据不同的模式设置的,与此同时,计数器在不停的计数,并不停的与比较寄存器中的值进行比较,当计数器的值与比较寄存器的值相等的时候一个比较匹配就发生了,根据自己的设置,如果匹配了,那么对应的io口电平取反、变低、还是变高,就会产生不同的波形了.2.2、比较单元的值是人为设进去的吧?是的,但是他要根据你的控制寄存器的配置,来初始化你的比较匹配寄存器.2.3、下面这个总看不懂,好像不不止你说的那几种情况:"匹配了是io电平取反、变低、还是变高,就会产生不同的波形了"就是比较匹配了你要IO电平怎么办?是清0还是置1?还是怎么样?这样才能产生波形啊要不然你要比较单元有什么用呢?2.4、设置输出就是置1,清除输出就是置0,切换输出就是将原来的电平取反,对不?是的你理解的很快2.5、011:计数器向上计数达到最大值时将引脚置1,达到0时,引脚电平置0,,对不?恩2.6、定时器1的输出比较模式怎么用.利用这个功能输出一个1KHZ,占空比为10%的程序怎么写啊?求高人指点1、陪定时器1的功能为特殊功能,不是普通IO 在PERCFG这里2、P1SEL引脚选择3、P1DIR设为输出4、T3CC0设置周期5、T3CC1设置占空比6、T3CCTL0 设置通道07、T3CCTL1 设置通道18、T3CTL设为模模式9、用T3CTL打开即可****以下是用定时器做频率源,用定时器测量该频率的应用程序!!!****调试STM32的定时器好几天了,也算是对STM32的定时器有了点清楚的认识了.我需要测量4路信号的频率然后通过DMA将信号的频率传输到存储器区域,手册说的很明白每个定时器有4个独立通道.然后我就想能不能将这4路信号都连接到一个定时器的4个通道上去.理论上应该是行的通的.刚开始俺使用的是TIM2的123通道,TIM4的2通道来进行频率的测量.由于没有频率发生器,所以我用tim3作为信号源,用TIM2,TIM4来进行测量就ok了〔刚好4个通道了〕.请看一开始的程序,以TIM2的1,3通道为例子〔2通道设置方法一样〕:TIM_ICInitStructure.TIM_ICMode =TIM_ICMode_ICAP; //配置为输入捕获模式TIM_ICInitStructure.TIM_Channel =TIM_Channel_1; //选择通道1TIM_ICInitStructure.TIM_ICPolarity =TIM_ICPolarity_Rising; //输入上升沿捕获TIM_ICInitStructure.TIM_ICSelection =TIM_ICSelection_DirectTI; //通道方向选择TIM_ICInitStructure.TIM_ICPrescaler =TIM_ICPSC_DIV1;//每次检测到捕获输入就触发一次捕获TIM_ICInitStructure.TIM_ICFilter =0x0; //滤波TIM_ICInit












