STM32TIM模块产生PWM

发布者:糖三角最新更新时间:2016-10-08 来源: eefocus关键字:STM32  TIM模块  产生PWM 手机看文章 扫描二维码
随时随地手机看文章
 这个是STM32的PWM输出模式,STM32的TIM1模块是增强型的定时器模块,天生就是为电机控制而生,可以产生3组6路PWM,同时每组2路PWM为互补,并可以带有死区,可以用来驱动H桥。

  下面的代码,是利用TIM1模块的1、2通道产生一共4路PWM的代码例子,类似代码也可以参考ST的固件库中相应example


C语言: TIM1模块产生PWM,带死区
     
//Step1.开启TIM和相应端口时钟
//启动GPIO
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | \
                       RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD,\
                       ENABLE);
//启动AFIO
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
//启动TIM1
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
//Step2. GPIO做相应设置,为AF输出
//PA.8/9口设置为TIM1的OC1输出口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//PB.13/14口设置为TIM1_CH1N和TIM1_CH2N输出口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//Step3. TIM模块初始化
void TIM_Configuration(void)
{
    TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;
    TIM_OCInitTypeDef TIM_OCInitStructure;
    TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
    //TIM1基本计数器设置(设置PWM频率)
    //频率=TIM1_CLK/(ARR+1)
    TIM_BaseInitStructure.TIM_Period = 1000-1;
    TIM_BaseInitStructure.TIM_Prescaler = 72-1;
    TIM_BaseInitStructure.TIM_ClockDivision = 0;
    TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_BaseInitStructure.TIM_RepetitionCounter = 0;
    TIM_TimeBaseInit(TIM1, &TIM_BaseInitStructure);
    //启用ARR的影子寄存器(直到产生更新事件才更改设置)
    TIM_ARRPreloadConfig(TIM1, ENABLE);
    //TIM1_OC1模块设置(设置1通道占空比)
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
    TIM_OCInitStructure.TIM_Pulse = 120;
    TIM_OC1Init(TIM1, &TIM_OCInitStructure);
    //启用CCR1寄存器的影子寄存器(直到产生更新事件才更改设置)
    TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
    //TIM2_OC2模块设置(设置2通道占空比)
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
    TIM_OCInitStructure.TIM_Pulse = 680;
    TIM_OC2Init(TIM1, &TIM_OCInitStructure);
    //启用CCR2寄存器的影子寄存器(直到产生更新事件才更改设置)
    TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
   
    //死区设置
    TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
    TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
    TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
    TIM_BDTRInitStructure.TIM_DeadTime = 0x90; //这里调整死区大小0-0xff
    TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;
    TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;
    TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
    TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);
   
    //TIM1开启
    TIM_Cmd(TIM1, ENABLE);
    //TIM1_OC通道输出PWM(一定要加)
    TIM_CtrlPWMOutputs(TIM1, ENABLE);
}
  
  其实,PWM模块还可以有很多花样可以玩,比方在异常时(如CPU时钟有问题),可以紧急关闭输出,以免发生电路烧毁等严重事故
关键字:STM32  TIM模块  产生PWM 引用地址:STM32TIM模块产生PWM

上一篇:关于STM32 PB3 PB4 如何设置成普通GPIO的配置
下一篇:步进电机加减速程序,适合做GPIO设置

推荐阅读最新更新时间:2024-03-16 15:14

STM32之CAN---错误管理分析
1 几个重要概念 根据ISO11898有如下几个重要的与CAN相关的定义: Fault confinement(错误界定) CAN nodes shall be able to distinguish short disturbances from permanent failures. Defective transmitting nodes shall be switched off. Switched off means a node is logically disconnected from the bus, so that it can neither send nor receive any
[单片机]
<font color='red'>STM32</font>之CAN---错误管理分析
STM32应用案例 基于STM32F103ZE开发的数码相册
1.硬件平台 CPU:STM32F103ZE 屏幕:3.5寸TFTLCD屏 触控:电阻式触摸屏xpt2046 SD卡、外扩Sram 2.示例效果 SD卡检测和图片搜索 图片加载与显示 3.软件设计 3.1 遍历目录   遍历目录,搜索所有的bmp格式图片,以链表方式保存图片名,方便接下来图片切换。 typedef struct FILE_info { char file_name ; u16 number;//保存第几张图片 struct FILE_info *next; struct FILE_info *pre; }FILE_INFO; FILE_INFO *bmp_head=NULL; /*创
[单片机]
<font color='red'>STM32</font>应用案例 基于STM32F103ZE开发的数码相册
stm32 学习 (设置TIM4输出4路 pwm J-LINK仿真验证)
使用单片机:stm32f103c8t6 资源 RAM: 20K; flash: 64K;CPU频率: 72M;通用I/O: 32个;UART: 3个;SPI:2个;USB:1个;CAN: 1个;IIC: 2个 12 位同步 ADC: 2 组 10 通道 ; 工作电压: 2.0 至 3.6V 原理图: PWM输出过程: 1. 脉冲计数器 TIMx_CNT 为向上计数。 2. 重载计数器 TIMx_ARR 配置为N。(TIM_Period值) 3. TIMx_CNT的当前计数值 X 在TIMxCLK时钟源驱动下不断累加; 脉冲计数器 TIMx_CNT 数值 X 大于 重载计数器 TIMx_ARR
[单片机]
<font color='red'>stm32</font> 学习 (设置<font color='red'>TIM</font>4输出4路 <font color='red'>pwm</font> J-LINK仿真验证)
STM32_ps2键盘显示测试程序
//PS2键盘测试程序,可换行,按shift不放接着输入 //可输出大写,按下CAPS输出大写,再次按下输出小写 //此程序只用来测试,代码冗余,仅供参考,可根据需要自行删减 //PA13- PS2.CLK PA15- PS2.DATA #include stm32f10x_lib.h #include sys.h #include usart.h #include delay.h #include led.h #include key.h #include exti.h #include wdg.h #include timer.h #include lcd.h
[单片机]
STM32自动ISP电路设计
STM32支持仿真器和串口下载程序。将要介绍的内容,属于串口下载,即我们通常说的ISP下载。 手动ISP下载程序,我们已经知道了,控制BOOT0引脚实现。STM32上电,会自动检测BOOT0引脚是什么电平,如果是高电平,等待用户下载程序;如果是低电平,运行用户之前下载到单片机的程序。所以我们需要把BOOT0引脚引出,然后控制其接地或接VCC来下载程序或者运行程序。在调试过程中,我们需要不断的控制BOOT0,非常麻烦。那么,自动ISP就该出场了。 自动ISP,把BOOT0与地直接连接,那么每次上电就会运行程序,而且只要点击电脑上的“下载”按钮,就开始下载程序,下载完程序,就开始执行。实现此目的,需要借助串口握手信号DTR和RTS。
[单片机]
<font color='red'>STM32</font>自动ISP电路设计
stm32发送中断编程思路
查询方式:发送数据——先发后查; 接收数据——先查后收。 中断方式:发送数据——发送、等待中断、中断中发送; 接收数据——等待中断、在中断中接收。 发送一个字符串 查询发送:发送完一个字节,等待发送完,继续发送下个字节,直到整个字符串发送完 在这期间一直占用CPU 中断发送:发送完一个字节CPU响应中断将下个字节放到外设寄存器,直到整个字符串发完 只有在中断时占用CPU资源 串口发送中断我只用过一次: 只要将第一个字节送进串口发送数据寄存器,就可以在串口发送中断里依次把剩余的字节都发送完,省去了等待每一个字节发送完的时间。 不过这是在AVR中用的。STM32的
[单片机]
STM32标准外设库SPL转换成Cube LL
今天分享几点内容: 1.介绍ST推出的三种库; 2.直接操作寄存器及三种ST库的代码性能对比; 3.STM32CubeMX直接生成Cube LL库函数的方法; 4.STM32标准外设库SPL转换成Cube LL的方法; 1介绍ST推出的三种库 1.标准外设库:Standard Peripheral Libraries,简写SPL. 2.Cube硬件抽象层库:STM32Cube Hardware Abstraction Layer,简写Cube HAL. 3.Cube底层库:STM32Cube Low-Layer,简写Cube LL. 开发STM32常见的除了直接读写(操作)寄存器之外,就是使用ST推
[单片机]
<font color='red'>STM32</font>标准外设库SPL转换成Cube LL
认识STM32的复位与电源管理
复位功能是一个非常重要的功能,大到PC,小到单片机,每一台计算机系统都有。在我小时候,去网吧的时候,但凡是电脑出现任何一点小问题,网管的第一回答一定是重启。重启和复位就是同一个意思。 发展到现在PC已经很稳定了,复位按钮慢慢的淡出我们的视野,但是在主板上我们依然可以找到复位电路的存在。单片机上的复位功能也有着类似的变化,在我们学单片机那个年代,需要在单片机的外部一个复位电路,从专用引脚上接一个电阻和电容组成的复位电路。如果没有这个电路,单片机就没法工作。现在的新款单片机都把复位功能内置到单片机中。如果是开发项目要手动复位,我们可以在复位引脚上接一个按键用来手动复位。 复位 复位功能的作用是让RAM 中的数据清空,让所有连接
[单片机]
认识<font color='red'>STM32</font>的复位与电源管理
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved