Есть у меня плата STM32F4 Discovery.
Пишу в Кокосе.
Пробую на ней запустить ШИМ, но что то не выходит.
Сразу хочу попросить прощения за "нечитабельность" кода так-как все регистры я пока-что заполняю по-битово.
Просто мне пока так удобнее - в ходе обучения так сказать....
В дальнейшем естественно буду писать, указывая значения битов с помощью их имен, на CMSIS
Я не говорю об SPL - эта штуковина сложная для понимания структуры МК
Код: Выделить всё
// Подключаем заголовки
#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
int main(void)
{
// включаем тактирование порта
RCC->AHB1ENR |= 0b00000000000000000000000000001000; // RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
// включаеим тактирование таймера_4
RCC->APB1RSTR |= 0b00000000000000000000000000000100; // RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE)
// Настраиваем порты
GPIOD->MODER = 0b10101010000000000000000000000000; // альтернативная функция на 15,14,13,12 пинах
GPIOD->OTYPER = 0b00000000000000000000000000000000; // Двухтактный выход на 15,14,13,12 пинах
GPIOD->OSPEEDR = 0b11111111000000000000000000000000; // Скорость высокая на 15,14,13,12 пинах
GPIOD->PUPDR = 0b00000000000000000000000000000000; // Без подтяжки
// Настраиваем таймер
TIM4->CCER = 0b0001000100010001; // включаем каналы таймера как выходы ( подключаем их к ножкам )
// тут надо повнимательнее изучить этот регистр CCER
TIM4->CCMR1 = 0b0110000001100000; // прямой шим на 1 и 2 канале таймера
TIM4->CCMR2 = 0b0110000001100000; // прямой шим на 3 и 4 канале таймера
TIM4->PSC = 0b0101110110111111; // предделитель частоты таймера 24000-1
TIM4->CR1 = 0b0000000000000001; // пуск таймера ( таймер начал считать )
TIM4->CNT = 0b0000000000000000; // регистр сравнения таймера... -> обнуляем таймер
//TIM4->ARR = 0b1111111111111111; // число до которого тикает таймер ( частота ШИМа )
TIM4->CCR1 = 0b0001111111111111; // первый канал ШИМа - длина импульса
TIM4->CCR2 = 0b0011111111111111; // второй канал ШИМа - длина импульса
TIM4->CCR3 = 0b0111111111111111; // третий канал ШИМа - длина импульса
TIM4->CCR4 = 0b1111111111111111; // четвертый канал ШИМа - длина импульса
}Но добиться их включения я так и не смог...
Что я делаю не так? Или чего я не делаю в обще? Ткните меня мордой пжлст..
Из опыта у меня только AVR и Ассемблер


