내 STM32030R8T6의 두 핀에서 PWM 기능을 사용하려고합니다. Nucleo 개발 보드에 있으며 Keil을 사용하고 있습니다. 학습을 위해 저는 주로 this website에있는 자료를 따르고 있지만 다른 MCU를 사용하기 때문에 해당 사이트에서 적응했습니다. 실제로 PWM을 설정하는 것이 그리 많지 않으므로 내가 뭘 잘못했는지는 잘 모르겠다. 온보드 LED가 초당 1.5 번 깜박이기 때문에 타이머가 작동한다는 것을 알았지 만 Ch1과 내 범위와 Ch2 출력 핀을 나는 아무것도 얻지 않는다. 난 꽤 핀이 제대로 기능을 설정하고 24 MHz의를 보여주는 MCO 핀과 동일하게 설정되어 있기 때문에 대체 기능 푸시 - 당겨 설정되어 있는지 (내 싼 범위가 결정하는 몇 가지 문제가있다 ...). 관련성 높은 모든 관련 코드를 첨부했습니다. 그리고 사용자의 편의를 위해 :STM32F030 PWM 설정 문제
UM0360 Reference Manual (STM32F030...)
나는뿐만 아니라 Nucleo 사용 설명서 및 장치 시트에 대한 링크를 게시 할 것입니다 그러나 이것은 내 첫 번째 질문입니다 내 명성 때문에 나는, 두 개 이상의 링크를 게시 할 수 없습니다 열 개 미만.
제가 잘못하고있는 것에 대한 도움은 감사하겠습니다. 나는 바보 같은 것이라고 확신합니다.
#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
}
인터럽트를 사용하지 않으시겠습니까? – bunkerdive
또한, 'RCC-> APB2ENR | = RCC_APB2ENR_IOPCEN | RCC_APB2ENR_AFIOEN;'해당 포트를 활성화하고 다른 기능 블록을 사용 하시겠습니까? – bunkerdive
예,이 MCU의 AHBENR 레지스터에 있습니다. 비트가 여전히 IOPxEN이더라도 컴파일러가 대신 GPIOxEN을 사용합니다. 둘 다 같은 번호입니다. –