STM32F407 基本定时器配置输出PWM方波

发布者:BlossomSunrise最新更新时间:2024-09-25 来源: elecfans关键字:STM32F407  基本定时器 手机看文章 扫描二维码
随时随地手机看文章

介绍STM32F407定时器PWM波形输出配置方式。 通过逻辑分析采集波形数据进行可视化显示对比。


【1】定时器PWM功能介绍

STM32F4 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达4路的PWM输出!

img

img

img

【2】PWM波形输出通道介绍

img

img

img

** 定时器3的硬件PWM通道:PA6 PA7 PB0 PB1**

下面截图是介绍定时器3通道的复用IO口模式配置方式

img

img

【3】配置PWM波形输出代码示例

在工程中增加pwm.c文件,写入以下代码


#include 'pwm.h'

 /*

 函数功能:定时器3-PWM波形输出配置

 

 硬件PWM通道:PA6 PA7 PB0 PB1

 功能说明:配置定时器3的通道1输出PWM波形

 */

 void Timer3_PWM_Init(u16 psc,u16 arr)

 {

   /*1. 开时钟*/

   RCC- >APB1ENR|=1< < 1;    //开启定时器3的时钟

   RCC- >APB1RSTR|=1< < 1;   //开启复位时钟  

   RCC- >APB1RSTR&=~(1< < 1);//关闭  

 

   /*2. 配置定时器的核心寄存器*/

   TIM3- >PSC=psc-1;     //预分频

   /*计数器的时钟频率CK_CNT等于fCK_PSC/(PSC[15:0]+1)*/

   TIM3- >ARR=arr;       //重装载寄存器

 

   /*3.  配置PWM波形相关寄存器*/

 TIM3- >CCMR1&=~(0x3< < 0);

 TIM3- >CCMR1|=0x0< < 0;  //CC1通道被配置为输出

   TIM3- >CCMR1&=~(0x7< < 4);

 //TIM3- >CCMR1|=0x6< < 4; //模式1

 TIM3- >CCMR1|=0x7< < 4;   //模式2

 TIM3- >CCER|=1< < 0;      //OC1信号输出到对应的输出引脚

 TIM3- >CCR1=arr/2;      //占空比 50%

 

 /*4. 配置PWM波形输出的GPIO口*/

   RCC- >AHB1ENR|=1< < 0;   //使能PORTA时钟

 

 GPIOA- >MODER&=~(0x3< < 6*2); //清除模式

 GPIOA- >MODER|=0x2< < 6*2;    //配置复用功能模式

 

 GPIOA- >OTYPER&=~(0x1< < 6);  //0表示推挽输出

 

 GPIOA- >OSPEEDR&=~(0x3< < 6*2); //清除之前配置

 GPIOA- >OSPEEDR|=0x2< < 6*2;    //50MHZ输出速度

 

 GPIOA- >AFR[0]&=~(0xF< < 4*6); //清除PA6配置

 GPIOA- >AFR[0]|=0x2< < 4*6;    //配置PA6复用功能模式为定时器3的通道1

 

 /*5. 开启定时器*/

 TIM3- >CR1|=1< < 0;

 }

 

 

Main.c文件代码示例


#include 'stm32f4xx.h' // Device header

 #include 'led.h'

 #include 'delay.h'

 #include 'key.h'

 #include 'usart.h'

 #include 'sys.h'

 #include 'exti.h'

 #include 'timer.h'

 #include 'pwm.h'

 

 int main(void)

 {

 LED_Init();

 KEY_Init();

 USART1_Init(84,115200);

 KEY_EXTI_Init();

 Timer3_PWM_Init(84,1000);

   TIM3- >CCR1=500;

   while(1)

 {

   

 }

 }


关键字:STM32F407  基本定时器 引用地址:STM32F407 基本定时器配置输出PWM方波

上一篇:STM32H7系列芯片发不出去的hello问题
下一篇:STM32单片机到底是如何实现软硬件结合?

推荐阅读最新更新时间:2024-11-10 13:40

STM32F407 外部中断
STM32F4的IO口在第六章有详细介绍,而中断管理分组管理在前面也有详细的阐述。这里我们将介绍STM32F4外部IO口的中断功能,通过中断的代码主要分布在固件库的stm32f4xx_exti.h和stm32f4xx_exti.c文件中。 STM32F4的每个IO都可以作为外部中断的中断输入口,这点也是STM32F4的强大之处。STM32F407的中断控制器支持22个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。STM32F407的22个外部中断为: EXTI线0~15:对应外部IO口的输入中断。 EXTI线16:连接到PVD输出。 EXTI线17:连接到RTC闹钟事件。 EXTI线18:连接到U
[单片机]
STM32F405与STM32F407CAN配置
STM32F405与STM32F407CAN配置略有不同,不同之处在于407多了一个电平拉高拉低模式,配置时一定要注意。 其次,要开CAN2,必须开CAN1,因为CAN1是主,CAN2是从;开了CAN中断,一定要写中断处理函数并及时清除中断标志位,否则程序会卡死。 405的配置: GPIO_InitTypeDef GPIO_InitStruct; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); RCC_APB1PeriphClockCmd(RCC_A
[单片机]
分享关于stm32f407定时器时钟频率的问题
上午想要用Timer10做相对精确的延时功能,但是用示波器发现实际延时数值总是只有一半,百思不得其解。 仔细查阅各处资料结合实际研究后对stm32f407的14个定时器的时钟做一个总结: 从时钟树中我们可以得知(时钟树的图片可以直接参考6楼,感谢6楼xkwy补上的图): (1)高级定时器timer1, timer8以及通用定时器timer9, timer10, timer11的时钟来源是APB2总线 (2)通用定时器timer2~timer5,通用定时器timer12~timer14以及基本定时器timer6,timer7的时钟来源是APB1总线 从STM32F4的内部时钟树可知,当APB1和APB2分频数为1的时候,TIM1、
[单片机]
STM32F407 SPI flash
STM32F407 SPI 接口: STM32F4XX时钟计算 HCLK=168M PCLK1 =HCLK/4 =42M PCLK2 =HCLK/2 =84M SPI2、SPI3在PCLK1,最大时钟为42M SPI1在PCLK2,最大时钟为84M STM32F4 支持的最大SPI时钟为37.5Mbits/s 因此需要分频。 例程选择SPI2 分频后为21M 串行Flash W25Q64BVSSIG (最高支持80MHz)。 测试: 全部写入0XAA 数据长度8192K 擦除:20.798 写入耗时42.599S 读:9.008S 百度的参照时间 擦除:8.9S 写入
[单片机]
<font color='red'>STM32F407</font> SPI flash
UCOSII在STM32F407上的移植
1、ucosii移植准备工作 1.1准备基础工程: 移植的时候需要一个基础工程,为了方便起见我们就选取跑马灯实验,作为ucossii移植的基础工程。 1.2Ucossii源码: 1)Micrium官网下载 2)开发板光盘自带 2、Ucossii移植步骤 1)step1 在基础工程文件夹中先建立UCOSII文件夹,然后在基础工程中UCOSII下建立相应的文件夹:CONFIG、CORE和PORT。 2)step2 向core文件夹中添加文件, 3)step3 向CONFIG文件夹中添加文件, 4)step4 向PORT文件件中添加文件, 5)step5 将Ucosii源码添加到工程中,打开工程,选择 新建三个分组:
[单片机]
UCOSII在<font color='red'>STM32F407</font>上的移植
STM32F407玩控制—神经网络PID控制
在玩51单片机时就想玩神经网络PID控制,但51单片机的数据存储器地址空间很小,就普通的应用,要增加一个变量尚且“抖抖哗哗”,更遑论玩神经网络PID控制,那可需要非常多的变量,而玩STM32F407就不存在这方面问题了。转入正题,大部分书上的神经网络PID控制,讲的是BP神经网络PID控制,举的例子都是非线性系统,通常仿真效果都不错,但BP神经网络PID控制有一个限制,就是kp、ki、kd小于1,这就限制了它的应用范围,如果kp、ki、kd 1,那就得改进,而刘金琨的《先进PID控制 MATLAB仿真》一书中讲了一种RBF神经网络PID控制,它突破了前者的限制,其原理如图1所示,图中RBF NN1神经网络根据偏差e、Jacobia
[单片机]
用<font color='red'>STM32F407</font>玩控制—神经网络PID控制
STM32F407 USB虚拟双串口
准备工作 通过STM32CubeMX生成一份标准的USB VCP例程. 代码修改 端点配置修改 增加第二个虚拟串口用到的端点配置,一个虚拟串口需要用到3个非0端点(2个bulk和一个interrupt) 设置增加端点的FIFO 注意 : 这里的FIFO大小的设置有一定的讲究,否则会导致一些异常,如将端点1和端点3的FIFO大小都设置为0x80则会导致某一个虚拟串口的数据会乱码显示 在参考的文章中发现这里为新增的端点设置内存时,有的为端点2和端点3设置FIFO,有的为端点3和端点4设置FIFO.测试发现:实际这里只需要为端点3设置FIFO. 为新增的端点增加初始化操作 描述符修改 将设备描述符修改为复合设备描述符
[单片机]
<font color='red'>STM32F407</font> USB虚拟双串口
stm32f407】库函数
本文通过简单介绍 STM32库的各个文件及其关系,让读者建立 STM32库的概念,看完后对库有个总体印象即可 1. 1.1什么是 STM32 库? 在 51单片机的程序开发中,我们直接配置 51单片机的寄存器,控制芯片的工作方式,如中断,定时器等。配置的时候,我们常常要查阅寄存器表,看用到哪些配置位,为了配置某功能,该置 1还是置 0。这些都是很琐碎的、机械的工作,因为 51单片机的软件相对来说较简单,而且资源很有限,所以可以直接配置寄存器的方式来开发。STM32库是由 ST公司针对 STM32提供的函数接口,即 API(Application Program Interface),开发者可调用这些函数接口来配置STM
[单片机]
【<font color='red'>stm32f407</font>】库函数
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved