ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
3 июля
556307
Apтём (29.10.2014 17:03, просмотров: 2069)
Не могу понять что не так делаю...Задача такая: МК - STM32F2xx или STM32F4xx. МК периодически посылает по SPI 16 слов по 16 бит (обновление данных MBI5042). Клок SPI заведён на вход таймера (ETR2), по спаду на CLK таймер инкрементируется и при совпадении с TIM1->CCR1 должен выдать одиночный импульс. Но не выдаёт. Инициализация таймера: typedef Pin<'E', 7> LCLK_IN; typedef Pin<'E', 9, 'H', PIN_SPEED_100MHZ> LE; INLINE static void InitTimer1() { TIM1->SMCR=0 | TIM_SMCR_ECE | TIM_SMCR_ETP ; TIM1->CCER=0 | TIM_CCER_CC1E ; TIM1->ARR=0x0F; TIM1->DIER=0 | TIM_DIER_CC1IE | TIM_DIER_UIE ; TIM1->CCMR1=0 | TIM_CCMR1_OC1M_0 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 ; LE::Mode(ALT_OUTPUT); LE::Alternate(ALT_FUNC_TIM1); LCLK_IN::Mode(ALT_INPUT); LCLK_IN::Alternate(ALT_FUNC_TIM1); NVIC_EnableIRQ(TIM1_CC_IRQn); NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn); } Запуск таймера: INLINE static void StartTimer1(uint16_t compare_value) { TIM1->SR=0; TIM1->CCR1=compare_value; TIM1->CR1=0 | TIM_CR1_OPM | TIM_CR1_CEN ; } volatile unsigned char SpiWordCounter; volatile unsigned short SpiWord=20000; int main() { RCC->APB2ENR|=0 | RCC_APB2ENR_TIM1EN | RCC_APB2ENR_SPI1EN ; __DSB(); InitTimer1(); SysTick_Config(168000-1); InitSpi1(); while (1) { if (TickFlag) { TickFlag=false; SpiWordCounter=0; StartTimer1(2); SPI1->DR=0x1FF; } } } // обработчик переполнения таймера extern "C" void TIM1_UP_TIM10_IRQHandler() { TIM1->SR=0; if (++SpiWordCounter==3) TIM1->CCR1=8; if (SpiWordCounter<4) { TIM1->CR1|=TIM_CR1_CEN; SPI1->DR=0x3001; } __DSB(); } Что я не учитываю?