Четверг, 05.12.2024, 01:44
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Главная | ARM STM32 F4 с чего начать? - Страница 4 - Форум | Мой профиль | Регистрация | Выход | Вход
Обитель RC-инженера
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: ВитГо  
ARM STM32 F4 с чего начать?
ВитГоДата: Понедельник, 10.03.2014, 07:29 | Сообщение # 46
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
по крайней мере я так делаю.
сначала открываешь описание функции, потом смотришь описание параметров...

получается что многие вещи можно делать не особо поглядывая в описание битовых инструкций и регистров.. все делается практически по наитию.. единственно что нужно знать так это порядок инициализации и необходимые настройки (но это в любом случае нужно знать)


Виталий (аka ВитГо)
 
uwrteyДата: Понедельник, 10.03.2014, 07:43 | Сообщение # 47
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Репутация: 11
Статус: Offline
Угу, у меня сложность еще и в том, что СИ не знаю...
Сейчас постараюсь уделить больше времени СИ...

По поводу настройки периферии:
Ты пользуешься файлом stm32f4xx_dsp_stdperiph_lib_um.chm ???
Или Ты сразу лезешь в библиотеку и ищешь нужный файл с расширением .h ?


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Понедельник, 10.03.2014, 07:45
 
ВитГоДата: Понедельник, 10.03.2014, 12:52 | Сообщение # 48
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
сразу смотри файлы периферии
stm32f4xx_gpio.h и так далее..
а когда интересно станет что делает та или иная функция то stm32f4xx_gpio.c

ну си потихоньку осваивай, там больше всего мороки с форматом передачи данных.. всякие указатели, структуры и прочее - меня это всегда бьет по полной :-)


Виталий (аka ВитГо)
 
uwrteyДата: Среда, 12.03.2014, 15:47 | Сообщение # 49
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Репутация: 11
Статус: Offline
Сегодня разобрался с CMSIS.
вот пример которым я включил светодиоды:

Код

#include "stm32f4xx_rcc.h"
#include "stm32f4xx_gpio.h"

int main(void)
{

// включаем тактирование порта D

RCC->AHB1ENR |= 0b00000000000000000000000000001000;    //RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);

// Настраиваем порты

GPIOD->MODER = 0b01010101000000000000000000000000;  // направление - выход на 15,14,13,12 пинах
GPIOD->OTYPER = 0b0000000000000000;  // Двухтактный выход на 15,14,13,12 пинах
GPIOD->OSPEEDR = 0b11111111000000000000000000000000;  // Скорость самая высокая на 15,14,13,12 пинах
GPIOD->PUPDR = 0b00000000000000000000000000000000;  // Без подтяжки

GPIOD->ODR=0b1111000000000000; // выводим на светодиоды

}


Понял в чем была проблема раньше: Примеры, которые разбирали авторы, относятся к STM32F1xx.
Написание CMSIS STM32F1xx и STM32F4xx несовместимо.


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Среда, 12.03.2014, 19:07
 
uwrteyДата: Среда, 12.03.2014, 19:41 | Сообщение # 50
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Репутация: 11
Статус: Offline

Внимание вопрос:
Как я должен узнать какой регистр за что отвечает?
В справочном руководстве что-то не шибко расписано.


Например мне нужно включить тактирование порта D.
Включается оно через регистр AHB1ENR.
Открываем справочное руководство на странице 178. // 6.3.10 RCC AHB1 peripheral clock register (RCC_AHB1ENR)
( и еще эта же информация есть на странице 238. // 7.3.10 RCC AHB1 peripheral clock enable register (RCC_AHB1ENR) - в чем разница - не понял )
Тут мы видим таблицу.
вот примечание к ней -
Цитата

Bit 3 GPIODEN: IO port D clock enable
This bit is set and cleared by software.
0: IO port D clock disabled
1: IO port D clock enabled

И все - больше ни слова! Хочется побольше про все это узнать.... ( например, как я должен был узнать, что тактирование в обще нужно включать? )

И второй вопрос - кто ни-будь встречал переведенное на Руский язык справочное руководство - RM0090 Reference manual ???
(STM32F405xx/07xx, STM32F415xx/17xx, STM32F42xxx and STM32F43xxx advanced ARM-based 32-bit MCUs)

PS на радиокоте подсказали полезную подсказку по языку СИ


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Пятница, 14.03.2014, 00:19
 
uwrteyДата: Воскресенье, 04.05.2014, 23:18 | Сообщение # 51
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Репутация: 11
Статус: Offline
Виталий, подопни меня пожалуйста в направлении изучения STM..
А то что-то я все ни как не возьмусь..
Дай мне пожалуйста какое ни-будь задание, а я попробую его реализовать..
учебник я читаю, но без практического применения ни-фига не запоминаю...
так хоть будет над чем тупить.... wink


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Воскресенье, 04.05.2014, 23:18
 
uwrteyДата: Вторник, 06.05.2014, 18:44 | Сообщение # 52
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Репутация: 11
Статус: Offline
SPL это ад какой-то, в котором я горю..
Вот, кое-что нарыл Работа с STM32F10x Standard Peripherals Library http://easyelectronics.ru/rabota-....ry.html

Мне кажется что рано мне заниматься SPL .... Может стоит все понять на более низком уровне ( нет, нет я не про асму... biggrin - это будет через чур низко )


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Вторник, 06.05.2014, 18:52
 
ВитГоДата: Вторник, 06.05.2014, 19:11 | Сообщение # 53
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
просто ты еще не понял как это использовать !!

на самом деле все достаточно просто (конечно при наличии хотя бы примерного примера :-)))

но чаще всего нужно смотреть .h файл в котором описаны все типы и вызовы...
начать с простого - с той же настройки портов ввода/вывода...


Виталий (аka ВитГо)
 
uwrteyДата: Вторник, 06.05.2014, 21:49 | Сообщение # 54
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Репутация: 11
Статус: Offline
согласен, что код получается читабельнее
вот пример, который просто включает светодиоды на отладочной плате
SPL
Код

// Подключаем заголовки
#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"

// Функция программной задержки
void Soft_Delay(volatile uint32_t number)
{
            while(number--);
}

int main(void)
{
            // Следующая строка для нас пока что магическая
            RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);

            // Настраиваем порты
            GPIO_InitTypeDef  ledinit;  // создаем структуру

            ledinit.GPIO_Mode = GPIO_Mode_OUT;  // направление - выход
            ledinit.GPIO_OType = GPIO_OType_PP;  // Двухтактный выход
            ledinit.GPIO_PuPd = GPIO_PuPd_NOPULL;  // Без подтяжки
            ledinit.GPIO_Speed = GPIO_Speed_2MHz;  // Скорость низкая
            ledinit.GPIO_Pin = (GPIO_Pin_13 | GPIO_Pin_12 | GPIO_Pin_14 | GPIO_Pin_15); // Светодиод LD3 на 12, 13, 14 и 15-ом выводе

            GPIO_Init(GPIOD, &ledinit);  // Функция, выполняющая настройку портов

            // Бесконечный цикл
        while(1)
        {
         // Включаем светодиоды
         GPIO_SetBits(GPIOD, GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);
        }
}


CMSIS
Код

#include "stm32f4xx_rcc.h"
#include "stm32f4xx_gpio.h"

int main(void)
{

// включаем тактирование порта

RCC->AHB1ENR |= 0b00000000000000000000000000001000; //RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);

// Настраиваем порты

GPIOD->MODER = 0b01010101000000000000000000000000; // направление - выход на 15,14,13,12 пинах
GPIOD->OTYPER = 0b0000000000000000; // Двухтактный выход на 15,14,13,12 пинах
GPIOD->OSPEEDR = 0b11111111000000000000000000000000; // Скорость высокая на 15,14,13,12 пинах
GPIOD->PUPDR = 0b00000000000000000000000000000000; // Без подтяжки

GPIOD->ODR=0b1111000000000000; // включаем светодиоды

}


Но в это-же время код SPL получается намного больше...

И мне не понятно написание кода для SPL
Язык вроде тот-же, а понять че к чему я не могу...


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Вторник, 06.05.2014, 22:12
 
SergiДата: Вторник, 06.05.2014, 22:07 | Сообщение # 55
Подполковник
Группа: Проверенные
Сообщений: 540
Репутация: 55
Статус: Offline
Возможно код больше от того что в С нет встроенного типа 0bxxxx.
В CMSIS есть более читабельные формы как например
GPIOA->CRL &=~GPIO_CRL_MODE0;
GPIOA->CRL &=~GPIO_CRL_CNF0;
что соответствуют даташиту и программануалу.
А многие параметры стоят по умолчанию и код серьезно сокращается, но я стараюсь в инициализации прописать все регистры.


Сообщение отредактировал Sergi - Вторник, 06.05.2014, 22:07
 
SergiДата: Вторник, 06.05.2014, 22:17 | Сообщение # 56
Подполковник
Группа: Проверенные
Сообщений: 540
Репутация: 55
Статус: Offline
Я сейчас делаю 3х канальный лабораторный блок питания с управлением на STM. Так там в основном ногодрыг без особых вычислений. Еще одна тренеровка создания проекта biggrin .

Сообщение отредактировал Sergi - Вторник, 06.05.2014, 22:19
 
uwrteyДата: Вторник, 06.05.2014, 22:27 | Сообщение # 57
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Репутация: 11
Статус: Offline
А еще меня убивают составные операции
например |=
во первых эта операция выполняется справа налево facepalm
Во вторых бывают составные операции, которые выполняются слева направо ( например != или <= ) и нужно запомнить ( выучить ) что и как выполняется

---------------------------------------------
Цитата Sergi ()
Я сейчас делаю 3х канальный лабораторный блок питания с управлением на STM. Так там в основном ногодрыг без особых вычислений. Еще одна тренеровка создания проекта biggrin .

если проект открытый, то предлагаю создать тут соответствующую тему.


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Вторник, 06.05.2014, 22:27
 
SergiДата: Вторник, 06.05.2014, 22:32 | Сообщение # 58
Подполковник
Группа: Проверенные
Сообщений: 540
Репутация: 55
Статус: Offline
Может попозже. Сейчас только силовая часть работает, как обычный блок питания. За управление только взялся, делаю плату.
 
uwrteyДата: Среда, 14.05.2014, 19:07 | Сообщение # 59
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Репутация: 11
Статус: Offline
Собрался изучать таймеры.
Почитал статьи http://easystm32.ru/for-beginners/27-basic-timers и http://easystm32.ru/for-beginners/35-pwm-in-stm32
Вроде все понятно. На практике же оказалось, что ничего не понятно. Я не смог перевести полученные знания для своего МК.
Пошел гуглить дальше:
0) простые таймеры http://how2.org.ua/микроко....ry.html


1) ШИМ http://how2.org.ua/микроко....rm.html

2) http://www.st.com/st-web-....534.pdf

Добавлено (14.05.2014, 19:07)
---------------------------------------------
пытаюсь запустить ШИМ, но что то не очень пока выходит
Код


// Подключаем заголовки

#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;    // четвертый канал ШИМа - длина импульса

}



попробую еще тут подсмотреть... http://teplofizik.diary.ru/p186675068.htm?oam


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Среда, 14.05.2014, 19:06
 
SergiДата: Среда, 14.05.2014, 20:41 | Сообщение # 60
Подполковник
Группа: Проверенные
Сообщений: 540
Репутация: 55
Статус: Offline
Там где-то есть критический порядок инициализации, что за чем писать. Обычно таймер включают (EN) в самом конце, а ширину шим можно менять на ходу отдельно.
 
Поиск:


Copyright MyCorp © 2024
Сделать бесплатный сайт с uCoz