/*************************************************************
Function : OnePulse_GPIO_Init
Description: 定时器器的引脚初始化
Input : none
return : none
*************************************************************/
static void OnePulse_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//TIM4 CH1对应的引脚配置成复用输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//TIM4 CH2对应的引脚配置成悬空输入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
/*************************************************************
Function : OnePulse_TIM4_Init
Description: 定时器4配置
Input : none
return : none
*************************************************************/
static void OnePulse_TIM4_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_ICInitTypeDef TIM_ICInitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);//初始化TIM4的时钟
/*---------------------------------------------------------
TIM4的定时时基为1/(72M/72)=1us
TIM4的CH1配置成PWM2输出模式,TIM4的CH2配置成输入捕获模式,
PWM2模式增计数下,计数值小于比较值为无效电平即低电平,
TIM2 CH2检测到一个上升沿后,经过一定的延时时间,输出一个脉冲,
延时时间 = 10000 * 1us = 10ms
脉冲宽度 = (65535 - 10000) * 1us = 65.535ms。
---------------------------------------------------------*/
TIM_TimeBaseStructure.TIM_Period = 65535;//定时器周期值
TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1;//预分频
TIM_TimeBaseStructure.TIM_ClockDivision = 0;//时钟不分频
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//增计数模式
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);//初始化定时器时基
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;//TIM4 CH1配置成PWM2输出模式
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//输出使能
TIM_OCInitStructure.TIM_Pulse = 10000;//设置跳变值
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//有效电平为高电平
TIM_OC1Init(TIM4, &TIM_OCInitStructure);
TIM_ICStructInit(&TIM_ICInitStructure);//初始化输入捕获结构体
TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;//TIM4 CH2 配置为输入捕获模式
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;//上升沿捕获
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//管教与寄存器直接对应
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;//不与分频
TIM_ICInitStructure.TIM_ICFilter = 0;//不滤波
TIM_ICInit(TIM4, &TIM_ICInitStructure);//初始化TIM4 CH2
TIM_SelectOnePulseMode(TIM4, TIM_OPMode_Single);//选择定时器为单脉冲模式
TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2);//选择触发源为IC2
TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Trigger);//选择定时器从模式为上升沿触发
}
/*************************************************************
Function : OnePulse_Init
Description: 单脉冲模式初始化
Input : none
return : none
*************************************************************/
void OnePulse_Init(void)
{
OnePulse_GPIO_Init();
OnePulse_TIM4_Init();
}
#ifndef __ONEPULSE_H__
#define __ONEPULSE_H__
#include "stm32f10x.h"
void OnePulse_Init(void);
#endif
/*************************************************************
Function : main
Description: main入口
Input : none
return : none
*************************************************************/
int main(void)
{
BSP_Init();
OnePulse_Init();
PRINTF("\nmain() is running!\r\n");
while(1)
{
LED1_Toggle();
Delay_ms(1000);
}
}
上一篇:STM32 六步PWM输出
下一篇:STM32 定时器输出比较翻转模式
推荐阅读最新更新时间:2024-03-16 15:14