DIP-MIK32-BB-V2: различия между версиями

Материал из MIK32 микроконтроллер
Нет описания правки
Нет описания правки
 
(не показано 25 промежуточных версий 2 участников)
Строка 1: Строка 1:
== Схемы ==
== Подключение и программирование платы DIP-MIK32-BB-V2 ==
Чертеж платы: ссылка
 
Принципиальная схема: [https://files.mik32.ru/board/dip-mik32-bb-v2/Схема_DIP-MIK32-BB-V2.pdf ссылка]
 
== Инструкция по подключению и программированию платы DIP-MIK32-BB ==
Для программирования платы требуется:
Для программирования платы требуется:


- плата DIP-MIK32-BB;
- плата DIP-MIK32-BB-V2;


- Программатор MIK32;
- Программатор MIK32 или Olimex ARM-USB-OCD-H;


- Установленный плагин platformio в visual studio code.
- Установленный плагин platformio в visual studio code.


=== Подготовка программатора ===
=== Подготовка программатора ===
Установка драйвера для программатора описана в статье [[Работа с отладчиками на основе FT2232H|Работа с отладчиками на основе FT2232H.]]
Для прошивки с помощью программатора MIK32 следует установить драйвер. Установка драйвера описана в статье [[Работа с отладчиками на основе FT2232H|Работа с отладчиками на основе FT2232H.]]


=== Platformio ===
=== Установка Platformio ===
Установка Visual Studio Code и Platformio описаны в статье [https://wiki.mik32.ru/Быстрый_старт_в_Visual_Studio_Code Быстрый старт в Visual Studio Code].
Установка Visual Studio Code и Platformio описаны в статье [[Быстрый старт в Visual Studio Code]].


Затем нужно подготовить Platformio к программированию под MIK32. Это описано в статье [https://wiki.mik32.ru/index.php/Установка_библиотек_для_разработки_под_MIK32 Установка библиотек для разработки под MIK32.]
Затем нужно подготовить Platformio к программированию под MIK32. Это описано в статье [https://wiki.mik32.ru/index.php/Установка_библиотек_для_разработки_под_MIK32 Установка библиотек для разработки под MIK32.]


=== Подключение программатора к DIP-MIK32-BB ===
=== Подключение программатора к DIP-MIK32-BB-V2 ===
[[Файл:Рисунок 1 - Соединение программатора MIK32 и DIP-MIK32-BB.png|мини|Рисунок 1 - Соединение программатора MIK32 и DIP-MIK32-BB]]
[[Файл:Соединение программатора и dip-mik32-bb-v2 без резистора r1.png|мини|299x299px|Рисунок 1 - Соединение программатора и dip-mik32-bb-v2 без резистора R1]]
[[Файл:DIP-MIK32-BB-V2.png|мини|Рисунок 2 - распиновка]]
[[Файл:Соединение программатора и dip-mik32-bb-v0 с резистором R1 .png|мини|рисунок 2 - Соединение программатора и dip-mik32-bb-v0 с резистором R1 ]]
Соединение программатора с DIP-MIK32-BB изображено на рисунке 1.
[[Файл:Схема электрическая принципиальная для переходника.png|мини|Рисунок 3 - Схема электрическая принципиальная для переходника]]
[[Файл:Выбор режима загрузки.png|мини|Рисунок 4 - Выбор режима загрузки]]
Если на плате не запаян нулевой резистор R1, то программатор подключается в соответствии с рисунком 1 . Если резистор R2 запаян, то можно использовать как первое подключение, так и как на рисунке 2.  Напряжение питания платы 3.3 В нужно подавать отдельно.
 
На 19-м выводе программатора есть напряжение 5В, которое можно понизить до 3.3В. Для удобства предлагается использовать специальный переходник (рисунок 3). Если с 19 вывода программатора идет 5В, то перемычка JP1 должна быть разомкнута, а JP2 замкнута. Напряжение 5В понизится регулятором до 3.3в. Если на плате не запаян резистор R1, то перемычка JP4 должна быть замкнута, если резистор есть, то состояние JP4 может быть любым.
 
После этого нужно выбрать режим загрузки с помощью перемычек на разъеме XP4. Перемычки подают на BOOT0 и BOOT1 либо напряжение VCC, либо GND.


После этого нужно выбрать режим загрузки. Для это нужно установить перемычку как показано на рисунке 2. Для загрузки программы в RAM нужно установить BOOT0 = 1 и BOOT1 = 0 с помощью перемычек. Плата DIP-MIK32-BB питается от напряжения 3,3 В.
Положение перемычек (рисунок 4):
[[Файл:Создание проекта.png|мини|Рисунок 3 - Создание проекта в Platformio]]
В Platformio создаем новый проект. Во вкладке BOARD выбираем "MIK32 (MIKRON)" как на рисунке 3 и нажимаем "Finish".
[[Файл:Platformio2.png|мини|Рисунок 4 - Platformio.ini]]
Затем в окне EXPLORER выбираем platformio.ini и записываем "board_debug.interface = m-link" и "board_debug.ldscript = ram" как на рисунке 4 . Более подробно с параметрами можно ознакомиться в статье [https://wiki.mik32.ru/Параметры_platformio.ini Параметры platformio.ini]. Для записи в EEPROM требуется выставить частоту JTAG в 50 кГц командой "board_debug.adapter_speed=50".


После этого создаем в папке src окна EXPLORER файл main.c и пишем в него свой код. Пример кода для мигания светодиодом LED2 приведен ниже.
RAM - BOOT0 = 1, BOOT1 = 0;
<syntaxhighlight lang="C++" line="1">
 
EEPROM - BOOT0 = 0, BOOT1 = 0;
 
SPIFI - BOOT0 = 0, BOOT1 = 1.
 
=== Пример Blink в platformio ===
В примере программа будет загружаться в EEPROM, поэтому перемычки нужно поставить так чтобы BOOT0 = 0, BOOT1 = 0 (Рисунок 4).
 
==== С использованием регистров ====
[[Файл:Создание проекта Blink.png|мини|Рисунок 5 - Создание проекта в Platformio]]
[[Файл:PlatformIo.ini V0.png|мини|Рисунок 6 - platformio.ini]]
[[Файл:Прошивка.png|мини|Рисунок 7 - Прошивка в platformio]]
для создания нового проекта в PlatformIo нужно нажать на иконку platformio, в списке "QUICK ACCESS" выбрать "open". После этого появится кнопка "New project". После ее нажатия появится Project Wizard. В поле Name задаем имя проекта, в поле Board выбираем "MIK32V0 Generic Board (Mikron)" как на рисунке 5. Если требуется задать путь сохранения проекта, то нужно снять галочку Use default location. Для завершения создания проекта нажимаем "Finish".
в окне проводника (EXPLORER) выбираем platformio.ini. Для записи в RAM или EEPROM нужно выбрать соответствующий LD скрипт с помощью команды "board_debug.ldscript = ram" или "board_debug.ldscript = eeprom" соответственно. Если строчку не писать, то автоматически будет выбран скрипт для загрузки в EEPROM. Более подробно с параметрами можно ознакомиться в статье [https://wiki.mik32.ru/index.php/Параметры_platformio.ini Параметры platformio.ini].  В примере запись будет осуществляться в EEPROM (параметры platformio.ini на рисунке 6).
 
После этого создаем в папке src файл main.c и пишем в него свой код.  
 
Пример кода для мигания светодиодом LED1 приведен ниже.
{{#spoiler:show=Развернуть код|hide=Свернуть код|
<syntaxhighlight lang="c" line="1">
#include <mcu32_memory_map.h>
#include <mcu32_memory_map.h>
#include <pad_config.h>
#include <pad_config.h>
#include <gpio.h>
#include <gpio.h>
#include <power_manager.h>
#include <power_manager.h>
#define PIN_LED2 3 // LED2 управляется выводом PORT_1_3
 
void initClock() {
#define PIN_LED1 3 // LED1 управляется выводом PORT_0_3
PM->CLK_APB_P_SET =  PM_CLOCK_GPIO_1_M; // включение тактирования GPIO0 и GPIO1
 
PM->CLK_APB_M_SET = PM_CLOCK_PAD_CONFIG_M | PM_CLOCK_WU_M | PM_CLOCK_PM_M; // включение тактирования блока для смены режима выводов
void initClock()  
for (volatile int i = 0; i < 10; i++) ;
{
PM->CLK_APB_P_SET |PM_CLOCK_GPIO_0_M; // включение тактирования GPIO0
PM->CLK_APB_M_SET |= PM_CLOCK_PAD_CONFIG_M | PM_CLOCK_WU_M | PM_CLOCK_PM_M; // включение тактирования блока для смены режима выводов
}
}


void ledBlink() {
void ledBlink()  
GPIO_1->OUTPUT |= 1 << PIN_LED2;  //Установка значения вывода 3 порта 1 в высокий уровень
{
for (volatile int i = 0; i < 1000000; i++);
GPIO_0->OUTPUT |= 1 << PIN_LED1;  //Установка значения вывода 3 порта 0 в высокий уровень
GPIO_1->OUTPUT &= ~(1 << PIN_LED2); //Установка значения вывода 3 порта 1 в низкий уровень   
for (volatile int i = 0; i < 100000; i++);
for (volatile int i = 0; i < 1000000; i++);
GPIO_0->OUTPUT &= ~(1 << PIN_LED1); //Установка значения вывода 3 порта 0 в низкий уровень   
for (volatile int i = 0; i < 100000; i++);
}
}


void main() {
int main()  
initClock(); //включние тактирования GPIO1
{
initClock(); //включние тактирования GPIO_0


PAD_CONFIG->PORT_1_CFG |= (1 << (2 * PIN_LED2)); // Установка порта 1 в режим GPIO
PAD_CONFIG->PORT_0_CFG |= (1 << (2 * PIN_LED1)); // Установка вывода 3 порта 0 в режим GPIO
    //PAD_CONFIG->PORT_0_CFG |= (0b01 << PIN_LED2); // Установка порта 1 в режим GPIO


GPIO_1->DIRECTION_OUT = 0xFFFF; // Установка направления порта 1 в выход
GPIO_0->DIRECTION_OUT = 1 << PIN_LED1; // Установка направления вывода 3 порта 0 на выход
    GPIO_0->DIRECTION_OUT = 0xFFFF; // Установка направления порта 1 в выход


while (1) {
while (1) {
Строка 66: Строка 84:
}
}
</syntaxhighlight>
</syntaxhighlight>
[[Файл:Билд.png|мини|Рисунок 5 - прошивка]]
}}
После того как код написан нажимаем в левом нижнем углу иконку галочки для компиляции проекта, а затем стрелочку для прошивки как на рисунке 5.
После того как код написан нажимаем в левом нижнем углу иконку галочки для компиляции проекта, а затем стрелочку для прошивки как на рисунке 7.
 
====С использованием библиотек HAL====
На данный момент библиотеки для GPIO и контроллера выводов в работе. В данном примере будут использованы библиотеки тактирования (mik32_hal_rcc) и системного таймера (mik32_hal_scr1_timer). Системный таймер будет использован для функции задержки.
 
Пример кода для мигания светодиодом LED1 приведен ниже.
{{#spoiler:show=Развернуть код|hide=Свернуть код|
<syntaxhighlight lang="c">
#include "mik32_hal_rcc.h"
#include "mik32_hal_scr1_timer.h"
 
#include <pad_config.h>
#include <gpio.h>
 
 
#define PIN_LED1 3 // LED1 управляется выводом PORT_0_3
 
 
SCR1_TIMER_HandleTypeDef hscr1_timer;
 
void SystemClock_Config(void);
static void Scr1_Timer_Init(void);
 
 
int main()
{   
 
    SystemClock_Config();
 
    Scr1_Timer_Init();
 
    PAD_CONFIG->PORT_0_CFG |= (1 << (2 * PIN_LED1)); // Установка вывода 3 порта 0 в режим GPIO
GPIO_0->DIRECTION_OUT = 1 << PIN_LED1; // Установка направления вывода 3 порта 0 на выход
 
    while (1)
    {   
        GPIO_0->OUTPUT |= 1 << PIN_LED1;    //Установка вывода 3 порта 0 в высокий уровень
        HAL_DelayMs(&hscr1_timer, 1000);    // Задержка должна быть не более 134217 мс
        GPIO_0->OUTPUT &= ~(1 << PIN_LED1); //Установка вывода 3 порта 0 в низкий уровень 
        HAL_DelayMs(&hscr1_timer, 1000);
    }
     
}
 
/* Настройка тактирования */
void SystemClock_Config(void)
{
    RCC_OscInitTypeDef RCC_OscInit = {0};
    RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
 
    RCC_OscInit.OscillatorEnable = RCC_OSCILLATORTYPE_OSC32K | RCC_OSCILLATORTYPE_OSC32M; 
    RCC_OscInit.OscillatorSystem = RCC_OSCILLATORTYPE_OSC32M;                         
    RCC_OscInit.AHBDivider = 0;                           
    RCC_OscInit.APBMDivider = 0;                           
    RCC_OscInit.APBPDivider = 0;                           
    RCC_OscInit.HSI32MCalibrationValue = 0;                 
    RCC_OscInit.LSI32KCalibrationValue = 0;
    HAL_RCC_OscConfig(&RCC_OscInit);
 
    PeriphClkInit.PMClockAHB = PMCLOCKAHB_DEFAULT;   
    PeriphClkInit.PMClockAPB_M = PMCLOCKAPB_M_DEFAULT | PM_CLOCK_WU_M | PM_CLOCK_PAD_CONFIG_M;   
    PeriphClkInit.PMClockAPB_P = PMCLOCKAPB_P_DEFAULT | PM_CLOCK_GPIO_0_M;     
    PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_NO_CLK;
    PeriphClkInit.RTCClockCPUSelection = RCC_RTCCLKCPUSOURCE_NO_CLK;
    HAL_RCC_ClockConfig(&PeriphClkInit);
}
 
/* Настройки системного таймера */
static void Scr1_Timer_Init(void)
{
    hscr1_timer.Instance = SCR1_TIMER;
 
    hscr1_timer.ClockSource = SCR1_TIMER_CLKSRC_INTERNAL;    /* Источник тактирования */
    hscr1_timer.Divider = 0;      /* Делтитель частоты 10-битное число */
 
    HAL_SCR1_Timer_Init(&hscr1_timer);
}
 
</syntaxhighlight>
}}
 
==Полезные ссылки==
Репозиторий заголовочных файлов https://github.com/MikronMIK32/mik32-shared
 
Репозиторий библиотек https://github.com/MikronMIK32/mik32-hal
 
Репозиторий примеров https://github.com/MikronMIK32/mik32-examples (часть на регистрах, часть с использованием библиотек)

Текущая версия от 15:17, 10 апреля 2024

Подключение и программирование платы DIP-MIK32-BB-V2

Для программирования платы требуется:

- плата DIP-MIK32-BB-V2;

- Программатор MIK32 или Olimex ARM-USB-OCD-H;

- Установленный плагин platformio в visual studio code.

Подготовка программатора

Для прошивки с помощью программатора MIK32 следует установить драйвер. Установка драйвера описана в статье Работа с отладчиками на основе FT2232H.

Установка Platformio

Установка Visual Studio Code и Platformio описаны в статье Быстрый старт в Visual Studio Code.

Затем нужно подготовить Platformio к программированию под MIK32. Это описано в статье Установка библиотек для разработки под MIK32.

Подключение программатора к DIP-MIK32-BB-V2

Рисунок 1 - Соединение программатора и dip-mik32-bb-v2 без резистора R1
рисунок 2 - Соединение программатора и dip-mik32-bb-v0 с резистором R1
Рисунок 3 - Схема электрическая принципиальная для переходника
Рисунок 4 - Выбор режима загрузки

Если на плате не запаян нулевой резистор R1, то программатор подключается в соответствии с рисунком 1 . Если резистор R2 запаян, то можно использовать как первое подключение, так и как на рисунке 2. Напряжение питания платы 3.3 В нужно подавать отдельно.

На 19-м выводе программатора есть напряжение 5В, которое можно понизить до 3.3В. Для удобства предлагается использовать специальный переходник (рисунок 3). Если с 19 вывода программатора идет 5В, то перемычка JP1 должна быть разомкнута, а JP2 замкнута. Напряжение 5В понизится регулятором до 3.3в. Если на плате не запаян резистор R1, то перемычка JP4 должна быть замкнута, если резистор есть, то состояние JP4 может быть любым.

После этого нужно выбрать режим загрузки с помощью перемычек на разъеме XP4. Перемычки подают на BOOT0 и BOOT1 либо напряжение VCC, либо GND.

Положение перемычек (рисунок 4):

RAM - BOOT0 = 1, BOOT1 = 0;

EEPROM - BOOT0 = 0, BOOT1 = 0;

SPIFI - BOOT0 = 0, BOOT1 = 1.

Пример Blink в platformio

В примере программа будет загружаться в EEPROM, поэтому перемычки нужно поставить так чтобы BOOT0 = 0, BOOT1 = 0 (Рисунок 4).

С использованием регистров

Рисунок 5 - Создание проекта в Platformio
Рисунок 6 - platformio.ini
Рисунок 7 - Прошивка в platformio

для создания нового проекта в PlatformIo нужно нажать на иконку platformio, в списке "QUICK ACCESS" выбрать "open". После этого появится кнопка "New project". После ее нажатия появится Project Wizard. В поле Name задаем имя проекта, в поле Board выбираем "MIK32V0 Generic Board (Mikron)" как на рисунке 5. Если требуется задать путь сохранения проекта, то нужно снять галочку Use default location. Для завершения создания проекта нажимаем "Finish". в окне проводника (EXPLORER) выбираем platformio.ini. Для записи в RAM или EEPROM нужно выбрать соответствующий LD скрипт с помощью команды "board_debug.ldscript = ram" или "board_debug.ldscript = eeprom" соответственно. Если строчку не писать, то автоматически будет выбран скрипт для загрузки в EEPROM. Более подробно с параметрами можно ознакомиться в статье Параметры platformio.ini. В примере запись будет осуществляться в EEPROM (параметры platformio.ini на рисунке 6).

После этого создаем в папке src файл main.c и пишем в него свой код.

Пример кода для мигания светодиодом LED1 приведен ниже.

После того как код написан нажимаем в левом нижнем углу иконку галочки для компиляции проекта, а затем стрелочку для прошивки как на рисунке 7.

С использованием библиотек HAL

На данный момент библиотеки для GPIO и контроллера выводов в работе. В данном примере будут использованы библиотеки тактирования (mik32_hal_rcc) и системного таймера (mik32_hal_scr1_timer). Системный таймер будет использован для функции задержки.

Пример кода для мигания светодиодом LED1 приведен ниже.

Полезные ссылки

Репозиторий заголовочных файлов https://github.com/MikronMIK32/mik32-shared

Репозиторий библиотек https://github.com/MikronMIK32/mik32-hal

Репозиторий примеров https://github.com/MikronMIK32/mik32-examples (часть на регистрах, часть с использованием библиотек)