Здравствуйте.
Хочу сделать remapping TIM2, чтобы перебросить TIM2_CH3 с PA2 на PB10.
Вобщем я настроил TIM2 на генерацию PWM на TIM2_CH3 и успешно снимал результаты его работы с ножки PA2.
Потом чтобы перебросить TIM2_CH3 с PA2 на PB10 (сделать remapping) я:
Разрешаю тактирование - 36 RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
взвожу бит REMAP_0 в единицу - 100 AFIO->MAPR |= AFIO_MAPR_TIM2_REMAP_0;
Но шим попрежнему остается на PA2
P.S. извиняюсь за иероглифы в комментариях к программе
Раздел: Песочница или Вопрос-Ответ
Хочу сделать remapping TIM2, чтобы перебросить TIM2_CH3 с PA2 на PB10.
Вобщем я настроил TIM2 на генерацию PWM на TIM2_CH3 и успешно снимал результаты его работы с ножки PA2.
Потом чтобы перебросить TIM2_CH3 с PA2 на PB10 (сделать remapping) я:
Разрешаю тактирование - 36 RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
взвожу бит REMAP_0 в единицу - 100 AFIO->MAPR |= AFIO_MAPR_TIM2_REMAP_0;
Но шим попрежнему остается на PA2
#include "stm32f10x.h"
#define CLK_MUL 2 // PLL
int left();
int i;
int q=0;
int let;
int m=0;
int qw=0;
int up_to_let;
int AdcInit();
int adc1;
int adc2;
int uk;
int root=0;
int q1;
int adc;
int main()
{
/*
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; //?????? ???????????? ?? TIM2
TIM2->PSC = 8000-1; //????????? ???????? ??? ???????????? ???????????
TIM2->CR1 = TIM_CR1_OPM; //????? ?????? ????????
*/
RCC->CR|=RCC_CR_HSEON; // HSE.
while (!(RCC->CR & RCC_CR_HSERDY)) {}; // HSE.
RCC->CFGR &=~RCC_CFGR_SW; // SW0, SW1.
RCC->CFGR |= RCC_CFGR_SW_HSE; // HSE SW0=1.
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // A
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; // B
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; //
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // 2
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN; // 3
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN; // 4
//
GPIOC->CRL &= ~GPIO_CRL_MODE5;
GPIOC->CRL |= GPIO_CRL_MODE5_1;
GPIOC->CRL &= ~GPIO_CRL_CNF5;
// GPIOC->CRL |= GPIO_CRL_CNF5_0;
GPIOC->CRL &= ~GPIO_CRL_MODE4;
GPIOC->CRL |= GPIO_CRL_MODE4_1;
GPIOC->CRL &= ~GPIO_CRL_CNF4;
// GPIOC->CRL |= GPIO_CRL_CNF4_0;
GPIOC->CRL &= ~GPIO_CRL_MODE3;
GPIOC->CRL |= GPIO_CRL_MODE3_1;
GPIOC->CRL &= ~GPIO_CRL_CNF3;
// GPIOC->CRL |= GPIO_CRL_CNF3_0;
GPIOC->CRL &= ~GPIO_CRL_MODE2;
GPIOC->CRL |= GPIO_CRL_MODE2_1;
GPIOC->CRL &= ~GPIO_CRL_CNF2;
// GPIOC->CRL |= GPIO_CRL_CNF2_0;
GPIOA->CRL &= ~GPIO_CRL_MODE2;
GPIOA->CRL |= GPIO_CRL_MODE2_1;
GPIOA->CRL &= ~GPIO_CRL_CNF2;
GPIOA->CRL |= GPIO_CRL_CNF2_1;
GPIOB->CRL &= ~GPIO_CRL_MODE0;
GPIOB->CRL |= GPIO_CRL_MODE0_1;
GPIOB->CRL &= ~GPIO_CRL_CNF0;
GPIOB->CRL |= GPIO_CRL_CNF0_1;
GPIOB->CRL &= ~GPIO_CRL_MODE1;
GPIOB->CRL |= GPIO_CRL_MODE1_1;
GPIOB->CRL &= ~GPIO_CRL_CNF1;
GPIOB->CRL |= GPIO_CRL_CNF1_1;
GPIOB->CRL &= ~GPIO_CRL_MODE6;
GPIOB->CRL &= ~GPIO_CRL_CNF6;
GPIOB->CRL |= GPIO_CRL_CNF6_1;
// GPIOC->CRL &= ~GPIO_CRL_MODE6;
// GPIOC->CRL |= GPIO_CRL_MODE6_1;
GPIOB->CRH &= ~GPIO_CRH_MODE10;
GPIOB->CRH |= GPIO_CRH_MODE10_1;
GPIOB->CRH &= ~GPIO_CRH_CNF10;
GPIOB->CRH |= GPIO_CRH_CNF10_1;
//
TIM3->CCER |= (TIM_CCER_CC3E|TIM_CCER_CC4E); //
TIM3->CCMR2 &= ~(TIM_CCMR2_OC3M | TIM_CCMR2_OC4M); // 0
TIM3->CCMR2|=(TIM_CCMR2_OC3M_0 | TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC4M_0 | TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_2); //
AFIO->MAPR |= AFIO_MAPR_TIM2_REMAP_0;
TIM2->CCER |= TIM_CCER_CC3E; //
TIM2->CCMR2 &= ~TIM_CCMR2_OC3M; // 0
TIM2->CCMR2|=(TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2); //
TIM2->PSC = (8 - 1)*3;
TIM2->CCR3= 15/3;
TIM4->CCMR1 &= ~TIM_CCMR1_CC1S;
TIM4->CCMR1 |=TIM_CCMR1_CC1S_1;
TIM4->CCER &= ~TIM_CCER_CC1P;
TIM4->CCER &= ~TIM_CCER_CC1NP;
TIM4->SMCR |=0x5;
TIM4->SMCR |= 0x50;
TIM4->DIER = TIM_DIER_TIE;
NVIC_EnableIRQ (TIM4_IRQn);
__enable_irq();
// !
TIM4->CR1 |= TIM_CR1_CEN;
TIM3->CR1 |= TIM_CR1_CEN;
TIM2->CR1 |= TIM_CR1_CEN;
TIM3->CCR3= 1000;// 20383
TIM3->CCR4= 1000; // ()
GPIOC->ODR = 12;
//LED
for (;;)
{
if ((up_to_let>500) &(up_to_let<0x3000)) left();
}
}
void TIM4_IRQHandler()
{
if(TIM4->SR & TIM_SR_TIF)
{
if (TIM4->CNT>1000) up_to_let = TIM4->CNT;
TIM4->EGR |= TIM_EGR_UG;
TIM4->SR &= ~TIM_SR_TIF; //
}
}
int left()
{
TIM3->CCR3= 500;// 20383
TIM3->CCR4= 500; // ()
GPIOC->ODR = 24;
for (q1=0; q1<125000*10; q1++);
TIM3->CCR3= 1000;// 20383
TIM3->CCR4= 1000; // ()
GPIOC->ODR = 12;
return(0);
}
P.S. извиняюсь за иероглифы в комментариях к программе
Раздел: Песочница или Вопрос-Ответ