找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1847|回复: 1
收起左侧

stm32F429 pwm输出实验

[复制链接]
ID:384306 发表于 2018-8-13 14:19 | 显示全部楼层 |阅读模式
#include "timer.h"
#include "led.h"
   
//修改说明
//V1.1 20160106
//新增TIM3_PWM_Init函数,用于PWM输出
//////////////////////////////////////////////////////////////////////////////////         

TIM_HandleTypeDef TIM3_Handler;         //定时器3PWM句柄
TIM_OC_InitTypeDef TIM3_CH4Handler;            //定时器3通道4句柄

//TIM3 PWM部分初始化
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM3_PWM_Init(u16 arr,u16 psc)
{
    TIM3_Handler.Instance=TIM3;            //定时器3
    TIM3_Handler.Init.Prescaler=psc;       //定时器分频
    TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;//向上计数模式
    TIM3_Handler.Init.Period=arr;          //自动重装载值
    TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
    HAL_TIM_PWM_Init(&TIM3_Handler);       //初始化PWM

    TIM3_CH4Handler.OCMode=TIM_OCMODE_PWM1; //模式选择PWM1
    TIM3_CH4Handler.Pulse=arr/2;            //设置比较值,此值用来确定占空比,默认比较值为自动重装载值的一半,即占空比为50%
    TIM3_CH4Handler.OCPolarity=TIM_OCPOLARITY_LOW; //输出比较极性为低
    HAL_TIM_PWM_ConfigChannel(&TIM3_Handler,&TIM3_CH4Handler,TIM_CHANNEL_4);//配置TIM3通道4
        
    HAL_TIM_PWM_Start(&TIM3_Handler,TIM_CHANNEL_4);//开启PWM通道4
}


int main(void)
{
    u8 dir=1;
    u16 led0pwmval=0;  
    HAL_Init();                     //初始化HAL库   
    Stm32_Clock_Init(360,25,2,8);   //设置时钟,180Mhz
    delay_init(180);                //初始化延时函数
    uart_init(115200);              //初始化USART
    LED_Init();                     //初始化LED
    TIM3_PWM_Init(500-1,90-1);      //90M/90=1M的计数频率,自动重装载为500,那么PWM频率为1M/500=2kHZ
    while(1)
    {
                delay_ms(10);                 
                if(dir)led0pwmval++;                                //dir==1 led0pwmval递增
                else led0pwmval--;                                //dir==0 led0pwmval递减
                if(led0pwmval>300)dir=0;                        //led0pwmval到达300后,方向为递减
                if(led0pwmval==0)dir=1;                        //led0pwmval递减到0后,方向改为递增
                TIM_SetTIM3Compare4(led0pwmval);        //修改比较值,修改占空比
    }
}


//定时器底层驱动,时钟使能,引脚配置
//此函数会被HAL_TIM_PWM_Init()调用
//htim:定时器句柄
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
    GPIO_InitTypeDef GPIO_Initure;
        __HAL_RCC_TIM3_CLK_ENABLE();                        //使能定时器3
    __HAL_RCC_GPIOB_CLK_ENABLE();                        //开启GPIOB时钟
        
    GPIO_Initure.Pin=GPIO_PIN_1;                   //PB1
    GPIO_Initure.Mode=GPIO_MODE_AF_PP;          //复用推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;          //上拉
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速
        GPIO_Initure.Alternate= GPIO_AF2_TIM3;        //PB1复用为TIM3_CH4
    HAL_GPIO_Init(GPIOB,&GPIO_Initure);
}


//设置TIM通道4的占空比
//compare:比较值
void TIM_SetTIM3Compare4(u32 compare)
{
        TIM3->CCR4=compare;
}

回复

使用道具 举报

ID:659734 发表于 2020-1-16 14:52 | 显示全部楼层
无语,正点原子的标准代码,能不能发高级定时器的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表