2

STM32030R8T6 の 2 つのピンで PWM を機能させようとしています。これは Nucleo 開発ボード上にあり、Keil を使用しています。学習のために、私は主にこのWebサイトの資料に従っていますが、そのサイトは別のMCUを使用しているため、適応しています. PWM を設定することはあまりないので、何が間違っていたのかよくわかりません。オンボード LED が 1 秒あたり 1.5 回点滅するため、タイマーが動作していることはわかっていますが、Ch1 とスコープを使用したCh2出力ピンは何も得られません。ピンが代替機能プッシュプルで正しく設定されていると確信しています。なぜなら、それらは機能し、24 MHz を示している MCO ピンと同じに設定されているからです (ただし、私の安価なスコープでは、それを判断するのに問題があります...)。私' 関連するすべてのコードと、リモートで関連する可能性のあるコードをすべて添付しました。そしてあなたの便宜のために:

UM0360 リファレンス マニュアル (STM32F030...)

Nucleo ユーザー マニュアルとデバイス データシートへのリンクも投稿しますが、これが最初の質問であり、私の評判が 10 未満であるため、2 つ以上のリンクを投稿することはできません。

私が間違っているかもしれないことについての助けをいただければ幸いです。それはばかげたことだと確信しています。

#include "stm32f0xx.h"

void Initializations(void);

int main(void)
{
    Initializations();

    while(1)
    {
        /*  Toggle onboard LED whenever timer overflows */
        if((TIM3->SR & TIM_SR_UIF))
        {
            TIM3->SR &= ~TIM_SR_UIF;
            GPIOA->ODR ^= GPIO_ODR_5;
        }           
    }
}

void Initializations(void)
{ 
    /*  CLK CONFIG  */
    RCC->CFGR |= RCC_CFGR_HPRE_DIV2  |
                 RCC_CFGR_PPRE_DIV16 |
                 RCC_CFGR_MCO_SYSCLK |
                 RCC_CFGR_PLLMUL6; 

    /*  Activate PLL, wait  */
    RCC->CR |= RCC_CR_PLLON;
    while(!(RCC->CR & RCC_CR_PLLRDY));
    RCC->CFGR |= RCC_CFGR_SW_PLL;

    /*  Enable IO CLKs  */
    RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
    RCC->AHBENR |= RCC_AHBENR_GPIOCEN;

    /*  Enable peripheral CLKs  */
    RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
    RCC->APB2ENR |= RCC_APB2ENR_USART1EN;

    /*  PIN INITIALIZATIONS */
    GPIOA->MODER |= GPIO_MODER_MODER5_0 |       // Onboard LED (General output)
                    GPIO_MODER_MODER2_1 |       // USART2 TX (Alternate function)
                    GPIO_MODER_MODER3_1 |       // USART2 RX (Alternate function)
                    GPIO_MODER_MODER6_1 |       // TIM3 CH1 (Alternate function)
                    GPIO_MODER_MODER7_1 |       // TIM3 CH2 (Alternate function)
                    GPIO_MODER_MODER8_1 |       // MCO (Alternate function)
                    GPIO_MODER_MODER9_1 |       // USART1 TX (Alternate function)
                    GPIO_MODER_MODER10_1;       // USART1 RX (Alternate function)

    /*  TIMER INITS */
    TIM3->PSC = 7;
    TIM3->ARR = 59999;

    /*  CCM1    */
    TIM3->CCMR1 |= TIM_CCMR1_OC1M_0 | 
                   TIM_CCMR1_OC1M_1;

    TIM3->CCR1 |= 4499;
    TIM3->CCER |= TIM_CCER_CC1E;                // Enable Ch1

    /*  CCM2    */
    TIM3->CCMR1 |= TIM_CCMR1_OC2M_0 | 
                   TIM_CCMR1_OC2M_1;

    TIM3->CCR2 |= 29999;
    TIM3->CCER |= TIM_CCER_CC2E;                // Enable Ch2

    TIM3->CR1 |= TIM_CR1_CEN;                   // Enable TIM3

    /*  USART INITS */
    RCC->CFGR3 |= RCC_CFGR3_USART1SW_0;         // Clock USART1 from SYSCLK
}
4

1 に答える 1