野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12325|回复: 17

我开始写了一个通用定时器3输出pwm波的函数,一切正常

[复制链接]
发表于 2015-12-28 16:20:29 | 显示全部楼层 |阅读模式
然后就加了一句TIM_SetCompare2(TIM3,2000),写在主函数的while之外,初始化之后,示波器就显示混乱,把那句代码注释掉就没问题

今天下午我在没有那句代码,也就是在一切正常的情况下,加入中断按键PA0,按一下在中断服务程序里面写上set那个函数增加占空比,但是都还没按,就下载进去程序,示波器也是乱码

怎么回事啊
回复

使用道具 举报

 楼主| 发表于 2015-12-28 16:27:21 | 显示全部楼层
然后我一步一步的做
先只添加了文件,再编译,没动程序,没问题
然后添加了exti的头文件和初始化,没写中断服务程序,也没问题
然后就添加了一个变量,volatile u32 User_CCR2_Value = 1000;然后编译进去就有问题了,示波器显示不出pwm
再把这个变量注释掉还是不能显示
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-28 16:28:43 | 显示全部楼层
pwm的频率是100hz
用来驱动电调的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-28 16:33:35 | 显示全部楼层
又有新发现
定义变量应该没有问题
问题出在按键中断的初始化
是不是端口a的时钟有问题
按键用的a0,pwm用的a7
我去试试pwm用另一个端口
回复 支持 反对

使用道具 举报

发表于 2015-12-28 16:36:34 | 显示全部楼层
一看标题,一切正常,以为是来分享经验的
首先,加入按键中断还没按下就乱码,可能是按键中断没配置好或者外部干扰触发了中断,
如果复位后每次都是乱码就是中断没配置好,如果复位后偶尔的话就可能是乱触发
不过是哪种情况,你现在就是一调用TIM_SetCompare2(TIM3,2000)函数就输出乱码
很大可能你是TIM配置问题,你试试TIM_SetCompare2(TIM3,20)看看,
另外,你把定时器配置程序贴上来看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-28 17:07:15 | 显示全部楼层
本帖最后由 望着你发槑 于 2015-12-28 17:13 编辑
亽亼 发表于 2015-12-28 16:36
一看标题,一切正常,以为是来分享经验的
首先,加入按键中断还没按下就乱码,可能是按键中断没配置好或者 ...

。。。
我在中断里面加了led亮灭,led没有问题

回复 支持 反对

使用道具 举报

发表于 2015-12-28 17:12:43 | 显示全部楼层
你现在怎么在纠结按键中断问题,不是先纠结定时器问题吗
按键中断对照例程来就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-28 17:13:34 | 显示全部楼层
亽亼 发表于 2015-12-28 16:36
一看标题,一切正常,以为是来分享经验的
首先,加入按键中断还没按下就乱码,可能是按键中断没配置好或者 ...


我发布了一个问题就是一调用TIM_SetCompare2就乱码的
程序用的例程
#include <bsp_pwm_out.h>

static void TIM3_GPIO_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

        /* éè&#214;&#195;TIM3CLK &#206;a 72MHZ */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

  /* GPIOA and GPIOB clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  /*GPIOA Configuration: TIM3 channel 1 and 2 as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                    // &#184;′ó&#195;í&#198;íìê&#228;3&#246;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}

/**
  * @brief  &#197;&#228;&#214;&#195;TIM3ê&#228;3&#246;μ&#196WMD&#197;o&#197;μ&#196;&#196;£ê&#189;£&#172;è&#231;&#214;ü&#198;ú&#161;¢&#188;&#171;D&#212;&#161;¢&#213;&#188;&#191;&#213;±è
  * @param  &#206;T
  * @retval &#206;T
  */
/*
* TIMxCLK/CK_PSC --> TIMxCNT --> TIMx_ARR --> TIMxCNT &#214;&#216;D&#194;&#188;&#198;êy
*                    TIMx_CCR(μ&#231;&#198;&#189;·¢éú±&#228;&#187;ˉ)
* D&#197;o&#197;&#214;ü&#198;ú=(TIMx_ARR +1 ) * ê±&#214;ó&#214;ü&#198;ú
* &#213;&#188;&#191;&#213;±è=TIMx_CCR/(TIMx_ARR +1)
*/
static void TIM3_Mode_Config(void)
{
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;

  /* Time base configuration */                 
  TIM_TimeBaseStructure.TIM_Period = 9999;       //μ±&#182;¨ê±&#198;÷′ó0&#188;&#198;êyμ&#189;9999£&#172;&#188;′&#206;a10000′&#206;£&#172;&#206;aò&#187;&#184;&#246;&#182;¨ê±&#214;ü&#198;ú
  TIM_TimeBaseStructure.TIM_Prescaler = 71;            //éè&#214;&#195;&#212;¤·&#214;&#198;μ;71+1,&#188;′&#206;a1MHz
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;        //éè&#214;&#195;ê±&#214;ó·&#214;&#198;μ&#207;μêy£o2&#187;·&#214;&#198;μ(&#213;aà&#239;ó&#195;2&#187;μ&#189;)
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //&#207;òé&#207;&#188;&#198;êy&#196;£ê&#189;
  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

  /* PWM1 Mode configuration: Channel2 */
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 1000;          //éè&#214;&#195;í¨μà2μ&#196;μ&#231;&#198;&#189;ì&#248;±&#228;&#214;μ£&#172;ê&#228;3&#246;&#213;&#188;&#191;&#213;±èμ&#196WM
  TIM_OC2Init(TIM3, &TIM_OCInitStructure);          //ê1&#196;üí¨μà2
  TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

  /* TIM3 enable counter */
  TIM_Cmd(TIM3, ENABLE);                   //ê1&#196;ü&#182;¨ê±&#198;÷3        
}

/**
  * @brief  TIM3 ê&#228;3&#246WMD&#197;o&#197;3&#245;ê&#188;&#187;ˉ£&#172;&#214;&#187;òaμ÷ó&#195;&#213;a&#184;&#246;oˉêy
  *         TIM3μ&#196;&#203;&#196;&#184;&#246;í¨μà&#190;í&#187;áóDPWMD&#197;o&#197;ê&#228;3&#246;
  * @param  &#206;T
  * @retval &#206;T
  */
void TIM3_PWM_Init(void)
{
        TIM3_GPIO_Config();
        TIM3_Mode_Config();        
}

pwm100hz
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-28 17:14:25 | 显示全部楼层
。。。。中文中居然有笑脸
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-28 17:15:03 | 显示全部楼层
定时器中我删了3个通道
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-28 17:24:38 | 显示全部楼层
亽亼 发表于 2015-12-28 17:12
你现在怎么在纠结按键中断问题,不是先纠结定时器问题吗
按键中断对照例程来就可以了

要不我直接把这个工程发给你吧
谢谢了

涵道电机.zip

331.86 KB, 下载次数: 7

回复 支持 反对

使用道具 举报

发表于 2015-12-28 17:35:57 | 显示全部楼层
  TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

TIM_ARRPreloadConfig(TIM3,  ENABLE);

  /* TIM3 enable counter */
  TIM_Cmd(TIM3, ENABLE);                   //ê1&#196;ü&#182;¨ê±&#198;÷3     
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-28 19:42:29 | 显示全部楼层
亽亼 发表于 2015-12-28 17:35
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

TIM_ARRPreloadConfig(TIM3,  ENABLE);

改了还是不行
而且我一开始没有这条程序也有pwm输出
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-28 19:47:40 | 显示全部楼层
亽亼 发表于 2015-12-28 17:35
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

TIM_ARRPreloadConfig(TIM3,  ENABLE);

把中断去掉就有pwm波,但是依然不能使用TIM_SetCompare2这个函数
现在有两个问题
1.TIM_SetCompare2这条程序的问题,我在初始化之后运行这条程序,20和200和2000都试过,没有pwm输出
2.中断也有问题,中断里面只添加了led反向的程序,没有TIM_SetCompare2,还是没有pwm波
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-28 20:20:21 | 显示全部楼层
亽亼 发表于 2015-12-28 17:35
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

TIM_ARRPreloadConfig(TIM3,  ENABLE);

我在例程里面添加TIM_SetCompare2(TIM3,20);函数就可以改变占空比
应该是我莫名其妙删了什么东西
我再看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-28 21:00:46 | 显示全部楼层
亽亼 发表于 2015-12-28 17:35
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

TIM_ARRPreloadConfig(TIM3,  ENABLE);

程序调好了
不过,为什么删了三个通道的程序就出问题了
虽然我最后也要用4个通道,不过为啥调试一个通道的时候就出问题
回复 支持 反对

使用道具 举报

发表于 2015-12-29 08:35:51 | 显示全部楼层
好吧,来总结一下,你现在是程序调好了
你都不知道之前是什么问题???
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-29 10:18:38 | 显示全部楼层
亽亼 发表于 2015-12-29 08:35
好吧,来总结一下,你现在是程序调好了
你都不知道之前是什么问题???

嗯,其实也不算程序调好了
现在用的是纯例程
原来就是改动了一下例程
就只是删除了其中三个通道没用
然后就出问题了
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-27 08:35 , Processed in 0.045233 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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