IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32F4的通用定时器9~14的PWM输出配置步骤 -> 正文阅读

[嵌入式]STM32F4的通用定时器9~14的PWM输出配置步骤

????????这段时间忙着各种考试和各种论文报告,手上一堆项目的事都搁在那了,好在这种情况最晚也就持续到30号。

????????抽空整理了一下关于STM32F4的通用定时器9~14的PWM输出配置步骤,为了后面的整体项目做个准备,磨刀不误砍柴工嘛!我干啥都讲究个应用为王,里面具体的寄存器的作用就不赘述了。

1、PWM原理

?????????PWM生成原理很简单,在定时器的一个计算周期内,当计数值大于ccr时,从此刻开始到周期结束产生一个高电平的脉冲。

2、通用定时器9~14的引脚

? ? ? ? 通用定时器9~14的每个定时器都有多达4个通道,且有些通道在芯片外观引脚上的反应也有很多,但基于后面要做的项目,这6个通用定时器都只选用通道1(还有个理由是,我在原理图上有些通道的引脚没找到,还希望大家指正,嘤嘤嘤)。对应的管脚为:

TIM9_CH1PA2/PE5
TIM10_CH1PB8/PF6
TIM11_CH1PB9/PF7
TIM12_CH1PB14
TIM13_CH1PA6/PF8
TIM14_CH1PA7/PF9

?3、PWM输出配置步骤

? ? ? ? (1):使能定时器时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM12,ENABLE);  	//TIM12时钟使能
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM13,ENABLE);  	//TIM13时钟使能
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);  	//TIM14时钟使能
RCC_APB2PeriphClockCmd(RCC_APB1Periph_TIM9,ENABLE);  	//TIM9时钟使能
RCC_APB2PeriphClockCmd(RCC_APB1Periph_TIM10,ENABLE);  	//TIM10时钟使能
RCC_APB2PeriphClockCmd(RCC_APB1Periph_TIM11,ENABLE);  	//TIM11时钟使能

? ? ? ? ? ? ? ? ? ? ?TIM9~11挂接在APB2总线,而TIM12~14挂接在APB1总线。? ?? ? ? ?

????????(2):使能IO口时钟

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); 	
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); 	

? ? ? ? (3):IO口复用为定时器

GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_TIM9);  //GPIOA2复用为定时器9
GPIO_PinAFConfig(GPIOB,GPIO_PinSource8,GPIO_AF_TIM10); //GPIOB8复用为定时器10
GPIO_PinAFConfig(GPIOB,GPIO_PinSource9,GPIO_AF_TIM11); //GPIOB9复用为定时器11
GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_TIM12);//GPIOB14复用为定时器12
GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_TIM13); //GPIOA6复用为定时器13
GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_TIM14); //GPIOA7复用为定时器14

? ? ? ? (4):初始化GPIO口

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;           
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;	//速度100MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;        //上拉
GPIO_Init(GPIOA,&GPIO_InitStructure);               //初始化GPIOA2

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;           
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;	//速度100MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;        //上拉
GPIO_Init(GPIOB,&GPIO_InitStructure);               //初始化GPIOB8

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;           
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;	//速度100MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;        //上拉
GPIO_Init(GPIOB,&GPIO_InitStructure);               //初始化GPIOB9

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;           
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;	//速度100MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;        //上拉
GPIO_Init(GPIOB,&GPIO_InitStructure);               //初始化GPIOB14

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;           
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;	//速度100MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;        //上拉
GPIO_Init(GPIOA,&GPIO_InitStructure);               //初始化GPIOA6

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;           
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;	//速度100MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;        //上拉
GPIO_Init(GPIOA,&GPIO_InitStructure);               //初始化GPIOA7

? ? ? ? (5):初始化定时器

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Prescaler=psc;                  //定时器分频
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseStructure.TIM_Period=arr;                     //自动重装载值
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; 	
TIM_TimeBaseInit(TIMx,&TIM_TimeBaseStructure);            //x=9~14

?????????从stm32f4的内部时钟树可知,(1)当APB1和APB2分频数为1的时候,TIM9~TIM11的时钟为APB2的时钟,TIM12~TIM14的时钟为APB1的时钟;(2)如果APB1和APB2分频数不为1,那么TIM9~TIM11的时钟为APB2的时钟的两倍,TIM12~TIM14的时钟为APB1的时钟的两倍。因为系统初始化SystemInit函数里初始化APB1总线时钟为4分频即42M,APB2总线时钟为2分频即84M,所以TIM9~TIM11的时钟为APB2时钟的两倍即168M,TIM12~TIM14的时钟为APB1的时钟的两倍即84M。所以定时器的周期便可通过公式得出:周期=((psc-1)*(arr-1))/对应定时器的时钟。一般psc=84或168不变,通过改变arr来改变周期。

? ? ? ? (6):初始化定时器的通道

TIM_OCInitTypeDef  TIM_OCInitStructure;
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;             //选择PWM模式
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;      //输出极性低
TIM_OC1Init(TIMx, &TIM_OCInitStructure);                      //初始化定时器x通道1,x=9~14

? ? ? ? (7):使能定时器在ccr1上的预装载寄存器

TIM_OC1PreloadConfig(TIMx, TIM_OCPreload_Enable);  //使能定时器x在CCR1上的预装载寄存器,x=9~14

? ? ? ? (8):ARPE使能

TIM_ARRPreloadConfig(TIMx,ENABLE);//定时器x的ARPE使能,x=9~14

? ? ? ? (9):使能定时器

TIM_Cmd(TIMx, ENABLE);  //使能定时器x,x=9~14

4、高电平脉冲持续时间设置

TIM_SetCompare1(TIMx,ccr);	//修改ccr,修改高电平脉冲持续时间

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-12-15 18:27:31  更:2021-12-15 18:27:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 14:54:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码