GPIO: различия между версиями

Материал из me-robotics wiki
(Новая страница: «Пример работы с GPIO:<syntaxhighlight lang="c"> #include <mcu32_memory_map.h> #include <pad_config.h> #include <gpio.h> #include <power_manager.h>...»)
 
 
Строка 6: Строка 6:
 
#include <gpio.h>
 
#include <gpio.h>
 
#include <power_manager.h>
 
#include <power_manager.h>
 +
 +
// Установите в соответствии с подключением светодиода
 +
#define LED_PORT GPIO_1 // Порт
 +
#define LED_PIN 3 // Вывод порта
 +
#define CLOCK_GPIO_PORT PM_CLOCK_GPIO_1_M // Тактирование порта
 +
#define PIN_MODE_GPIO 1 // Режим вывода - GPIO
 +
#define PIN_MODE_PORT PORT_1_CFG // Регистр управления режимом порта
  
 
void initClock() {
 
void initClock() {
PM->CLK_APB_P_SET = PM_CLOCK_GPIO_0_M | PM_CLOCK_GPIO_1_M;
+
PM->CLK_APB_P_SET = CLOCK_GPIO_PORT;
 
PM->CLK_APB_M_SET = PM_CLOCK_PAD_CONFIG_M | PM_CLOCK_WU_M | PM_CLOCK_PM_M;
 
PM->CLK_APB_M_SET = PM_CLOCK_PAD_CONFIG_M | PM_CLOCK_WU_M | PM_CLOCK_PM_M;
 
for (volatile int i = 0; i < 10; i++) ;
 
for (volatile int i = 0; i < 10; i++) ;
Строка 14: Строка 21:
  
 
void ledBlink() {
 
void ledBlink() {
GPIO_1->OUTPUT = 1 << 13;  //Установка значения вывода порта 1 в высокий уровень
+
LED_PORT->OUTPUT = 1 << LED_PIN;  // Установка значения вывода порта 1 в высокий уровень
for (volatile int i = 0; i < 500000; i++);
+
for (volatile int i = 0; i < 1000000; i++);
GPIO_1->OUTPUT = 0;         
+
LED_PORT->OUTPUT = 0;         
for (volatile int i = 0; i < 500000; i++);
+
for (volatile int i = 0; i < 1000000; i++);
 
}
 
}
  
void main() {
+
int main() {
 
initClock();
 
initClock();
  
PAD_CONFIG->PORT_1_CFG = 0x55555555; // Установка порта 1 в режим GPIO
+
PAD_CONFIG->PIN_MODE_PORT = PIN_MODE_GPIO << (LED_PIN << 1) ; // Установка порта 1 в режим GPIO
GPIO_1->DIRECTION_OUT = 0xFFFF; // Установка направления порта 1 в выход
+
LED_PORT->DIRECTION_OUT = 1 << LED_PIN; // Установка направления порта 1 в выход
  
 
while (1) {
 
while (1) {

Текущая версия на 16:45, 12 апреля 2022

Пример работы с GPIO:

#include <mcu32_memory_map.h>

#include <pad_config.h>
#include <gpio.h>
#include <power_manager.h>

// Установите в соответствии с подключением светодиода
#define LED_PORT GPIO_1 									// Порт
#define LED_PIN 3													// Вывод порта
#define CLOCK_GPIO_PORT PM_CLOCK_GPIO_1_M	// Тактирование порта
#define PIN_MODE_GPIO 1										// Режим вывода - GPIO
#define PIN_MODE_PORT PORT_1_CFG					// Регистр управления режимом порта

void initClock() {
	PM->CLK_APB_P_SET = CLOCK_GPIO_PORT;
	PM->CLK_APB_M_SET = PM_CLOCK_PAD_CONFIG_M | PM_CLOCK_WU_M | PM_CLOCK_PM_M;
	for (volatile int i = 0; i < 10; i++) ;
}

void ledBlink() {
	LED_PORT->OUTPUT = 1 << LED_PIN;   // Установка значения вывода порта 1 в высокий уровень
	for (volatile int i = 0; i < 1000000; i++);
	LED_PORT->OUTPUT = 0;         
	for (volatile int i = 0; i < 1000000; i++);
}

int main() {
	initClock();

	PAD_CONFIG->PIN_MODE_PORT = PIN_MODE_GPIO << (LED_PIN << 1) ; // Установка порта 1 в режим GPIO
	LED_PORT->DIRECTION_OUT = 1 << LED_PIN; // Установка направления порта 1 в выход

	while (1) {
		ledBlink();
	}
}