STM32F101-107 CMSIS Драйвер 8-разрядного цифрового индикатора на микросхеме MAX7219 для использования совместно с библиотеками HAL, LL и SPL.
Для упрощения создания проектов с индикацией мною была написанная библиотека предназначена для работы с 8-разрядными индикаторами с микросхемой-драйвером MAX7219. Драйвер написан на СИ с применением библиотеки CMSIS, поэтому драйвер можно использовать совместно с любой библиотекой как с HAL, так и с LL, SPL в микроконтроллерах серии STM32F101-107.
Драйвер позволяет выводить нумерацию или любой символ в любой позиции, что позволяет перемещать отображаемое по экрану.

Схема подключения, выводы подключения к микроконтроллеру менять нельзя.

Скачать драйвер можно здесь, также тут находится весь необходимый материал, включая демо-программу для STM32CubeIDE.
Описание функций драйвера.
Инициализация устройства выполняется функцией, которая настраивает выводы( PA7, PA5) SPI1 и вывод PA6 для захвата данных.
MAX7219_Initialization( uint16_t div_clk);
Функция принимает значение предделителя для тактирования SPI1.
div_clk - Div_2, Div_4, Div_8, Div_16, Div_32, Div_64, Div_128, Div_256.
MAX7219_Brightness( uint8_t bright);
Функция устанавливает яркость экрана.
bright - от 0 до 15.
MAX7219_Display_Symbol( uint16_t position, uint8_t symbol);
Функция выводит на экран в нужной позиции символ .
position - от 1 до 8.
symbol : 0-0, 1-1, 2-2, 3-3, 4-4, 5-5, 6-6, 7-7, 8-8, 9-9, 10-., 11-space, 12--, 13-A, 14-C, 15-E, 16-F, 17-G, 18-H, 19-I, 20-L, 21-P, 22-S, 23-T, 24-U, 25-b, 26-c, 27-d, 28-h, 29-i, 30-l, 31-n, 32-o, 33-r, 34-t, 35-u, 36-значок градус.
MAX7219_Сlear_Symbol( uint16_t position);
Функция очищает символ в нужной позиции
position - от 1 до 8.
MAX7219_Сlear( void);
Функция очищает экран.
void MAX7219_8Number_Min_Dot_Pos_Siz( uint32_t number, uint8_t minus, uint8_t dot, uint8_t position, uint8_t size);
Функция выводит на экран тридцати битовое число со знаком или без, также устанавливает точку в нужной позиции.
number - выводимое число
minus - on отобразить, off не отображать
dot - точка в нужной позиции off точка не отображается, если от 1 до 8 то отобразится в нужной позиции
position - сдвиг числа на нужную позицию от 1 до 8, если 0 то не сдвигается
size - отображает количество цифр, от меньшего до большого значения.
MAX7219_Watch_H_M_S( uint32_t time, uint8_t separator);
Функция отображает время с разделителем.
time - время( в секундах) от 0 до 86399 = ч * м * с
seprator - разделитель если on то отображает его off нет.Фрагмент кода из демо программы.
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
MAX7219_Initialization( Div_4);
MAX7219_Сlear();
MAX7219_Brightness( 5);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
//Мячики
for( uint8_t q = 1; q < 9; q++){
MAX7219_Display_Symbol( q, 36);
HAL_Delay(200);
}
for( uint8_t q = 8; q > 0; q--){
MAX7219_Display_Symbol( q, 32);
HAL_Delay(200);
}
//Вывод на экран HELLO.
for( int8_t i = -5; i < 9; i++){
MAX7219_Display_Symbol( i+5, 18);
MAX7219_Display_Symbol( i+4, 15);
MAX7219_Display_Symbol( i+3, 20);
MAX7219_Display_Symbol( i+2, 20);
MAX7219_Display_Symbol( i+1, 0);
HAL_Delay(300);
MAX7219_Сlear();
}
//Часы.
for( uint8_t i = 0; i < 8; i++){
MAX7219_Watch_H_M_S( 43200+i, (43200+i)&1);
HAL_Delay(1000);
}
MAX7219_Сlear();
//Счётчики
for( int32_t count = 20; count > 0; count--){
MAX7219_8Number_Min_Dot_Pos_Siz( count, off, 2, 2, 4);
HAL_Delay(200);
}
MAX7219_Сlear();
for( int32_t count = 0; count > -20; count--){
MAX7219_8Number_Min_Dot_Pos_Siz( (count * -1), on, 2, 0, 4);
HAL_Delay(200);
}
MAX7219_Сlear();
for( uint8_t q = 0; q < 8; q++){
MAX7219_Display_Symbol( 5, 15);
MAX7219_Display_Symbol( 4, 33);
MAX7219_Display_Symbol( 3, 33);
HAL_Delay(400);
MAX7219_Сlear();
HAL_Delay(400);
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}Если вам понадобятся дополнительные функции в драйвере или дополнительные символы, то пишите мне в комментариях в статье на Boosty, я дополню всем необходимым драйвер!





