TIM4 PWM输出,,LED没反应

2019-08-17 06:41发布

void TIM4_init(u16 arr,u16 psc)
{
        GPIO_InitTypeDef GPIO_InitStrtue;
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStrtue;
        TIM_OCInitTypeDef TIM_OCInitStrtue;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//ê±Öóê1Äü
       
        GPIO_InitStrtue.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_InitStrtue.GPIO_Pin=GPIO_Pin_13;
        GPIO_InitStrtue.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOD,&GPIO_InitStrtue);//IO3õê¼»ˉ
       
        GPIO_PinRemapConfig(GPIO_Remap_TIM4,ENABLE);//éèÖÃÖØó3éä
       
        TIM_TimeBaseInitStrtue.TIM_ClockDivision=TIM_CKD_DIV1;
        TIM_TimeBaseInitStrtue.TIM_CounterMode=TIM_CounterMode_Up;
        TIM_TimeBaseInitStrtue.TIM_Period=arr;
        TIM_TimeBaseInitStrtue.TIM_Prescaler=psc;

        TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStrtue);//¶¨ê±Æ÷3õê¼»ˉ
       
        TIM_OCInitStrtue.TIM_OCIdleState=TIM_OutputState_Enable;
        TIM_OCInitStrtue.TIM_OCMode=TIM_OCMode_PWM2;
        TIM_OCInitStrtue.TIM_OCNPolarity=TIM_OCPolarity_High;
        TIM_OC2Init(TIM4,&TIM_OCInitStrtue);
       
        TIM_OC2PreloadConfig(TIM4,TIM_OCPreload_Enable);//3õê¼»ˉêä3ö±è½Ï2Îêy
       
        TIM_Cmd(TIM4,ENABLE);//¶¨ê±Æ÷ê1Äü
       
}
以下是主程序
#include"stm32f10x.h"
#include"delay.h"
#include"timer.h"
int main()
{
        u16 led0pwmval=0;
        u8 dir=1;
        //led();
        delay_init(162);
        TIM4_init(899,0);
        while(1)
        {
                delay_ms(20);
                if(dir)led0pwmval++;
                else led0pwmval--;
                if(led0pwmval>300)dir=0;
                if(led0pwmval==0)dir=1;
                TIM_SetCompare2(TIM4,led0pwmval);
        }
}
LED的接口是PD13,重映射是TIM4_ch2,问题实在找不出,麻烦懂得看一下,谢了

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
22条回答
执迷
1楼-- · 2019-08-17 12:10
 精彩回答 2  元偷偷看……
酱油N9fhB
2楼-- · 2019-08-17 17:41
执迷 发表于 2017-6-19 16:14
达到计数值怎么办,,不用重新计数吗?

IF判断里边有重新赋值呀。感觉问题在那个定时器初始化里边,,但是我是第一次接触,具体的参数我又不懂,,可是现在用到的这些都和教程一样。LED不反应我也没办法呀
旦丁中号
3楼-- · 2019-08-17 22:57
是不是少了个 HAL_TIM_PWM_Start() ?
执迷
4楼-- · 2019-08-18 00:43
酱油N9fhB 发表于 2017-6-19 16:19
IF判断里边有重新赋值呀。感觉问题在那个定时器初始化里边,,但是我是第一次接触,具体的参数我又不懂, ...

不知道你用的哪个教程、、TIM.Pulse跳动,,比较结果输出脉冲跳变,,,还有使能ARR寄存器也没有、、
酱油N9fhB
5楼-- · 2019-08-18 02:29
旦丁中号 发表于 2017-6-19 16:21
是不是少了个 HAL_TIM_PWM_Start() ?

例程里边没出现过这个函数呀,他的作用使用方法我都不知道呀。
旦丁中号
6楼-- · 2019-08-18 04:47
 精彩回答 2  元偷偷看……

一周热门 更多>