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

STM32 PWM输出问题

[复制链接]
幸福的拾荒者 提问时间:2017-4-5 13:11 /
请问有没有知道这个程序有什么问题吗,下载到芯片一直没有PWM输出,不知道为什么,请教一下,谢谢。。。。

主函数

主函数

PWM配置

PWM配置
收藏 2 评论22 发布时间:2017-4-5 13:11

举报

22个回答
yygkqzh 回答时间:2017-5-5 21:45:42
找到问题所在了 ,少下面这一句,添加后就好了,不光要使能定时器、GPIO,还要使能功能复用
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

评分

参与人数 1ST金币 +3 收起 理由
zero99 + 3

查看全部评分

eagle0754 回答时间:2017-5-5 08:38:54
官方例子看下
  1. void TIM_Config(void)
  2. {
  3.   GPIO_InitTypeDef GPIO_InitStructure;
  4.   
  5.   /* TIM10 clock enable */
  6.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM10, ENABLE);

  7.   /* GPIOF clock enable */
  8.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
  9.   
  10.   /* GPIOF Configuration: TIM10 CH1 (PF6) */
  11.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 ;
  12.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  13.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  14.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  15.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
  16.   GPIO_Init(GPIOF, &GPIO_InitStructure);

  17.   /* Connect TIM pins to AF3 */
  18.   GPIO_PinAFConfig(GPIOF, GPIO_PinSource6, GPIO_AF_TIM10);
  19. }
复制代码

  1. int main(void)
  2. {
  3.   /*!< At this stage the microcontroller clock setting is already configured,
  4.        this is done through SystemInit() function which is called from startup
  5.        file (startup_stm32f2xx.s) before to branch to application main.
  6.        To reconfigure the default setting of SystemInit() function, refer to
  7.        system_stm32f2xx.c file
  8.      */

  9.   /* TIM Configuration */
  10.   TIM_Config();
  11.   
  12.   /* ---------------------------------------------------------------------------
  13.     TIM10 Configuration: generate 1 PWM signal:
  14.    
  15.     In this example TIM10 input clock (TIM10CLK) is set to 2 * APB2 clock (PCLK2),
  16.     since APB2 prescaler is different from 1.   
  17.       TIM10CLK = 2 * PCLK2  
  18.       PCLK2 = HCLK / 2
  19.       => TIM10CLK = HCLK = SystemCoreClock
  20.          
  21.     To get TIM10 counter clock at 20 MHz, the prescaler is computed as follows:
  22.        Prescaler = (TIM10CLK / TIM10 counter clock) - 1
  23.        Prescaler = (SystemCoreClock /20 MHz) - 1
  24.                                              
  25.     To get TIM10 output clock at 30 KHz, the period (TIM10_ARR) is computed as follows:
  26.        ARR = (TIM10 counter clock / TIM10 output clock) - 1
  27.            = 665
  28.                   
  29.     TIM10 Channel1 duty cycle = (TIM10_CCR1/ TIM10_ARR)* 100 = 50%

  30.     Note:
  31.      SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f2xx.c file.
  32.      Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate()
  33.      function to update SystemCoreClock variable value. Otherwise, any configuration
  34.      based on this variable will be incorrect.   
  35.   --------------------------------------------------------------------------- */   


  36.   /* Compute the prescaler value */
  37.   PrescalerValue = (uint16_t) (SystemCoreClock / 20000000) - 1;

  38.   /* Time base configuration */
  39.   TIM_TimeBaseStructure.TIM_Period = 665;
  40.   TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
  41.   TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  42.   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  43.   TIM_TimeBaseInit(TIM10, &TIM_TimeBaseStructure);

  44.   /* PWM1 Mode configuration: Channel1 */
  45.   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  46.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  47.   TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
  48.   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

  49.   TIM_OC1Init(TIM10, &TIM_OCInitStructure);

  50.   TIM_OC1PreloadConfig(TIM10, TIM_OCPreload_Enable);

  51.   TIM_ARRPreloadConfig(TIM10, ENABLE);

  52.   /* TIM10 enable counter */
  53.   TIM_Cmd(TIM10, ENABLE);

  54.   while (1)
  55.   {}
  56. }
复制代码

评分

参与人数 1ST金币 +5 收起 理由
zero99 + 5

查看全部评分

群星闪烁 回答时间:2017-5-6 10:36:29
你的代码里面,是先执行PWMA=2000再执行配置定时器3,也就是说在执行PWMA=2000这条语句的时候定时器3的时钟没有打开,那么这时候向定时器3的CCR1寄存器的写是无效的。
建议在配置完定时器3后,再执行PWMA=2000,希望PWMA这个宏没有错

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

wenyangzeng 回答时间:2017-5-5 07:25:08
Period比Pulse小,就没有输出。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

时光虫子 回答时间:2017-5-5 08:30:25
看你上面代码没有看到问题,你最好一步一步仿真看看到底怎么回事

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

队长shiwo 回答时间:2017-5-5 08:56:49
从上面代码  看不出PWM输出函数

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

无薪税绵 回答时间:2017-5-5 09:05:59
本帖最后由 无薪税绵 于 2017-5-5 09:07 编辑

给你一个参考:
http://www.cnblogs.com/jiwangbujiu/p/5616376.html

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

七哥 回答时间:2017-5-5 09:47:43
本帖最后由 toofree 于 2017-5-5 09:50 编辑

问题暂未看出来。

IO模式后面设置过了,刚没看到
harvardx 回答时间:2017-5-5 10:10:25
搞清楚实质. 脉宽 ,周期, 脉宽是通过match寄存器实现.

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

cldym 回答时间:2017-5-5 10:29:17
问题暂未看出来。
sting 回答时间:2017-5-5 10:37:53
CCR1 = ??
洛千叶 回答时间:2017-5-5 11:42:24
直接使用CubeMX生成工程多简单
zbber 回答时间:2017-5-5 11:52:01
官方例子看下
yygkqzh 回答时间:2017-5-5 21:26:15
我看的好像没啥问题啊
yygkqzh 回答时间:2017-5-5 21:27:38
wenyangzeng 发表于 2017-5-5 07:25
Period比Pulse小,就没有输出。

你重新看 你看错了,人家设置的是对的
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版