Перейти к содержимому

#29. PWM Output на CMSIS

Все тот же PWM но только на регистрах (pin A1):

#include "stm32f10x.h"

int TMR_T;
int PWM_VALUE;

void RCC_ENABLE(void)
{
    RCC->APB2ENR |= RCC_APB2Periph_GPIOA;
    RCC->APB1ENR |= RCC_APB1Periph_TIM2;
}


void PWM_Configuration(void)
{
    TIM2->ARR=TMR_T;
    TIM2->CCMR1=TIM_CCMR1_OC2M_2|TIM_CCMR1_OC2M_1| TIM_CCMR1_OC2M_0 | TIM_CCMR1_OC2PE;
    TIM2->CCMR2=TIM_CCMR2_OC3M_2|TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3PE;    
    
    TIM2->CCER=TIM_CCER_CC2E | TIM_CCER_CC3E;
    TIM2->CCR2=TMR_T - PWM_VALUE;
    TIM2->CCR3=PWM_VALUE;
    
    TIM2->CR1=TIM_CR1_ARPE | TIM_CR1_CMS_1 | TIM_CR1_CMS_0;
    TIM2->EGR=TIM_EGR_UG;    
    TIM2->CR1|=TIM_CR1_CEN;
 }
void GPIO_Configuration(void)
{
GPIOA->CRL   &= ~GPIO_CRL_MODE1;       //очистить разряды MODE
GPIOA->CRL   &= ~GPIO_CRL_CNF1 ;       //очистить разряды CNF
GPIOA->CRL   |=  GPIO_CRL_MODE1_1;     //выход, 2MHz
GPIOA->CRL   |=  GPIO_CRL_CNF1_1;      //альтернативная функция, симетричный  
GPIOA->CRL   &= ~GPIO_CRL_MODE2;       //очистить разряды MODE
GPIOA->CRL   &= ~GPIO_CRL_CNF2;        //очистить разряды CNF
GPIOA->CRL   |=  GPIO_CRL_MODE2_1;     //выход, 2MHz
GPIOA->CRL   |=  GPIO_CRL_CNF2_1;      //альтернативная функция, симетричный   
}

int main(void)
{
TMR_T=800;
PWM_VALUE=200; 
RCC_ENABLE ();
GPIO_Configuration ();
PWM_Configuration ();



while(1)
{
}
}
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x