Pingvin писал(а):
И что у нас с системой тактирования?
Как настраивается?
Здесь не так как у atmega
. По умолчанию практически все тактирование отключено и надо каждый раз ручками подключать тактирование портов и другой периферии. В принципе, если мигать научились
, то с этим Вы уже разобрались. Внутренний тактовый генератор на 8МГц настраивается не сложно:
Код:
RCC->CR|=RCC_CR_HSION; // Включить генератор HSI.
while(!(RCC->CR & RCC_CR_HSIRDY))
{} // Ожидание готовности HSI.
RCC->CFGR &=~RCC_CFGR_SW; // Очистить биты SW0, SW1.
RCC->CFGR |= RCC_CFGR_SW_HSI; // Выбрать HSI для тактирования SW0=1
Если ли же настроить от кварца, то в примере, что выше все HSI поменяйте на HSE
. Но это примитивная настройка...там необходимо включить службу для определения отказа кварца и переключится на внутренний источник тактирования...на эту тему надо курить даташит, при этом там столько настроек, что укуришься быстро
А вот так настраивается ШИМ:
Код:
void initPWM()
{
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // подключение тактирования таймера 2
TIM2->ARR = 800;
TIM2->CCR1 = 1000;
TIM2->CCMR1 |= TIM_CCMR1_OC1PE; // включение регистра предзагрузки сравнения для канала 1
TIM2->CCMR1 |= TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1; // режим ШИМ №1(110)
TIM2->CR1 |= TIM_CR1_ARPE; // включение регистра предзагрузки автоперезагрузки
TIM2->CCER |= TIM_CCER_CC1E; // включение выхода захвата/сравнения канала 1
TIM2->CR1 |= TIM_CR1_CEN; // включение счетчика
TIM2->EGR |= TIM_EGR_UG;
}