Уважаемые спецы!
Разбираюсь с периферией
STM8L152C6 в составе STM8L-DISCOVERY.
Не работает ШИМ на первом и втором таймерах, на третьем таймере ШИМ идёт только со второго канала. Привёл настройки первого таймера, портов. Настройки второго и третьего таймера аналогичны, второй таймер дёргает прерывание, прерывание есть. На третьем таймере два канала настроены одинаково, но ШИМ идёт только со второго канала с вывода PD0.
Функция настройки первого таймера
void timinit ()
{
//Таймер1 - центрированная ШИМ
TIM1_CR1 = 0xA0; //счёт с автореверсом, таймер выключен
TIM1_CR2 = 0x00; //не используется
TIM1_SMCR = 0x00; //не используется
TIM1_ETR = 0x00; //не используется
TIM1_IER = 0x00; //прерывания не используются
TIM1_SR1 = 0x00; //очистка регистр статуса 1
TIM1_SR2 = 0x00; //очистка регистра статуса 2
TIM1_EGR = 0x00; //очистка регистра генерации прерываний
TIM1_CCMR1 = 0x68; //режим работы ШИМ1
TIM1_CCMR2 = 0x68; //режим работы ШИМ2
TIM1_CCMR3 = 0x68; //режим работы ШИМ3
//TIM1_CCMR4 = 0x68; //режим работы ШИМ4
TIM1_CCER1 = 0x55; //разрешаем выходы ШИМ1 и ШИМ2
TIM1_CCER2 = 0x05; //разрешаем выходы ШИМ3 и ШИМ4
TIM1_PSCRH = 0x00; //предделитель не используется
TIM1_PSCRL = 0x00; //предделитель не используется
TIM1_CCR1L = 0x00; //ШИМ1=0
TIM1_CCR1H = 0x00; //ШИМ1=0
TIM1_CCR2L = 0x00; //ШИМ2=0
TIM1_CCR2H = 0x00; //ШИМ2=0
TIM1_CCR3L = 0x00; //ШИМ3=0
TIM1_CCR3H = 0x00; //ШИМ3=0
//TIM1_CCR4L = 0x00; //ШИМ4=0
//TIM1_CCR4H = 0x00; //ШИМ4=0
TIM1_CNTRH = 0x00; //очистка счётчика
TIM1_CNTRL = 0x00; //очистка счётчика
TIM1_ARRH = 0x09; //
TIM1_ARRL = 0xC4; //коэффициент деления 2501!!!
TIM1_RCR = 0x00; //не используется
TIM1_BKR = 0x80; //разрешение главного выхода!!!
TIM1_DTR = 0x27; //защитная пауза 2 мкс
}
Настройки порта:
void portinit ()
{
//Порт D. выходы PD0 - PD5
PD_DDR = 0xBF; //выходы PD0 - PD5, PD7
PD_CR1 = 0xFF; //подтяжка PD6 к +5В
PD_CR2 = 0xBF; //нет прерываний, высокая скорость выходов
PD_ODR = 0x00; //очистка регистра выхода
}
Старт:
void start ()
{
TIM1_CR1 |= 0x01; //включаем таймер 1
TIM1_CCR1H = 0x05; //тест
TIM1_CCR2H = 0x05; //тест
TIM1_CCR3H = 0x05; //тест
}
Процедура инициализации писалась по референс-мануалу RM0031 и книге Матюшова.