STM32的TIM1_CH1N反向引脚输出PWM波

简介: STM32的TIM1_CH1N反向引脚输出PWM波

说明


PB14 PB15是STM32的TIM1的反向引脚 L11 H8 F2 35 53 75 PB14 I/O FT PB14 SPI2_MISO/TIM1_CH2N USART3_RTS(8)/ L12 G8 F1 36 54 76 PB15 I/O FT PB15 SPI2_MOSI/I2S2_SD TIM1_CH3N(8)/ 可以输出PWM波 极性与TIM1_CH相反。 设置一个pwm波形,设置他的占空比和频率即可。


代码

/**


  • @file    motor.c
  • @author  STMicroelectronics
  • @version V1.0
  • @date    2016.2.2
  • @brief   聚焦电机控制

  • @attention

1000hz 20%占空比


*/

#include "IRFocusMotor.h" #include "gpio_array.h" /**

  • @brief  配置TIM2复用输出PWM时用到的I/O
  • @param  无
  • @retval 无

*/ #define IRPWMPERIOD 1000 //此刻频率1k #define IRPWMDUTY 200 //此刻占空比80% static void TIM1_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure;

/* 设置TIM2 CLK 为 72MHZ */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

/* GPIOA clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE); //  GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);//配置 PB5 为复用输出。

/*GPIOA Configuration: TIM2 channel 1 and 2 as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;     // 复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);

}

/**

  • @brief  配置TIM3输出的PWM信号的模式,如周期、极性、占空比
  • @param  无
  • @retval 无

/ /

  • TIMxCLK/CK_PSC --> TIMxCNT --> TIMx_ARR --> TIMxCNT 重新计数
TIMx_CCR(电平发生变化)
复制代码
  • 信号周期=(TIMx_ARR +1 ) * 时钟周期
  • 占空比=TIMx_CCR/(TIMx_ARR +1)

*/ static void TIM1_Mode_Config(void) {

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure; TIM_OCInitTypeDef  TIM_OCInitStructure;

/* Time base configuration */

TIM_TimeBaseStructure.TIM_Period = IRPWMPERIOD;       //当定时器从0计数到999,即为1000次,为一个定时周期 TIM_TimeBaseStructure.TIM_Prescaler = 719;    //设置预分频:不预分频,即为72MHz TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ; //设置时钟分频系数:不分频(这里用不到) TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数模式 TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

/* PWM1 Mode configuration: Channel1 */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;    //配置为PWM模式1 TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; TIM_OCInitStructure.TIM_Pulse = IRPWMDUTY;   //设置跳变值,当计数器计数到这个值时,电平发生跳变 TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;  //当定时器计数值小于CCR1_Val时为高电平

TIM_OC3Init(TIM1, &TIM_OCInitStructure); //使能通道1 TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);

/* PWM1 Mode configuration: Channel2 */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;    //配置为PWM模式1 TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; TIM_OCInitStructure.TIM_Pulse = IRPWMDUTY;  //设置通道2的电平跳变值,输出另外一个占空比的PWM TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;  //当定时器计数值小于CCR1_Val时为高电平 TIM_OC2Init(TIM1, &TIM_OCInitStructure);  //使能通道2 TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);

TIM_ARRPreloadConfig(TIM1, ENABLE); // 使能TIM3重载寄存器ARR TIM_CtrlPWMOutputs(TIM1, ENABLE);

/* TIM3 enable counter */ TIM_Cmd(TIM1, ENABLE);                   //使能定时器3 }

/**

  • @brief  TIM3 输出PWM信号初始化,只要调用这个函数
TIM3的四个通道就会有PWM信号输出
复制代码
  • @param  无
  • @retval 无

*/ void TIM1_PWM_Init(void) { TIM1_GPIO_Config(); TIM1_Mode_Config(); }

void IRFocus_Ctrl(unsigned char state) {

if(state) { TIM_CCxCmd(TIM1, TIM_Channel_3, DISABLE); TIM_CCxCmd(TIM1, TIM_Channel_2, DISABLE);

TIM_SetCompare3(TIM1,IRPWMDUTY); TIM_CCxCmd(TIM1, TIM_Channel_3, ENABLE); } else {

TIM_CCxCmd(TIM1, TIM_Channel_3, DISABLE); TIM_CCxCmd(TIM1, TIM_Channel_2, DISABLE);

TIM_SetCompare2(TIM1,IRPWMDUTY); TIM_CCxCmd(TIM1, TIM_Channel_2, ENABLE);

}

}



相关文章
|
3月前
|
C语言
输出4种波形的函数信号发生器
设计了一款基于MCS-51单片机的函数信号发生器,能生成四种波形(正弦、方、三角、锯齿),频率范围10-100Hz,步进值0.1-10Hz。系统包括5V电源、AT89C51单片机、DAC0832、LM358、LCD1602、键盘和LED电路。通过按键切换波形、设定频率和步进值,LCD实时显示信息,LED指示波形类型。Proteus和Altium仿真验证了设计功能。
69 10
|
3月前
|
芯片
灌电流与拉电流的含义及电路解析
上拉电阻是用来解决总线驱动能力不足时提供电流的,一般说法是拉电流。下拉电阻是用来吸收电流的,也就是灌电流。在数字电路中,拉电流和灌电流是衡量电路输出驱动能力(注意:拉、灌都是对输出端而言的,所以是驱动能力)的参数。 在集成电路中,拉电流输出和灌电流输出是一个很重要的概念。 一、什么是拉电流 由于数字电路的输出只有高、低(0,1)两种电平值,高电平输出时,一般是输出端对负载提供电流,其提供电流的数值叫“拉电流”。例如在使用反向器作输出显示时,当输出端为高电平时才符合发光二极管正向连接的要求,但这种拉电流输出对于反向器只能输出零点几毫安的电流用这种方法想驱动二极管发光是不合理的(因发光二极管
88 2
|
存储 编译器
单片机原理及其应用——单片机外部中断实验(八段数码管通过按键依次显示0~9数字)
单片机原理及其应用——单片机外部中断实验(八段数码管通过按键依次显示0~9数字)
单片机原理及其应用——单片机外部中断实验(八段数码管通过按键依次显示0~9数字)
|
12月前
无源晶振匹配电容—计算方法
无源晶振匹配电容—计算方法
188 0
|
算法 异构计算
m基于双PN序列的数据帧检测,帧同步verilog实现,含testbench
m基于双PN序列的数据帧检测,帧同步verilog实现,含testbench
292 0
【单片机】数码管矩阵显示
【单片机】数码管矩阵显示
76 0
OpenMV输出PWM,实现对舵机控制
OpenMV输出PWM,实现对舵机控制
1659 0
无规则波形发生函数
无规则波形发生函数
54 0
使用T0,方式2,在P1.0输出周期为400µs,占空比为4:1的矩形脉冲,要求在P1.0引脚接有虚拟示波器,观察P1.0引脚输出的矩形脉冲波形
使用T0,方式2,在P1.0输出周期为400µs,占空比为4:1的矩形脉冲,要求在P1.0引脚接有虚拟示波器,观察P1.0引脚输出的矩形脉冲波形
labview图形显示正弦曲线信号发生器频率幅值相位数字示波器滤波器频谱分析
labview图形显示正弦曲线信号发生器频率幅值相位数字示波器滤波器频谱分析
312 0