初中生
最后登录1970-1-1
在线时间 小时
注册时间2020-8-12
|
教程里面有一个输出1/3占空比的PWM波形,用的是TIM2,引脚是PA5,我想把它改成用TIM4输出PWM波,引脚是PD14,我打开bsp_general_tim.c然后按照对应的每一行都在bsp_general_tim.h里面修改了,其他的部分都没有修改,请问还有那些设置需要修改啊,是不是在其他文件中也有要修改的地方啊。下面是bsp_general_tim.c和bsp_general_tim.h的程序
- /**
- ******************************************************************************
- * @file bsp_general_tim.c
- * @author STMicroelectronics
- * @version V1.0
- * @date 2015-xx-xx
- * [url=home.php?mod=space&uid=41770]@brief[/url] 通用定时器PWM输出范例
- ******************************************************************************
- * @attention
- *
- * 实验平台:野火 STM32 F407 开发板
- * 论坛 :http://www.firebbs.cn
- * 淘宝 :https://fire-stm32.taobao.com
- *
- ******************************************************************************
- */
-
- #include "./tim/bsp_general_tim.h"
- /**
- * @brief 配置TIM复用输出PWM时用到的I/O
- * @param 无
- * @retval 无
- */
- static void TIMx_GPIO_Config(void)
- {
- /*定义一个GPIO_InitTypeDef类型的结构体*/
- GPIO_InitTypeDef GPIO_InitStructure;
- /*开启相关的GPIO外设时钟*/
- RCC_AHB1PeriphClockCmd (GENERAL_OCPWM_GPIO_CLK, ENABLE);
- /* 定时器通道引脚复用 */
- GPIO_PinAFConfig(GENERAL_OCPWM_GPIO_PORT,GENERAL_OCPWM_PINSOURCE,GENERAL_OCPWM_AF);
-
- /* 定时器通道引脚配置 */
- GPIO_InitStructure.GPIO_Pin = GENERAL_OCPWM_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
- GPIO_Init(GENERAL_OCPWM_GPIO_PORT, &GPIO_InitStructure);
- }
- /*
- * 注意:TIM_TimeBaseInitTypeDef结构体里面有5个成员,TIM6和TIM7的寄存器里面只有
- * TIM_Prescaler和TIM_Period,所以使用TIM6和TIM7的时候只需初始化这两个成员即可,
- * 另外三个成员是通用定时器和高级定时器才有.
- *-----------------------------------------------------------------------------
- * TIM_Prescaler 都有
- * TIM_CounterMode TIMx,x[6,7]没有,其他都有(基本定时器)
- * TIM_Period 都有
- * TIM_ClockDivision TIMx,x[6,7]没有,其他都有(基本定时器)
- * TIM_RepetitionCounter TIMx,x[1,8]才有(高级定时器)
- *-----------------------------------------------------------------------------
- */
- static void TIM_PWMOUTPUT_Config(void)
- {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- TIM_OCInitTypeDef TIM_OCInitStructure;
-
- // 开启TIMx_CLK,x[2,3,4,5,12,13,14]
- RCC_APB1PeriphClockCmd(GENERAL_TIM_CLK, ENABLE);
- /* 累计 TIM_Period个后产生一个更新或者中断*/
- //当定时器从0计数到8399,即为8400次,为一个定时周期
- TIM_TimeBaseStructure.TIM_Period = 8400-1;
-
- // 通用控制定时器时钟源TIMxCLK = HCLK/2=84MHz
- // 设定定时器频率为=TIMxCLK/(TIM_Prescaler+1)=100KHz
- TIM_TimeBaseStructure.TIM_Prescaler = 840-1;
- // 采样时钟分频
- TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
- // 计数方式
- TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
-
- // 初始化定时器TIMx, x[2,3,4,5,12,13,14]
- TIM_TimeBaseInit(GENERAL_TIM, &TIM_TimeBaseStructure);
-
- /*PWM模式配置*/
- /* PWM1 Mode configuration: Channel1 */
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //配置为PWM模式1
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
- TIM_OCInitStructure.TIM_Pulse = 2800-1;
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //当定时器计数值小于CCR1_Val时为高电平
- TIM_OC1Init(GENERAL_TIM, &TIM_OCInitStructure); //使能通道1
-
- /*使能通道1重载*/
- TIM_OC1PreloadConfig(GENERAL_TIM, TIM_OCPreload_Enable);
-
- // 使能定时器
- TIM_Cmd(GENERAL_TIM, ENABLE);
- }
- /**
- * @brief 初始化控制通用定时器
- * @param 无
- * @retval 无
- */
- void TIMx_Configuration(void)
- {
- TIMx_GPIO_Config();
-
- TIM_PWMOUTPUT_Config();
- }
- /*********************************************END OF FILE**********************/
复制代码- #ifndef __GENERAL_TIM_H
- #define __GENERAL_TIM_H
- #include "stm32f4xx.h"
- #define GENERAL_OCPWM_PIN GPIO_Pin_14
- #define GENERAL_OCPWM_GPIO_PORT GPIOD
- #define GENERAL_OCPWM_GPIO_CLK RCC_AHB1Periph_GPIOD
- #define GENERAL_OCPWM_PINSOURCE GPIO_PinSource14
- #define GENERAL_OCPWM_AF GPIO_AF_TIM4
- #define GENERAL_TIM TIM4
- #define GENERAL_TIM_CLK RCC_APB1Periph_TIM4
- void TIMx_Configuration(void);
- #endif /* __GENERAL_TIM_H */
复制代码
|
|