Изучение уязвимостей электронных систем.
 
key programming immo tools emergency start device программаторы ключа заводилки Кодграббер штатных охранных систем, toyota, lexus, subaru.

Вернуться   Изучение уязвимостей электронных систем > Программирование микроконтроллеров > ARM

Ответ
 
Опции темы
Старый 19.01.2015, 19:48   #1
AliStark
Модератор
 
Аватар для AliStark
 
Регистрация: 16.08.2014
Адрес: Красное море
Сообщений: 255
Поблагодарил: 23
Поблагодарили 139 раз в 93 сообщениях
AliStark имеет захватывающую ауруAliStark имеет захватывающую ауруAliStark имеет захватывающую ауру
Хорошо Инициализация GPIO в STM32F4xx авто подстановщиком значений MDK-Keil СКРИНШОТЫ !

Хочу показать как наиболее удобно писать код инициализации в Keil MDK ARM
как быстро шарить по библиотечным ф-циям и быстро находить
НУЖНЫЕ и ПОДХОДЯЩИЕ значения.

Ну и в конце рабочий и наглядный пример мыргалки
специально на циклах for

К примеру - вздумали мы инициализировать порты, на
которых у нас висит просто светодиод.
ну и соотв. как то к нему обратиться и застить мЫргнуть
-------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------
Ну и вот что получилось

#include "stm32f4xx.h"

int main(void)
{
uint32_t i; //Временная переменная i, нужна только для циклов for
GPIO_InitTypeDef LED_INIT; //ПРИДУМЫВАЕМ структуру подходящего типа.
//т.к. у нас просто порт ввод вывода ака GPIO INIT то и тип будет GPIO_InitTypeDef
//ОТКУДА ВЗЯТ ? - ОТСЮДА stm32f4xx_gpio.c


RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); //RCC on PORT D now ON !

LED_INIT.GPIO_Pin = GPIO_Pin_15 | GPIO_Pin_14 | GPIO_Pin_13 | GPIO_Pin_12 ; // lock PIN NAME in stm32f4xx_gpio.H
LED_INIT.GPIO_Mode = GPIO_Mode_OUT; //
LED_INIT.GPIO_OType = GPIO_OType_PP; //
LED_INIT.GPIO_Speed = GPIO_Speed_2MHz; //
LED_INIT.GPIO_PuPd = GPIO_PuPd_NOPULL; //
//Последние 4 значения брать либо в той же stm32f4xx_gpio.c, по фото мануалы выше
//либо из PDFки по старинке


GPIO_Init(GPIOD, & LED_INIT);
//Вбиваем ПРИДУМАННУЮ нами структуру инициализации
//в ГОТОВУ ф-цию GPIO_Init, взятую отпять же из stm32f4xx_gpio.c



//Далее простейший код для мырганья тем, что инициализировали
while(1)
{
GPIO_SetBits(GPIOD, GPIO_Pin_15 | GPIO_Pin_14 | GPIO_Pin_13 | GPIO_Pin_12);
for (i=0;i<2000000;i++){} //тупим где то секунду
GPIO_ResetBits(GPIOD, GPIO_Pin_15 | GPIO_Pin_14 | GPIO_Pin_13 | GPIO_Pin_12);
for (i=0;i<2000000;i++){}//тупим где то секунду
}

//ф-ция GPIO_SetBits - примерно то же, что скажем и PORTA.0 в AVR / PIC
//Просто выдает в НУЖНЫЙ ПОРТ (у нас он PORTD) и на НУЖНЫЕ НОГИ ПОРТА,
//можно перечислять в строчку как в примере. У нас ноги с 12ой по 15ой


} //ВСЕ

================================================== =====
Позже выложу примеры с подробнейшими коментами
по более сложной инициализации периферии в stm32f4
на пример КНОПКА + СВЕТОДИОДЫ + USART
Что бы можно было наглядно увидеть что общего и в чем разница, и особенности
инициализации разной периферии stm32f4xx

Спасибо
Миниатюры
1.jpg   2.jpg   3.jpg   4.jpg  


Если вас провцируют на НЕ содержательный разговор, сообщениями
НЕ несущими смысловой нагрузки, КОРМЯ провокационной

- НЕ ОТВЕЧАЙТЕ !, пишите нам !
тыкнуть "БАН" проще чем чистить грязь !


Хочется срача ? / Инет принимаете за реальную жизнь ?
- соц сети ваш выбор !
AliStark вне форума   Ответить с цитированием
Старый 21.01.2015, 08:01   #2
AliStark
Модератор
 
Аватар для AliStark
 
Регистрация: 16.08.2014
Адрес: Красное море
Сообщений: 255
Поблагодарил: 23
Поблагодарили 139 раз в 93 сообщениях
AliStark имеет захватывающую ауруAliStark имеет захватывающую ауруAliStark имеет захватывающую ауру
По умолчанию

Как и обещал
разобранный пример посложнее,
но более чем наглядно показывает что инициализация
ЛЮБОЙ ПЕРИФЕРИИ, будь то просто ноги на вход и выход,
будь то альтернативные ф-ции LCD SPI I2C, CAMERA, USB и.т.д

Выполняется не на много сложнее и АБСОЛЮТНО однотипно
как и простейшая "ногдрыг"

Разберем КНОПКУ + СВЕТОДИОДЫ + USART,
с точки зреня кодинга - порты на вход/выход и альтернативная ф-ция GPIO

Чтоб глаза не мозолил и не отвлекал взгляд, сначала
MAIN.C // то где сама прога, предполагаться что вы чуть чуть программисты Си
//на PIC/AVR

//================================================== =======
iint main(void)
{
uint32_t i=0; //для цикла for, который для наглядности

My_PERIPHERALS_INIT(); //вызываем процедуру инициализации периферии, см далее

while(1) //вечный цикл
{
GPIO_SetBits(GPIOD, GPIO_Pin_15); //светим красным, чтоб видно было что //прога зашилась и пашет

if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)== 1) //Если жмем на кнопку то >>
{
USART_SendData(USART2, i++); //Посылаем счетчик в USART //компутер, при этом в терминале будет явно виден счетчик
for (i=0;i<2000000;i++){}
GPIO_SetBits(GPIOD, GPIO_Pin_14 | GPIO_Pin_13 | GPIO_Pin_12);
//Зажигаем зел, син, желтый LED

for (i=0;i<2000000;i++){} //пауза
GPIO_ResetBits(GPIOD, GPIO_Pin_15 | GPIO_Pin_14 | GPIO_Pin_13 | GPIO_Pin_12); //гасим зел, син, желтый LED
for (i=0;i<2000000;i++){}//пауза
}
GPIO_ResetBits(GPIOD, GPIO_Pin_15); //красную на ноль
}
}

//================================================== ======
С самой прогой разобрались, теперь САМОЕ ИНТЕРЕСНО И ВАЖНОЕ - ИНИЦИАЛИЗАЦИЯ

ВСЕ ПЕРЕМЕННЫЕ С СИМВОЛОМ ПОДЧЕРКИВАНИЯ _ИМЯ ВЗЯТЫ С ПОТОЛКА.
- ДЛЯ УДОБСТВА ПОНИМАНИЯ и что бы не путаться, где "заводские" ф-ции и типы,
а где ТЕ, ЧТО -=НУЖНО=- ВЫДУМАТЬ

//================================================== ======

void My_PERIPHERALS_INIT(void)
{
// ТУТ МЫ ОПИСЫВАЕМ СТРУКТУРЫ НАШИХ "ПАЧЕК НОГ/ПОРТОВ", С КОТОРЫМИ БУДЕМ РАБОТАТЬ =============================================
GPIO_InitTypeDef _LED_INIT; // Make MY VARiable whith TYPE of GPIO_InitTypeDef (lock in stm32f4xx_gpio.c) !!!
GPIO_InitTypeDef _BTN_INIT; // Создаем переменную _BTN_INIT, типа GPIO_InitTypeDef

GPIO_InitTypeDef _GPIO_AF_USART_INIT; //Обзываем структуру для инициализации НОГ, НА КОТОРЫХ ВИСИТ USART #2
USART_InitTypeDef _MY_USART_INIT; //Обзываем структуру для инициализации САМОГО USART

// ТУТ МЫ ВРУБАЕМ ТАКИРОВНИЕ (RCC) ТЕХ ШИН, НА КОТОРЫХ ВИСЯТ, ПОРТЫ С КОТОРЫМИ БУДЕМ РАБОТАТЬ =================================
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); //RCC on PORT D now ON !
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //RCC on PORT A now ON !
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //Врубили тактирование и для USART2

// Заполняем структуру по 4ем светодиодам которую мы обозвали выше как _LED_INIT ==============================================
_LED_INIT.GPIO_Pin = GPIO_Pin_15 | GPIO_Pin_14 | GPIO_Pin_13 | GPIO_Pin_12 ; // lock PIN NAME in stm32f4xx_gpio.H
_LED_INIT.GPIO_Mode = GPIO_Mode_OUT; // Из
_LED_INIT.GPIO_OType = GPIO_OType_PP; //это все по PDFке
_LED_INIT.GPIO_Speed = GPIO_Speed_2MHz; // и это
_LED_INIT.GPIO_PuPd = GPIO_PuPd_NOPULL; //и это

// Заполняем структуру по 1 кнопке, которую мы обозвали выше как _BTN_INIT ================================================== ==
_BTN_INIT.GPIO_Pin = GPIO_Pin_0; //В этой инит. струткуре у нас только 1 нога
_BTN_INIT.GPIO_Mode = GPIO_Mode_IN; //т.к. кнопка - соотв на вход
_BTN_INIT.GPIO_Speed = GPIO_Speed_2MHz; // Для кнопки сойдет любая скорость
_BTN_INIT.GPIO_PuPd = GPIO_PuPd_NOPULL; //
//_LED_INIT.GPIO_OType = GPIO_OType_PP; //her need it ??? this OUTPUT REGISTER !?


// Заполняем структуру по 2 ногам, на котоорых у нас USART2 ================================================== =================
_GPIO_AF_USART_INIT.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
_GPIO_AF_USART_INIT.GPIO_Mode = GPIO_Mode_AF;
_GPIO_AF_USART_INIT.GPIO_OType = GPIO_OType_PP;
_GPIO_AF_USART_INIT.GPIO_PuPd = GPIO_PuPd_UP;

// Заполняем структуру по USART ================================================== =============================================
_MY_USART_INIT.USART_BaudRate = 9600;
_MY_USART_INIT.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
_MY_USART_INIT.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
_MY_USART_INIT.USART_Parity = USART_Parity_No;
_MY_USART_INIT.USART_StopBits = USART_StopBits_1;
_MY_USART_INIT.USART_WordLength = USART_WordLength_8b;

//Врубаем нужную нам переферию стандартными ф-циями, с указаним соответствующих портов и забитых выше структур "пачек"------
GPIO_Init(GPIOD, & _LED_INIT); //Инициализация LEDов
GPIO_Init(GPIOA, & _BTN_INIT); //Инициализация кнопки

//Врубаем AF порта А, т.е. на которм висит испоьзуемый USART2
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2 | GPIO_PinSource2, GPIO_AF_USART2);
GPIO_Init(GPIOA, & _GPIO_AF_USART_INIT); //Инициализация GPIO AF USART2

//Используем библиотечные ф-ции инициализации и запуска USART, см. в stm32f4xx_usart.c
USART_Init(USART2, & _MY_USART_INIT); //Инициализация USART2
USART_Cmd(USART2, ENABLE); //Запуск USART2
//----------------------------------------------------------------------------------------------------------------------
}

================================================
Ну как можете сравнить с примером в пером сообщении топика
иниц. сложной периферии отличается лишь тем

что при работе с USART
мы забиваем ДВЕ ВЫДУМАННУЮ структуру инициализации для USART
1.сначала кон фигурируем САМ GPIO, на ногах которой висит USART
GPIO_InitTypeDef _GPIO_AF_USART_INIT;

2.А потом уже сам режим работы назначенной нами спец ф-цией этого GPIO,
в данном случае USART
USART_InitTypeDef _MY_USART_INIT;

==================================================
Прога моя, проверенная, абс рабочая !
Зашиваешь - светиться красный, жмешь на кнопку user
- моргают остальные и ПРИ ЭТОМ В USART (ком порт компа) шурует счетчик

Пока так, завтра постораюсь раскрасить и выдилить разноцветными блоками
на 3 части порт на вход / на выход и AF (у нас USART №2)


Если вас провцируют на НЕ содержательный разговор, сообщениями
НЕ несущими смысловой нагрузки, КОРМЯ провокационной

- НЕ ОТВЕЧАЙТЕ !, пишите нам !
тыкнуть "БАН" проще чем чистить грязь !


Хочется срача ? / Инет принимаете за реальную жизнь ?
- соц сети ваш выбор !
AliStark вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инициализация GPIO на HAL + Keil5 или Учебник по HAL ARM / STM32F4 HAL AliStark ARM 7 07.12.2015 05:32
Варианты способов вывести из строя чужое авто авто tactic Автомобили 105 12.06.2015 00:12
Скимак на ARM Cortex-m4 STM32F4xx :) AliStark ARM 6 20.01.2015 02:48
те кто воруют из авто мафоны и сами авто suslik666 Флейм 38 26.09.2013 23:57


Текущее время: 00:15. Часовой пояс GMT +4.


Перевод: zCarot