OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4459|回复: 3

STM32F429 PWM输出问题

[复制链接]

9

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2017-2-6
在线时间
16 小时
发表于 2017-2-6 22:57:13 | 显示全部楼层 |阅读模式
1金钱
[mw_shl_code=applescript,true]#include "timer.h"
//#include "led.h"
//////////////////////////////////////////////////////////////////////////////////         
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK STM32F429开发板
//定时器驱动代码          
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//创建日期:2016/1/6
//版本:V1.1
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2014-2024
//All rights reserved                                                                          
//////////////////////////////////////////////////////////////////////////////////        
//修改说明
//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
}


//定时器底层驱动,时钟使能,引脚配置
//此函数会被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;
}[/mw_shl_code]
这是原代码,这是驱动红色LED的灯,我要把他改成驱动绿灯.GPIO_Initure.Pin=GPIO_PIN_0; //PB1,我把这里改成0,但绿灯就是不亮,我请问题问题在出在什么地方?
STM32F429手册我看着写的实在是太乱了。我就是想把GPIOB_0管脚做为TIM3_CH4输出点??新手。

最佳答案

查看完整内容[请看2#楼]

想的太简单了。。。你要对应IO有PWM通道,然后初始化对应的PWM通道,才可以的,。不是像你这样简单改个0,1就完事了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-2-6 22:57:14 | 显示全部楼层
想的太简单了。。。你要对应IO有PWM通道,然后初始化对应的PWM通道,才可以的,。不是像你这样简单改个0,1就完事了
回复

使用道具 举报

9

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2017-2-6
在线时间
16 小时
 楼主| 发表于 2017-2-7 12:26:28 来自手机 | 显示全部楼层
正点原子 发表于 2017-2-6 22:57
想的太简单了。。。你要对应IO有PWM通道,然后初始化对应的PWM通道,才可以的,。不是像你这样简单改个0,1 ...

能否举个例子呢
回复

使用道具 举报

9

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2017-2-6
在线时间
16 小时
 楼主| 发表于 2017-2-7 12:28:10 来自手机 | 显示全部楼层
噢,好想明白了。不是随便哪个io可以随便用哪个通道吗,不能随便映射吗?
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 22:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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