STM32F429定时器4生成PWM,转化为DAC

2020-05-14来源: eefocus关键字:STM32F429  定时器  PWM  DAC

STM32F429时钟树

原文地址


定时器PWM

从STM32F4的内部时钟树可知,

(1)高级定时器timer1, timer8以及通用定时器timer9, timer10, timer11的时钟来源是APB2总线

(2)通用定时器timer2-timer5,通用定时器timer12-timer14以及基本定时器timer6,timer7的时钟来源是APB1总线

(3)当APB1和APB2分频数为1的时候,TIM1、TIM8-TIM11的时钟为APB2的时钟,TIM2-TIM7、TIM12-TIM14的时钟为APB1的时钟;

(4)而如果APB1和APB2分频数不为1,那么TIM1、TIM8-TIM11的时钟为APB2的时钟的两倍,TIM2-TIM7、TIM12-TIM14的时钟为APB1的时钟的两倍。


PWM计算

PWM频率 = 定时器频率/(分频系数 x 自动重装载值)

PWM占空比 = CCRx / 自动重装载值。


#include "pwmdac.h"

TIM_HandleTypeDef TIM4_Handler;         //定时器4 PWM句柄 

TIM_OC_InitTypeDef TIM4_CH2Handler;     //定时器9通道2句柄


//PWM DAC初始化(也就是TIM4通道2初始化)

//PWM输出初始化

//arr:自动重装值

//psc:时钟预分频数

void TIM4_CH2_PWM_Init(u16 arr,u16 psc)

    TIM4_Handler.Instance=TIM4;            //定时器9

    TIM4_Handler.Init.Prescaler=psc;       //定时器分频

    TIM4_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;//向上计数模式

    TIM4_Handler.Init.Period=arr;          //自动重装载值

    TIM4_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;

    HAL_TIM_PWM_Init(&TIM4_Handler);       //初始化PWM

    

    TIM4_CH2Handler.OCMode=TIM_OCMODE_PWM1; //模式选择PWM1

    TIM4_CH2Handler.Pulse=arr/2;            //设置比较值,此值用来确定占空比,默认比较值为自动重装载值的一半,即占空比为50%

    TIM4_CH2Handler.OCPolarity=TIM_OCPOLARITY_HIGH; //输出比较极性为高

    HAL_TIM_PWM_ConfigChannel(&TIM4_Handler,&TIM4_CH2Handler,TIM_CHANNEL_2);//配置TIM9通道2

HAL_TIM_PWM_ConfigChannel(&TIM4_Handler,&TIM4_CH2Handler,TIM_CHANNEL_1);//配置TIM9通道2

    HAL_TIM_PWM_Start(&TIM4_Handler,TIM_CHANNEL_2);//开启PWM通道2

HAL_TIM_PWM_Start(&TIM4_Handler,TIM_CHANNEL_1);//开启PWM通道2

HAL_TIM_PWM_ConfigChannel(&TIM4_Handler,&TIM4_CH2Handler,TIM_CHANNEL_3);//配置TIM9通道2

HAL_TIM_PWM_ConfigChannel(&TIM4_Handler,&TIM4_CH2Handler,TIM_CHANNEL_4);//配置TIM9通道2

    HAL_TIM_PWM_Start(&TIM4_Handler,TIM_CHANNEL_3);//开启PWM通道2

HAL_TIM_PWM_Start(&TIM4_Handler,TIM_CHANNEL_4);//开启PWM通道2

}


//定时器底层驱动,时钟使能,引脚配置

//此函数会被HAL_TIM_PWM_Init()调用

//htim:定时器句柄

void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)

{

    GPIO_InitTypeDef GPIO_Initure;

__HAL_RCC_TIM4_CLK_ENABLE(); //使能定时器9

__HAL_RCC_GPIOD_CLK_ENABLE(); //开启GPIOA时钟

    GPIO_Initure.Pin=GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;            //PA3

    GPIO_Initure.Mode=GPIO_MODE_AF_PP;  //复用推完输出

    GPIO_Initure.Pull=GPIO_PULLUP;          //上拉

    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速

GPIO_Initure.Alternate= GPIO_AF2_TIM4; //PA3复用为TIM9_CH2

    HAL_GPIO_Init(GPIOD,&GPIO_Initure);

}


//设置TIM通道2的占空比

//TIM_TypeDef:定时器

//compare:比较值

void TIM_SetTIM4Compare2(u32 compare)

{

TIM4->CCR1=compare;

TIM4->CCR2=compare;

TIM4->CCR3=compare;

TIM4->CCR4=compare;

}


PWM转DAC

关键字:STM32F429  定时器  PWM  DAC 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic497155.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32CubeMX学习--(4)CAN使用
下一篇:适用于STM32 MCU的NanoEdge人工智能软件

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32F429 自制开发板
上次讲到自制了F407开发板,用下来都不错,但是有个遗憾就是407没有LTDC,最近一直在研究液晶屏,着了迷一样,研究了一圈,觉得F429是最好的选择,网上的开发板价格都较贵,关键是好多都没有引出LTDC接口,决定自制一块开发板自带LTDC+SDRAM。原理图F429的原理图不像407,网上的资源不多,基本上和F407的相类似,LTDC和SDRAM的引脚就要当心了,一定要按照CUBEMAX分配的引脚来对应,Cubemax的分配引脚有时候会变动,要格外注意!SDRAM 选的是W9825G6KH, 256Mbit, 32MBytePCB 布线这个对于双面板来说确实有点难,死了不少脑细胞。原则是SDRAM和f429之间的连线尽量短,还要
发表于 2020-03-15
STM32F429 自制开发板
STM32F429 初试TouchGFX
StartDefaultTask(void const * argument){  /* USER CODE BEGIN StartDefaultTask */ MX_TouchGFX_Process();  /* USER CODE END StartDefaultTask */}去STM32TouchController.cpp添加触屏驱动, 注意X,Y 是屏幕坐标,不像STemwin是AD值bool STM32TouchController::sampleTouch(int32_t& x, int32_t& y){ if(XPT2046_READ_X()==0 &&
发表于 2020-03-15
STM32F429 初试TouchGFX
STM32F429驱动外部SDRAM
STM32F429的一个很大优势就是可以直接驱动SDRAM,这样一下子就可以外扩可观的运存,很诱惑。这里用到的SDRAM 为W9825G6KH, 256Mbit, 32MByte配置CubeMX这里不展开这里面的数值的具体计算过程,主要是按照手册来算的,感兴趣的可以网上寻找,有很多相关的资料。SDRAM 初始化,SDRAM不像SRAM配置好了就可以用,他需要初始化#include "stm32f4xx_hal.h"extern SDRAM_HandleTypeDef hsdram1;#define SDRAM_MODEREG_BURST_LENGTH_1       
发表于 2020-03-14
STM32F429驱动外部SDRAM
STM32F429 LTDC驱动RGB屏幕
429有很多特点,支持SDRAM, LTDC, TouchGFX等,手上正好有几块RGB屏幕,加之TouchGFX至少需要LTDC或是DSI的方式驱动(并口和FSMC方式还不可行),所以一定要试试LTDC。CubeMX配置,按照屏幕的类型选择是18位还是24位的接口类型,值得注意的是如果你选的是18位的接口,颜色是通过R[7:2],G[7:2],B[7:2] 这几个引脚连接的而不是[5:0], 因此还费了一块转接板。。。水平和垂直同步的相关数值可以查屏幕的手册,或者驱动IC的手册得到。极性需要注意,前两个一般都是ActiveLow后面的两个自己如果发现现实不正确可以试试改变极性,也发生过几次因为这个极性的问题没有显示的问题。首层
发表于 2020-03-14
STM32F429 LTDC驱动RGB屏幕
STM32F429和F103端口重映射
; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;                          GPIO_Init(GPIOB, &GPIO_InitStructure);F429重映射实例:以usart2的TX,RX为例USART2的TX,RX对应的PIN脚分别为:PD5,PD61) 首先,我们要使用IO复用功能外设,必须先打开对应的IO时钟和复用功能外设时钟。/*使能GPIOD时钟*/  RCC_AHB1PeriphClockCmd
发表于 2019-10-25
STM32F429和F103端口重映射
梳理STM32F429之通信传输部分---NO.2 硬件IIC
表。关于GPIO 引脚的复用功能,可查阅《STM32F4xx 规格书》,以它为准。(2)时钟控制逻辑:SCL 线的时钟信号,由 I2C 接口根据时钟控制寄存器(CCR)控制,控制的参数主要为时钟频率。配置 I2C 的 CCR 寄存器可修改通讯速率相关的参数:可选择 I2C 通讯的“标准/快速”模式,这两个模式分别 I2C 对应 100/400Kbit/s 的通讯速率。(3)数据控制逻辑:I2C 的 SDA 信号主要连接到数据移位寄存器上,数据移位寄存器的数据来源及目标是数据寄存器(DR)、地址寄存器(OAR)、 PEC 寄存器以及 SDA 数据线。当向外发送数据的时候,数据移位寄存器以“数据寄存器”为数据源,把数据一位一位地通过 SDA
发表于 2019-09-28
梳理STM32F429之通信传输部分---NO.2 硬件IIC
小广播
何立民专栏 单片机及嵌入式宝典

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

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