michas (10.04.2018 15:28 - 15:37, просмотров: 2315)
STM32F030 тактируется напрямую от HSE, т.е. тактовая 8М.
Есть полусофтварная задержка, которая дергает ножкой, формируя импульс.
__INLINE void delay_us(uint16_t delay)
{
TIM3->PSC = (F_CPU/1000000)-1; //устанавливаем предделитель
TIM3->ARR = delay; //загрузить значение задержки
TIM3->CNT = 0;
TIM3->SR &= ~TIM_SR_UIF;
TIM3->CR1 = TIM_CR1_CEN; //запустить таймер
while((TIM3->SR & TIM_SR_UIF)==0); //дождаться конца задержки
TIM3->SR &= ~TIM_SR_UIF; //сбросить флаг
}
Проблема - более 100us задержка формируется достаточно точно, меньше начинает нарастать задержка, которая при 10us практически удваивается.
Ассемблерный код вменяемый вроде. Кейл-лайт, оптимизация L2.
В чем может быть причина, DMA есть, отключал не помогло.
UPD. Поставил задержку в микросекунду, факт. строб в 8.2us