Инициализация выводов STM32F с использованием 2D-массива - PullRequest
0 голосов
/ 22 апреля 2020

Я работаю над проектом, который включает в себя освещение дисплея 7SEG с помощью платы STM32F4, поэтому мне удалось инициализировать все выходные выводы с помощью этого кода:

void init_library(vector_pin_t pines)
{

    GPIO_InitTypeDef puerto;
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); 

    puerto.GPIO_Pin   = 0xFFFF;     //Using only this to choose all pins
    puerto.GPIO_Mode  = GPIO_Mode_OUT;
    ...
    }

Приведенный выше код работает нормально, но Мне интересно, как я могу сделать то же самое, используя двумерный массив "v"

vector_pin_t v={{PortD,Pin_Port_0},{PortD,Pin_Port_1}{PortD,Pin_Port_2},
{PortD,Pin_Port_3} , {PortD,Pin_Port_4}, {PortD,Pin_Port_5}, {PortD,Pin_Port_6}, {PortD,Pin_Port_7}};

init_library(v);

1 Ответ

1 голос
/ 22 апреля 2020

Более простой способ - сохранить значения выводов для каждого ди git в одном байте (1 бит для каждого вывода).

Например, вот так:

#define NUM_DIGIT_VALUES 11

// Segments:
// ..a..
// f   b
// . g .
// e   c
// ..d.. dot

static const byte digits[NUM_DIGIT_VALUES] = {
    // dot-abcdefg
    0b01111110, // = 0
    0b00110000, // = 1
    0b01101101, // = 2
    0b01111001, // = 3
    0b00110011, // = 4
    0b01011011, // = 5
    0b01011111, // = 6
    0b01110000, // = 7
    0b01111111, // = 8
    0b01111011, // = 9
    0b01001001  // = overflow
};

Затем вы можете записать весь байт сразу в порт.

Например: для отображения di git 2 запишите цифры [2] в нужный порт.

...