Все тот же 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)
{
}
}