首先,向每一个读到这篇文章的人致以帮助。
我有个小计划。一个3x3x3发光二极管杯,用STM32F303制作。
我试着让TIM2和三个频道一起工作,但是。。什么都没发生。
代码如下:

#include "stm32f3xx.h"
#include "stm32f3xx_nucleo.h"

int main(void){
RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;

GPIOA->MODER |= 0b10;           //PA0
GPIOA->MODER |= 0b10 << 2;      //PA1
GPIOA->MODER |= 0b10 << 4;      //PA2

GPIOA->AFR[0] |= 0b0001;
GPIOA->AFR[0] |= 0b0001 << 4;
GPIOA->AFR[0] |= 0b0001 << 8;

TIM2->CCMR1 = (0b0110 << 4) | (0b0110 << 12);
TIM2->CCMR2 = 0b0110 << 4;

TIM2->CCER = TIM_CCER_CC1E;
TIM2->CCER = TIM_CCER_CC2E;
TIM2->CCER = TIM_CCER_CC3E;


TIM2->PSC = 7999;
TIM2->ARR = 999;

TIM2->CCR1 = 99;
TIM2->CCR2 = 399;
TIM2->CCR3 = 699;

TIM2->CR1 = TIM_CR1_CEN;

while (1)
{
    ;
}

有什么想法吗?

最佳答案

好像你错过了什么。
如Bence所述:使用|=表示CCER
在CR1上也一样,尽管这里没有必要
在CCMR中的每个启用信道上设置PE位(预加载启用)
在EGR寄存器中的结束设置UE位(更新生成)
希望就这些。

关于c - 如何在STM32F3上实现不带CubeMX的PWM?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53230061/

10-12 21:33