STM32 f401 xB/C -PA 15上无PWM信号

gmxoilav  于 2023-01-25  发布在  其他
关注(0)|答案(2)|浏览(195)

我有一块STM32F401xB/C板。
我正在尝试为我的直流电机创建一个PWM信号。我已经遵循了这个教程,似乎理解了代码。
https://ruturajn.hashnode.dev/generating-pwm-pulses-on-the-stm32f407-for-servo-motor-control-using-bare-metal-programming
但在我改变引脚后,我想要的pwm输出从我没有得到任何信号。教程参考pa5引脚,它的工作,但pa15不工作,即使它连接到相同的计时器tim2和通道。
你知道吗?
这是我的代码:

//initialises the GPIO pins
void GPIO_Init(){
  //give and clock to the GPIOB and GPIOA device
  RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN;
  RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;

  //THESE PINS ARE THE PWM DRIVERS
  //PA15
  //set alternative mode
  GPIOA->MODER &= ~(GPIO_MODER_MODER15_1);  
  GPIOA->MODER |=   GPIO_MODER_MODER15_1;   

  //low part of the alternate function register
  GPIOA->AFR[1] |= GPIO_AFRH_AFSEL15_0;
}

//initialise the TIM2 timer device
void TIM2_Init(){
  //give pwr and clk to TIM2 device
  RCC->AHB1ENR |= RCC_APB1ENR_TIM2EN;
  
  //set prescaler to 1Mhz = 1 microSeconds
  TIM2->PSC = 16-1;

  //total period of the timer = 20ms
  TIM2->ARR = 20000;

  //set counter to 0
  TIM2->CNT = 0;

  //set capture/compare mode register 1 to PWM Mode 1
  TIM2->CCMR1 = 0x0060;

  //set capture/compare enable register to output on chanel 1
  TIM2->CCER |= 1;

  //set >50% power
  TIM2->CCR1 = 10000;
}



void setup(){
  //set the timer to 16 mhz
  RCC->CFGR |= 0 << 10;

  GPIO_Init();
  TIM2_Init();

  //start TIM2 timer
  TIM2->CR1 |= 1;
}
ruoxqz4g

ruoxqz4g1#

这仅清除单个位

//set alternative mode
  GPIOA->MODER &= ~(GPIO_MODER_MODER15_1);  
  ...

应该是

GPIOA->MODER &= ~(GPIO_MODER_MODE15_Msk);  
  ...

PA15与JTDI共享,可能存在外部干扰。
默认情况下,它使能上拉,如果此引脚用作输出,则应将其清零。

yh2wf1be

yh2wf1be2#

问题是我没有为时钟正确设置时钟和电源。我应该检查的寄存器是RCC->APB1ENR而不是RCC->AHB1ENR。我通过PA5获得电源的事实是一个巧合。

相关问题