gpt4 book ai didi

c - PWM 输出在 STM32F10x OPEN107V 开发板上不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:51 26 4
gpt4 key购买 nike

你好,我有“stm32f10x open107V 开发板”,我已经修改了制造商提供的 PWM 代码,但是我没有在开发板上提供的 LED 上获得任何 PWM 输出,请任何人帮助获得以下代码.端口 B(GPIOB)上的 GPIO_pins 0、1、14、15 是开发板上给出的 Led 引脚。代码没有错误,链接时也没有错误。因为我是初学者,所以我不明白问题出在哪里。

   /**
-----------------------------------------------------------------*/
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_tim.h"



TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
uint16_t CCR1_Val = 333;
uint16_t CCR2_Val = 249;
uint16_t CCR3_Val = 166;
uint16_t CCR4_Val = 83;
uint16_t PrescalerValue ;

/* Private function prototypes -----------------------------------------------*/
void RCC_Configuration(void);
void GPIO_Configuration(void);

/* Private functions ---------------------------------------------------------*/

/**

int main(void)
{

RCC_Configuration();

/*GPIO Configuration */
GPIO_Configuration();


PrescalerValue =(72000000 / 24000000) - 1;
/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = 665;
TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
TIM_TimeBaseStructure.TIM_ClockDivision = 4;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

/* PWM1 Mode configuration: Channel1 */
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;

TIM_OC1Init(TIM3, &TIM_OCInitStructure);

TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);

/* PWM1 Mode configuration: Channel2 */
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = CCR2_Val;

TIM_OC2Init(TIM3, &TIM_OCInitStructure);

TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

/* PWM1 Mode configuration: Channel3 */
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = CCR3_Val;

TIM_OC3Init(TIM3, &TIM_OCInitStructure);

TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);


/* TIM3 enable counter */
TIM_Cmd(TIM3, ENABLE);

while (1)
{}
}


void RCC_Configuration(void)
{
/* TIM3 clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

/* GPIOA and GPIOB clock enable */
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
}


void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*GPIOB Configuration: TIM3 channel1, 2, 3 and 4 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_14|GPIO_Pin_15 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);

}

最佳答案

首先,如果您查看 STM32F107 数据表(我假设您拥有的是 MCU),PB0 和 PB1 引脚可以映射到 TIM3_CH3 和 TIM3_CH4,但 PB14 和 PB15 不能映射到任何 TIM3 channel ——仅适用于 TIM1 channel 。请参阅第 3 节的表 5,至少了解我的数据表版本。

其次,您正在使用 AFIO 重映射功能,调用 GPIO_PinRemapConfig()。确实连接到 LED 的两个引脚(PB0 和 PB1)不需要重新映射,而另外两个(PB14 和 PB15)无论您做什么都不能重新映射到 TIM3 channel 。

具体来说,只需取消对 GPIO_PinRemapConfig() 的调用,您就可以通过最少的代码更改在两个引脚(PB0 和 PB1)上获得 PWM 输出。至于 PB14 和 PB15,您需要配置 TIM1,这将需要大量额外代码。遗憾的是,您无法将这些引脚映射到 TIM3。

关于c - PWM 输出在 STM32F10x OPEN107V 开发板上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22899425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com