野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 25146|回复: 9

TIM4的PD12,PD13,PD14输出不了PWM

[复制链接]
发表于 2014-5-19 22:07:00 | 显示全部楼层 |阅读模式
  1. #include "bsp_pwm_output.h"
  2. /*
  3. 1号舵机 PD12
  4. 2号舵机 PD13
  5. 3号舵机 PD14
  6. */          
  7. static void TIM4_GPIO_Config(void)
  8. {
  9.   GPIO_InitTypeDef GPIO_InitStructure;

  10.         /* 设置TIM3CLK 为 72MHZ */
  11.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);

  12.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
  13.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14;
  14.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                  
  15.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  16.   GPIO_Init(GPIOD, &GPIO_InitStructure);
  17. }
  18. static void TIM4_Mode_Config(void)
  19. {
  20.   TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  21.          
  22.   TIM_TimeBaseStructure.TIM_Period = 19999;      
  23.   TIM_TimeBaseStructure.TIM_Prescaler = 71;            //设置预分频:不预分频,即为72MHz
  24.   TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;        //设置时钟分频系数:不分频(这里用不到)
  25.   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数模式
  26.   TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
  27. }
  28. void Steering_1(int a)
  29. {             
  30.    TIM_OCInitTypeDef  TIM_OCInitStructure;
  31.    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;            //配置为PWM模式1
  32.    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;       
  33.    TIM_OCInitStructure.TIM_Pulse = a;           //设置跳变值,当计数器计数到这个值时,电平发生跳变
  34.    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  //当定时器计数值小于CCR1_Val时为高电平
  35.    TIM_OC1Init(TIM4, &TIM_OCInitStructure);         //使能通道1
  36.    TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);
  37.    TIM_Cmd(TIM4, ENABLE);
  38. }
  39. void Steering_2(int b)
  40. {
  41.   TIM_OCInitTypeDef  TIM_OCInitStructure;
  42.   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;         
  43.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  44.   TIM_OCInitStructure.TIM_Pulse =b;          //设置通道2的电平跳变值,输出另外一个占空比的PWM
  45.   TIM_OC2Init(TIM4, &TIM_OCInitStructure);          //使能通道2
  46.   TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);
  47.   TIM_Cmd(TIM4, ENABLE);          
  48. }
  49. void Steering_3(int c)
  50. {  
  51.   TIM_OCInitTypeDef  TIM_OCInitStructure;
  52.   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;         
  53.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  54.   TIM_OCInitStructure.TIM_Pulse =c;        //设置通道3的电平跳变值,输出另外一个占空比的PWM
  55.   TIM_OC3Init(TIM4, &TIM_OCInitStructure);         //使能通道3
  56.   TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);
  57.   TIM_Cmd(TIM4, ENABLE);         
  58. }
  59. void TIM4_PWM_Init(void)
  60. {
  61. TIM4_GPIO_Config();
  62. TIM4_Mode_Config();       
  63. }
复制代码
要控制机械臂,所以把光盘里面的PWM方波输出的程序改完后,很满意。项目中还需要NRF无线通信,发现TIM3的PA6,PA7同时也是SPI1的接口,于是打算换成定时器4的通道输出PWM方波控制3个舵机,在看了下原理图,打算使用PD12,PD13,PD14三个GPIO口作为舵机的信号输出,把光盘的程序改成TIM4的,编译通过,仿真不输出波形,查看了每一项的配置,没问题呀,火哥快来呀,下周就交中期检查报告了
回复

使用道具 举报

发表于 2014-5-19 22:37:58 | 显示全部楼层
下班了,明天回公司看看
回复 支持 反对

使用道具 举报

发表于 2014-5-19 22:53:02 | 显示全部楼层
PD12 PD13 PD14重映射后才是TIM4的输出通道,你的程序里没有配置TIM4的重映射
回复 支持 反对

使用道具 举报

发表于 2014-5-19 22:54:44 | 显示全部楼层
TIM4的默认输出引脚是PB6 PB7 PB8 PB9,你用的PD引脚跟楼上说的一样,需要设置重映射才会在这些引脚输出
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-19 23:33:19 | 显示全部楼层
雍蕴美 发表于 2014-5-19 22:53
PD12 PD13 PD14重映射后才是TIM4的输出通道,你的程序里没有配置TIM4的重映射

哦,明白了,怎么从新映射呀?是不是也有库函数来配置,我去找找
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-19 23:43:49 | 显示全部楼层
强烈支持,非常感谢哥们
我懂了,少了重映射 加上  GPIO_PinRemapConfig(GPIO_Remap_TIM4, ENABLE); 就OK了,STM32真是神奇呀
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-20 14:56:34 | 显示全部楼层
fire 发表于 2014-5-19 22:37
下班了,明天回公司看看

昨天晚上加上 GPIO_PinRemapConfig(GPIO_Remap_TIM4, ENABLE);  软件仿真可以输出波形,今天回到实验室下载到开发板上,这几个引脚还有输出,是什么情况呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-20 14:57:09 | 显示全部楼层
fire 发表于 2014-5-19 22:37
下班了,明天回公司看看

昨天晚上加上 GPIO_PinRemapConfig(GPIO_Remap_TIM4, ENABLE);  软件仿真可以输出波形,今天回到实验室下载到开发板上,这几个引脚还有输出,是什么情况呢?
回复 支持 反对

使用道具 举报

发表于 2014-5-20 15:25:34 | 显示全部楼层
oN海葆科圣No|ex 发表于 2014-5-20 14:57
昨天晚上加上 GPIO_PinRemapConfig(GPIO_Remap_TIM4, ENABLE);  软件仿真可以输出波形,今天回到实验室下 ...

还是没有输出?是不是有复用了啊,要不你试试直接用PB6 PB7 PB8 PB9
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-20 23:06:19 | 显示全部楼层
flyleaf 发表于 2014-5-20 15:25
还是没有输出?是不是有复用了啊,要不你试试直接用PB6 PB7 PB8 PB9

恩,后来就用了PB6~PB8的3GPIO,反正不占用SPI1
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 04:51 , Processed in 0.027404 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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