История изменений
Исправление
Eddy_Em,
(текущая версия)
:
SysTick не умеет генерить ШИМ. А ему нужен ШИМ, чтобы полностью аппаратно мигать светодиодом. Еще можно через DMA менять частоту — тогда будет прикольная псевдорандомная мигалка.
Что-то вроде такого:
static inline void tim1_setup(){
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; // enable TIM1 clocking
TIM1->PSC = 8; // 8MHz
TIM1->ARR = 99; // 100 ticks for 80kHz
TIM1->CCR1 = 49; // 50%
// PWM mode 1 (active->inactive)
TIM1->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1PE;
// main output
TIM1->BDTR = TIM_BDTR_MOE;
// main PWM output
TIM1->CCER = TIM_CCER_CC1E;
// turn it on
TIM1->CR1 = TIM_CR1_CEN;
TIM1->EGR |= TIM_EGR_UG; // generate update event to refresh all
}
Естественно, здесь нет ничего сложного, так что в асм перевести - дело плевое.
Исправление
Eddy_Em,
:
SysTick не умеет генерить ШИМ. А ему нужен ШИМ, чтобы полностью аппаратно мигать светодиодом. Еще можно через DMA менять частоту — тогда будет прикольная псевдорандомная мигалка.
Что-то вроде такого:
static inline void tim1_setup(){
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; // enable TIM1 clocking
TIM1->PSC = 8; // 8MHz
TIM1->ARR = 99; // 100 ticks for 80kHz
TIM1->CCR1 = 49; // 50%
// PWM mode 1 (active->inactive)
TIM1->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1PE;
// main output
TIM1->BDTR = TIM_BDTR_MOE;
// main PWM output
TIM1->CCER = TIM_CCER_CC1E;
// turn it on
TIM1->CR1 = TIM_CR1_CEN;
TIM1->EGR |= TIM_EGR_UG; // generate update event to refresh all
}
Исходная версия
Eddy_Em,
:
SysTick не умеет генерить ШИМ. А ему нужен ШИМ, чтобы полностью аппаратно мигать светодиодом. Еще можно через DMA менять частоту — тогда будет прикольная псевдорандомная мигалка.