STM32_inPWM

所属分类:嵌入式/单片机/硬件编程
开发工具:C/C++
文件大小:881KB
下载次数:486
上传日期:2009-08-30 19:07:59
上 传 者longtiger
说明:  STM32定时器的基本应用,PWM的输入捕获,硬件调试通过,基本没有误差。
(STM32 Timer basic applications, PWM input capture, hardware debugging through, basically no error.)

文件列表:
31 STM32_PWM_输入\cortexm3_macro.s (10439, 2008-10-09)
31 STM32_PWM_输入\main.c (3600, 2008-10-09)
31 STM32_PWM_输入\stm32f10x_conf.h (6439, 2008-10-09)
31 STM32_PWM_输入\stm32f10x_it.c (31464, 2008-10-09)
31 STM32_PWM_输入\stm32f10x_it.h (3973, 2008-10-09)
31 STM32_PWM_输入\stm32f10x_vector.s (13002, 2008-10-09)
31 STM32_PWM_输入\STM32_PWM_Input.plg (191, 2008-10-09)
31 STM32_PWM_输入\STM32_PWM_Input.Uv2 (3520, 2008-10-09)
31 STM32_PWM_输入\STM32_PWM_Input_STM32_PWM_Input.dep (15447, 2009-07-21)
31 STM32_PWM_输入\STM32_PWM_Input_Target 1.dep (82, 2008-10-09)
31 STM32_PWM_输入\STM32_PWM_Input_Opt.Bak (3700, 2009-07-16)
31 STM32_PWM_输入\STM32_PWM_Input.Opt (3700, 2009-07-21)
31 STM32_PWM_输入\OBJ\cortexm3_macro.o (2448, 2009-03-17)
31 STM32_PWM_输入\OBJ\main.crf (160394, 2009-03-17)
31 STM32_PWM_输入\OBJ\main.d (1532, 2009-03-17)
31 STM32_PWM_输入\OBJ\main.o (193864, 2009-03-17)
31 STM32_PWM_输入\OBJ\setclock.crf (147439, 2009-03-17)
31 STM32_PWM_输入\OBJ\setclock.d (1573, 2009-03-17)
31 STM32_PWM_输入\OBJ\setclock.o (174104, 2009-03-17)
31 STM32_PWM_输入\OBJ\setgpio.crf (156030, 2009-03-17)
31 STM32_PWM_输入\OBJ\setgpio.d (1582, 2009-03-17)
31 STM32_PWM_输入\OBJ\setgpio.o (191544, 2009-03-17)
31 STM32_PWM_输入\OBJ\setnvic.crf (147282, 2009-03-17)
31 STM32_PWM_输入\OBJ\setnvic.d (1543, 2009-03-17)
31 STM32_PWM_输入\OBJ\setnvic.o (172540, 2009-03-17)
31 STM32_PWM_输入\OBJ\setpwmi.crf (46655, 2009-03-17)
31 STM32_PWM_输入\OBJ\setpwmi.d (306, 2009-03-17)
31 STM32_PWM_输入\OBJ\setpwmi.o (51556, 2009-03-17)
31 STM32_PWM_输入\OBJ\setusart.crf (151891, 2009-03-17)
31 STM32_PWM_输入\OBJ\setusart.d (1621, 2009-03-17)
31 STM32_PWM_输入\OBJ\setusart.o (178432, 2009-03-17)
31 STM32_PWM_输入\OBJ\stm32f10x_flash.crf (38373, 2009-03-17)
31 STM32_PWM_输入\OBJ\stm32f10x_flash.d (373, 2009-03-17)
31 STM32_PWM_输入\OBJ\stm32f10x_flash.o (71388, 2009-03-17)
31 STM32_PWM_输入\OBJ\stm32f10x_gpio.crf (42608, 2009-03-17)
31 STM32_PWM_输入\OBJ\stm32f10x_gpio.d (425, 2009-03-17)
31 STM32_PWM_输入\OBJ\stm32f10x_gpio.o (69032, 2009-03-17)
31 STM32_PWM_输入\OBJ\stm32f10x_it.crf (154922, 2009-03-17)
31 STM32_PWM_输入\OBJ\stm32f10x_it.d (1773, 2009-03-17)
... ...

参考手册资料说明,与本程序可能不完全一样,仅供学习参参考使用: PWM输入模式 该模式是输入捕获模式的一个特例,除下列区别外,工作过程与输入捕获模式相 同: ● 两个ICx 信号被映射同一个TIx 输入。 ● 这2 个ICx 信号为边沿有效,但是极性相反。 ● 其中一个TIxFP 信号被作为触发输入信号,并且从模式控制器被配置成复 位模式。 例如,你能够测量输入到TI1 上的PWM 信号的长度(TIMx_CCR1 寄存器)和占空 比(TIMx_CCR2 寄存器),具体步骤如下(取决于CK_INT 的频率和预分频器的值) ● 选择TIMx_CCR1 的有效输入端:置TIMx_CCMR1 寄存器的CC1S=01(选 择TI1); ● 选择TI1FP1 的有效极性(用来捕获数据到TIMx_CCR1 中和清除计数器): 置CC1P=0; ● 选择TIMx_CCR2 的有效输入端:置TIMx_CCMR1 寄存器的CC2S=10(选 择TI1); ● 选择TI1FP2 的有效极性(用来捕获数据到TIMx_CCR2):置CC2P=1(下降 沿有效); ● 选择有效的触发输入信号:置TIMx_SMCR 寄存器中的TS=101(选择 TI1FP1); ● 配置从模式控制器为复位模式:置TIMx_SMCR 中的SMS=100; ● 使能捕获:置TIMx_CCER 寄存器中CC1E=1 且CC2E=1。 从模式:复位模式 在发生一个触发输入事件时,计数器和它的预分频器能够重新被初始化;同时, 如果TIMx_CR1 寄存器的URS 位为低,还产生一个更新事件UEV;然后所有的 预装载寄存器(TIMx_ARR, TIMx_CCRx)都被更新了。 在以下的例子中,TI1 输入端的上升沿导致向上计数器被清零: ● 配置通道1 以检测TI1 的上升沿。配置输入滤波器的带宽(在本例中,不需 要任何滤波器,因此保持IC1F=0000)。触发操作中不使用捕获预分频器, 所以不需要配置。CC1S 位只选择输入捕获源,即TIMx_CCMR1 寄存器中 CC1S=01。置TIMx_CCER 寄存器中CC1P=0 以确定极性(只检测上升 沿)。 ● 置TIMx_SMCR 寄存器中SMS=100 , 配置定时器为复位模式; 置 TIMx_SMCR 寄存器中TS=101,选择TI1 作为输入源。 ● 置TIMx_CR1 寄存器中CEN=1,启动计数器。 计数器开始依据内部时钟计数,然后正常运转直到TI1 出现一个上升沿;此时, 计数器被清零然后从0 重新开始计数。同时,触发标志(TIMx_SR 寄存器中的TIF 位)被设置,根据TIMx_DIER 寄存器中TIE(中断使能)位和TDE(DMA 使能)位的 设置,产生一个中断请求或一个DMA 请求。 下图显示当自动重装载寄存器TIMx_ARR=0x36 时的动作。在TI1 上升沿和计数 器的实际复位之间的延时取决于TI1 输入端的重同步电路。 有用函/******************************************************************************* * Function Name : TIM_SelectInputTrigger * Description : Selects the Input Trigger source * Input : - TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM * peripheral. * - TIM_InputTriggerSource: The Input Trigger source. * This parameter can be one of the following values: * - TIM_TS_ITR0: Internal Trigger 0 * - TIM_TS_ITR1: Internal Trigger 1 * - TIM_TS_ITR2: Internal Trigger 2 * - TIM_TS_ITR3: Internal Trigger 3 * - TIM_TS_TI1F_ED: TI1 Edge Detector * - TIM_TS_TI1FP1: Filtered Timer Input 1 * - TIM_TS_TI2FP2: Filtered Timer Input 2 * - TIM_TS_ETRF: External Trigger input * Output : None * Return : None *******************************************************************************/ void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, u16 TIM_InputTriggerSource) { u16 tmpsmcr = 0; /* Check the parameters */ assert_param(IS_TIM_123458_PERIPH(TIMx)); assert_param(IS_TIM_TRIGGER_SELECTION(TIM_InputTriggerSource)); /* Get the TIMx SMCR register value */ tmpsmcr = TIMx->SMCR; /* Reset the TS Bits */ tmpsmcr &= SMCR_TS_Mask; /* Set the Input Trigger source */ tmpsmcr |= TIM_InputTriggerSource; /* Write to TIMx SMCR */ TIMx->SMCR = tmpsmcr; } /******************************************************************************* * Function Name : TIM_SelectSlaveMode * Description : Selects the TIMx Slave Mode. * Input : - TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM * peripheral. * - TIM_SlaveMode: specifies the Timer Slave Mode. * This paramter can be one of the following values: * - TIM_SlaveMode_Reset * - TIM_SlaveMode_Gated * - TIM_SlaveMode_Trigger * - TIM_SlaveMode_External1 * Output : None * Return : None *******************************************************************************/ void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, u16 TIM_SlaveMode) { /* Check the parameters */ assert_param(IS_TIM_123458_PERIPH(TIMx)); assert_param(IS_TIM_SLAVE_MODE(TIM_SlaveMode)); /* Reset the SMS Bits */ TIMx->SMCR &= SMCR_SMS_Mask; /* Select the Slave Mode */ TIMx->SMCR |= TIM_SlaveMode; } 捕获/比较寄存器1(TIMx_CCR1) CCR1[15:0]: 捕获/比较1的值 若CC1通道配置为输出: CCR1是装入当前捕获/比较1寄存器的值(预装载值)。 如果在TIMx_CCMR1寄存器(OC1PE位)中未选择预装载特性,其始终装入当前寄存器中。 否则,只有当更新事件发生时,此预装载值才装入当前捕获/比较1寄存器中。 当前捕获/比较寄存器包含了与计数器TIMx_CNT比较的值,并且在OC1端口上输出信号。 若CC1通道配置为输入: CCR1包含了由上一次输入捕获1事件(IC1)传输的计数器值。 捕获/比较寄存器2(TIMx_CCR2) CCR2[15:0]: 捕获/比较2的值 若CC2通道配置为输出: CCR2是装入当前捕获/比较2寄存器的值(预装载值)。 如果在TIMx_CCMR2寄存器(OC2PE位)中未选择预装载特性,其始终装入当前寄存器中。 否则,只有当更新事件发生时,此预装载值才装入当前捕获/比较2寄存器中。 当前捕获/比较寄存器包含了与计数器TIMx_CNT比较的值,并且在OC端口上输出信号。 若CC2通道配置为输入: CCR2包含了由上一次输入捕获2事件(IC2)传输的计数器值。 1 //实验方法: 请您连接好串口调试助手,注意:Baud Rate is 19200 在PA1口输入您的PWM信号, 在上位机后由到一些信息: The IC2[1] is 6107 The IC1[1] is 4828 The Duty is 79 The Frequency is 589 ,This is the 1 Pulse The IC2[2] is 6028 The IC1[2] is 1740 The Duty is 28 The Frequency is 597 ,This is the 2 Pulse The IC2[3] is 6062 The IC1[3] is 1780 The Duty is 29 The Frequency is 593 ,This is the 3 Pulse The IC2[4] is 6106 The IC1[4] is 4807 The Duty is 78 The Frequency is 589 ,This is the 4 Pulse The IC2[5] is 6020 The IC1[5] is 1757 The Duty is 29 The Frequency is 5*** ,This is the 5 Pulse 相信你自己试一下就明白了 ,如果想知道的很清楚,请您自己看一下资料。

近期下载者

相关文件


收藏者