Разобрался .
TIM9 тактируется от LSE 32КГц , выдаёт событие TRGO и PWM на TIM9_CH1 с частотой 16КГц.
К выходу TIM9_CH1 подключен TIM4 , который создаёт запросы DMA с частотой 16КГц.
Кому надо вот код.
CODE
///////////////////////////Настраиваем и запускаем TIM9 на генерацию события TRGO и такой же частоты на выходе TIM9_CH1 ////////////////
void TIM9_START(void)
{
RCC->APB2ENR|=RCC_APB2ENR_TIM9EN; //включили тактирование TIM9
RCC->APB2LPENR|=RCC_APB2LPENR_TIM9LPEN;
RCC->APB2RSTR|=RCC_APB2RSTR_TIM9RST; //сброс настроек TIM9
RCC->APB2RSTR&=~RCC_APB2RSTR_TIM9RST;
TIM9->CR1|=TIM_CR1_URS; //только переполнение генерирует прерывание
TIM9->CR2|=TIM_CR2_MMS_1;//выбрали событие Update в качестве триггера TRGO
TIM9->SMCR|=TIM_SMCR_TS_0; // выбрали TI1 , к которому подключен LSE
TIM9->SMCR|=TIM_SMCR_ECE; //разрешили внешнее тактирование
TIM9->OR|=TIM_OR_TI1RMP_0; //выбрали LSE
TIM9->CCMR1|=TIM_CCMR1_OC1M_0|TIM_CCMR1_OC1M_1|TIM_CCMR1_OC1M_2; //PWM на TIM9_CH1
TIM9->ARR=1; // 16КГц //до этого значения производится счёт
TIM9->CCR1=1; //для PWM на TIM9_CH1
}
TIM9->CR1|=TIM_CR1_CEN; //включили таймер
}
/////////////////////////////////настраиваем и запускаем TIM4 для генерации запроса ДМА TIM4_CH2 ////////////////////////////////////////////
void TIM4_START(void)
{
RCC->APB1ENR|=RCC_APB1ENR_TIM4EN;
RCC->APB1LPENR|=RCC_APB1LPENR_TIM4LPEN; //включили тактирование TIM4
RCC->APB1RSTR|=RCC_APB1RSTR_TIM4RST;
RCC->APB1RSTR&=~RCC_APB1RSTR_TIM4RST; //сбросили настройки TIM4
TIM4->SMCR|=TIM_SMCR_TS_0;
TIM4->SMCR|=TIM_SMCR_TS_1; //выбор TIM9
TIM4->SMCR|=TIM_SMCR_SMS_2; //каждый клок триггера сбрасывает таймер
TIM4->CR2|=TIM_CR2_CCDS;//запрос ДМА при переполнении
TIM4->SMCR|=TIM_SMCR_ECE; //External clock mode 2 enabled. The counter is clocked by any active edge on the ETRF signal.
TIM4->DIER|=TIM_DIER_CC2DE; //разрешаем запрос DMA по СС2
TIM4->CR1|=TIM_CR1_CEN;// включили таймер
}
Сообщение отредактировал IgorKossak - Jun 28 2012, 19:13
Причина редактирования: [codebox] для длинного кода!!!