你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

跪求,我的STM32f1不能输出PWM

[复制链接]
skqepk 提问时间:2018-7-16 23:47 /
我是初学者,现在用STM32F1.用定时器1,PA8的口输出PWM,但怎样配置都不能有效果输出,求大神支招


int main(void)
{                        
        u16 led0pwmval=0;   
        u8 dir=1;        
        Stm32_Clock_Init(9); //系统时钟设置
        delay_init(72);             //延时初始化
        uart_init(72,9600);  //串口初始化
        LED_Init();                           //初始化与LED连接的硬件接口
        TIM1_PWM_Init(899,0);//不分频。PWM频率=72000/(899+1)=80Khz
           while(1)
        {
                delay_ms(10);         
                if(dir)led0pwmval++;
                else led0pwmval--;         
                if(led0pwmval>300)dir=0;
                if(led0pwmval==0)dir=1;                                                   
                LED0_PWM_VAL=led0pwmval;
               
        }
}


void LED_Init(void)               
{
        
        GPIO_InitTypeDef GPIO_InitStruct;
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA
                                                  |RCC_APB2Periph_GPIOD
                              |RCC_APB2Periph_GPIOC
                              |RCC_APB2Periph_AFIO, ENABLE);
        
        
        
        GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;                 //推挽输出
        GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8;                         //选择P8口        
        GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;         //50Mhz

        GPIO_Init(GPIOA,&GPIO_InitStruct);

}

void time_Init(void)
{
        
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStrue;
        TIM_OCInitTypeDef TIM_OCInitStrue;
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); //1
        

        TIM_TimeBaseInitStrue.TIM_CounterMode=TIM_CounterMode_Up;
        TIM_TimeBaseInitStrue.TIM_Period        =1000;                //重装载值
        TIM_TimeBaseInitStrue.TIM_Prescaler =72;                //预分频
        TIM_TimeBaseInitStrue.TIM_ClockDivision= TIM_CKD_DIV1;
        TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStrue);
        
//        TIM_OCInitStrue.TIM_OCIdleState
        TIM_OCInitStrue.TIM_OCMode=TIM_OCMode_PWM2;
//        TIM_OCInitStrue.TIM_OCNIdleState
//        TIM_OCInitStrue.TIM_OCNPolarity
        TIM_OCInitStrue.TIM_OCPolarity=TIM_OCPolarity_High;         //输出极性
//        TIM_OCInitStrue.TIM_OutputNState
        TIM_OCInitStrue.TIM_OutputState=TIM_OutputState_Enable;
        TIM_OCInitStrue.TIM_Pulse=300;
        TIM_OC1Init(TIM1,&TIM_OCInitStrue);
        
        TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);   //预重装载值(可用可不用)
        
        TIM_Cmd(TIM1,ENABLE);                        //使能定时器
        
        TIM_CtrlPWMOutputs(TIM1,ENABLE);
        
        TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
        
        TIM_ARRPreloadConfig(TIM1, ENABLE);
        
        
}

L6_LED通过PWM渐变.zip

下载

3.17 MB, 下载次数: 5, 下载积分: ST金币 -1

收藏 评论3 发布时间:2018-7-16 23:47

举报

3个回答
七哥 回答时间:2018-7-17 00:25:06
本帖最后由 toofree 于 2018-7-17 00:30 编辑

程序仿真试过了,没问题。PA8,有0、1交替变化。
傲游截图20180717002414.jpg

傲游截图20180717002454.jpg
查看一下你的SystemCoreClock,是不是72M。如果不是72M的话,肯定是不行的。
但你可以把TIM1的分频系数“TIM_TimeBaseInitStrue.TIM_Prescaler =72;”改小,改小后时钟会快一些。
傲游截图20180717002829.jpg






评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

wenyangzeng 回答时间:2018-7-17 07:28:42
本帖最后由 wenyangzeng 于 2018-7-17 07:31 编辑

ST官方代码修改一下就可以了

PWM_Output.rar (12.95 KB, 下载次数: 25)

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

hzhtianshi 回答时间:2018-8-22 12:33:08
正在学习STM32产生PWM波,学习学习!谢谢分享

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版