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);

}

}



相关文章
STM32F103标准外设库——SysTick系统定时器(八)
STM32F103标准外设库——SysTick系统定时器(八)
1849 0
STM32F103标准外设库——SysTick系统定时器(八)
|
芯片
Keil5中添加C51芯片
Keil5中添加C51芯片
1683 0
|
存储
matlab求解方程和多元函数方程组
matlab求解方程和多元函数方程组
1522 0
|
11月前
|
搜索推荐 数据挖掘 API
Lazada 淘宝详情 API 的价值与应用解析
在全球化电商浪潮下,Lazada 和淘宝作为东南亚和中国电商市场的关键力量,拥有海量商品数据和庞大用户群体。详情 API 接口为电商开发者、商家和分析师提供了获取商品详细信息(如描述、价格、库存、评价等)的工具,助力业务决策与创新。本文深入解析 Lazada 和淘宝详情 API 的应用场景及价值,并提供 Python 调用示例,帮助读者更好地理解和运用这两个强大的工具。
274 18
【AD速成】半小时入门AltiumDesigner之绘制原理图(四)
【AD速成】半小时入门AltiumDesigner之绘制原理图(四)
5522 3
环形队列+DMA空闲中断+接收串口数据
环形队列+DMA空闲中断+接收串口数据
978 0
|
缓存 程序员 内存技术
STM32定时器配置(TIM1-TIM8)高级定时器+普通定时器,定时计数模式下总结
STM32定时器配置(TIM1-TIM8)高级定时器+普通定时器,定时计数模式下总结
1610 0
【STM32】高级定时器TIM1计数中断配置
【STM32】高级定时器TIM1计数中断配置
1020 0
|
芯片
嵌入式STM32中时钟系统详细分析
嵌入式STM32中时钟系统详细分析
367 0
嵌入式STM32中时钟系统详细分析
STM32学习笔记(3) TIM基本定时器
代码中有这样一条,有人会问函数TIM_ClearFlag()和函数TIM_ClearITPendingBit()有什么区别?其实重点在Flag和IT,前者是外设的状态标志,而后者是外设的中断标志。状态标志就是一个外设它有自身的一些标志位(Flag),来表明它处于什么状态,下图就是定时器的状态标记。中断标志就是使能外设的中断后,每次发生一次中断,它会表明发生了什么样的中断,同样中断也有相应的标记。两者分别靠函数TIM_GetFlagStatus()和函数TIM_GetITStatus()来获取
1386 0