OpenEdv-开源电子网

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

PWM输出八个方波问题

[复制链接]

3

主题

11

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2017-7-14
在线时间
12 小时
发表于 2018-8-4 17:18:54 | 显示全部楼层 |阅读模式
1金钱
40Hz的时候确实是发送八个方波,但我把频率改成1MHz,就变成了16个

最佳答案

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

因为STM32中断服务函数处理不过来!! 速度跟不上PWM的速度。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-8-4 17:18:55 | 显示全部楼层
becklee 发表于 2018-8-4 17:20
中断函数

void TIM3_IRQHandler(void)

因为STM32中断服务函数处理不过来!!
速度跟不上PWM的速度。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2017-7-14
在线时间
12 小时
 楼主| 发表于 2018-8-4 17:19:30 | 显示全部楼层
定时器函数
void TIM3_Configuration(void)
{
        int CCR1_Val=36;
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
        TIM_OCInitTypeDef TIM_OCInitStructure;
        TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
        GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);

        //定时器初始化
        TIM_TimeBaseStruct.TIM_Period=71;//初值
        TIM_TimeBaseStruct.TIM_Prescaler=0;//预分频   ((1+TIM_Prescaler )/时钟)*(1+TIM_Period )
        TIM_TimeBaseStruct.TIM_ClockDivision=0;
        TIM_TimeBaseStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上   

        TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStruct);
       

        //pwm 初始化
        TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_Pulse = CCR1_Val;           //设置跳变值,当计数器计数到这个值时,电平发生跳变
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  //当定时器计数值小于CCR1_Val时为高电平
        TIM_OC2Init(TIM3,&TIM_OCInitStructure);
        TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
        TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
        TIM_Cmd(TIM3,ENABLE);
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2017-7-14
在线时间
12 小时
 楼主| 发表于 2018-8-4 17:20:11 | 显示全部楼层
中断函数

void TIM3_IRQHandler(void)
{
        if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)
        {
                TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
                num=num+1;
                if(num==8)
                {
                        num=0;
                        TIM_Cmd(TIM3,DISABLE);
                        GPIO_ResetBits(GPIOB, GPIO_Pin_5);       
                        delay_us(200);
                        TIM_Cmd(TIM3,ENABLE);
                }

}
}
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2017-7-14
在线时间
12 小时
 楼主| 发表于 2018-8-4 17:22:45 | 显示全部楼层
40KHz的定时器


void TIM3_Configuration(void)
{
        int CCR1_Val=25;
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
        TIM_OCInitTypeDef TIM_OCInitStructure;
        TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
        GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);

        //定时器初始化
        TIM_TimeBaseStruct.TIM_Period=49;//初值
        TIM_TimeBaseStruct.TIM_Prescaler=35;//预分频   ((1+TIM_Prescaler )/时钟)*(1+TIM_Period )
        TIM_TimeBaseStruct.TIM_ClockDivision=0;
        TIM_TimeBaseStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上   

        TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStruct);
       

        //pwm 初始化
        TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_Pulse = CCR1_Val;           //设置跳变值,当计数器计数到这个值时,电平发生跳变
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  //当定时器计数值小于CCR1_Val时为高电平
        TIM_OC2Init(TIM3,&TIM_OCInitStructure);
        TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
        TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
        TIM_Cmd(TIM3,ENABLE);
       
       
}
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2017-7-14
在线时间
12 小时
 楼主| 发表于 2018-8-4 17:29:28 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-13 18:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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