STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Всем привет.
Есть у меня плата 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 и Ассемблер
не зная броду не лезь к вольтмоду
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

может попробовать вначале готовые примеры, например: http://teplofizik.diary.ru/p186675068.htm?oam
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

не зная броду не лезь к вольтмоду
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Что то все-равно не могу разобраться...
Может дело в настройках Peripherals ? Может я где то галочку не поставил..
Так то в коде вроде все в порядке...
не зная броду не лезь к вольтмоду
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

А альтернативные функции кто будет настраивать???
Для TIM4 это AF2 ...
И включение таймера RCC->APB1ENR ... а не RCC->APB1RSTR ...
И пользуйтесь нормальной записью... вычислять биты по референсу никто за вас не будет...
"Я не даю готовых решений, я заставляю думать!"(С)
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Спасибо большое за хорошую подсказку.... :beer: ( ШИМ я запустил ) :music:
HHIMERA писал(а):А альтернативные функции кто будет настраивать???
настроил

Код: Выделить всё

GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_TIM4);
GPIO_PinAFConfig(GPIOD,GPIO_PinSource13,GPIO_AF_TIM4);
GPIO_PinAFConfig(GPIOD,GPIO_PinSource14,GPIO_AF_TIM4);
GPIO_PinAFConfig(GPIOD,GPIO_PinSource15,GPIO_AF_TIM4);
только это я не сам сделал - подсмотрел вот тут http://how2.org.ua/микроконтроллеры/миг ... y-arm.html
написано с помощью SPL..
Но я не мог понять какой регистр за это отвечает. ( Хочу понять как это-же самое это написать под CMSIS. )
Ага... Все нашел - это регистр AFR....

HHIMERA писал(а):И включение таймера RCC->APB1ENR ... а не RCC->APB1RSTR .
точно! Спасибо!
не зная броду не лезь к вольтмоду
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

HHIMERA писал(а): Для TIM4 это AF2 ...
а где это я должен был узнать?
как я должен был узнать что именно 2 ?
не зная броду не лезь к вольтмоду
Опытный кот
Аватара пользователя
Сообщения: 830
Зарегистрирован: Пт ноя 16, 2007 11:21:37

Сообщение Pavel_1978 »

В даташите на одной из первых страниц есть структурная схема МК вот на неи и указано какая перифирия на какой шине сидит, с какой максимальной частотой какая шина работает. А вообще даташит очень полезная штука.
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Pavel_1978 писал(а):В даташите на одной из первых страниц есть структурная схема МК вот на неи и указано какая перифирия на какой шине сидит, с какой максимальной частотой какая шина работает.
Это совсем не то ...
Искать по Alternate function mapping.
Находится в разделе Pinouts and pin description .
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Спасибо. Это та которая "Figure 5. STM32F40x block diagram" ?
я пока путаюсь, что где смотреть..
Поглядываю в основном в справочное руководство...
( я привык в AVR - там все просто )
не зная броду не лезь к вольтмоду
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

uwrtey писал(а): как я должен был узнать что именно 2 ?
В даташите есть таблица Alternate function mapping...
"Я не даю готовых решений, я заставляю думать!"(С)
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Ага, уже нашел! спасибо..
Я так понял, что мне пока что лучше лазить по всяким обучалкам в которых указан именно мой камень ?
Так как например для STM32F100RBT6B не нужно включать альтернативные функции.. ( вот http://easystm32.ru/for-beginners/35-pwm-in-stm32 )
достаточно передать управление ножками альтернативной функции и подтянуть ножки таймера к выводам порта...
Чтоб таймер мог их использовать нужно разрешить это аж в двух местах: Настроить три ноги (PA1-PA3) как выход с альтернативной функцией и разрешить в настройках таймера дергать эти ноги для генерации ШИМа.
не зная броду не лезь к вольтмоду
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Альтернативную функцию я включил так

Код: Выделить всё

GPIOD->AFR[1] |= 0b00100010001000100000000000000000;
Во первых я не ожидал что регистр AFRH надо записывать как AFR[1]
ладно я умудрился это где то подсмотреть...

Во вторых мне так и не удалось сделать эту запись читабельной...
пытался, пытался.. Но кокос меня материт и материт
Вот чтоя в него пытался засунуть ( !!! Тут расматривается только один вывод !!! )

Код: Выделить всё

GPIOD->AFR[1] |=GPIO_AFR_AFRH15_AF2
и другие подобные вариации типа:

Код: Выделить всё

GPIOD->AFR[1] |=GPIO_AFR_AFR[1]15_2
но так и не получилось...

Хотя другие записи получилось перевести в читабельный вариант без особого напряжения мозга
вот например

Код: Выделить всё

TIM4->CCER |= (TIM_CCER_CC1E|TIM_CCER_CC2E|TIM_CCER_CC3E|TIM_CCER_CC4E);
// то же самое  что запись ниже
TIM4->CCER |= 0b0001000100010001;	// включаем каналы таймера как выходы ( подключаем их к ножкам )
не зная броду не лезь к вольтмоду
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

В данном случае я бы не стал заморачиваться... не тот случай... а просто вытянул бы функцию из SPL, подчистил и пользовался...
Типа...
GPIO_PinAFConfig(GPIOD, 12, 2);
"Я не даю готовых решений, я заставляю думать!"(С)
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Я не планирую пока SPL заморачиваться... ( хотя это тоже вариант.. )
Хочу структуру этого микроконтроллера понять..
Все равно примите мою благодарность. :beer:

разрешите еще один вопрос задать:
Как мне узнать на какой частоте работает таймер, при условии, что не установлен предделитель таймера и установлен кварц на 8 МГц ?
Куда нужно смотреть ?
не зная броду не лезь к вольтмоду
Опытный кот
Аватара пользователя
Сообщения: 830
Зарегистрирован: Пт ноя 16, 2007 11:21:37

Сообщение Pavel_1978 »

установлен кварц на 8 МГц ?
А PLL как настроен?
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

:oops: кто такой этот PLL ?
я его не настраивал - видимо у меня как-то по дефолту...
не зная броду не лезь к вольтмоду
Опытный кот
Аватара пользователя
Сообщения: 830
Зарегистрирован: Пт ноя 16, 2007 11:21:37

Сообщение Pavel_1978 »

Ну как то так...
Вложения
Система тактирования STM32F100.JPG
(68.56 КБ) 435 скачиваний
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Не понял, объясните пожалуйста..
Мне не нужно знать сколько именно, мне нужно знать в какой раздел какого справочного руководства нужно глядеть..
не зная броду не лезь к вольтмоду
Опытный кот
Аватара пользователя
Сообщения: 830
Зарегистрирован: Пт ноя 16, 2007 11:21:37

Сообщение Pavel_1978 »

Раздел так и называется

на F103 это пункт 6.2
Ответить

Вернуться в «ARM»