/* MAX7219 Interaction Code * --------------------------- * For more information see * http://www.adnbr.co.uk/articles/max7219-and-7-segment-displays * ---------------------------------------------------------------------------- * "THE BEER-WARE LICENSE" (Revision 42): * wrote this file. As long as you retain this notice you * can do whatever you want with this stuff. If we meet some day, and you think * this stuff is worth it, you can buy me a beer in return. Shilov V.N. * ---------------------------------------------------------------------------- */ #include "max7219.h" #define SPI_PORT GPIOB #define SPI_NSS GPIO_Pin_4 #define SPI_SCK GPIO_Pin_5 #define SPI_MOSI GPIO_Pin_6 #define SPI_PINS (SPI_NSS|SPI_SCK|SPI_MOSI) void MAX7219_Init(void) { SPI_DeInit(SPI1); /* Enable clock for SPI */ CLK_PeripheralClockConfig(CLK_Peripheral_SPI1, ENABLE); /* Set the MOSI,MISO and SCK at high level */ GPIO_ExternalPullUpConfig(SPI_PORT, SPI_PINS, ENABLE); // GPIO_Init(SPI_PORT, SPI_PINS, GPIO_Mode_Out_PP_High_Fast); /* Init SPI */ SPI_Init(SPI1, SPI_FirstBit_MSB, SPI_BaudRatePrescaler_2, SPI_Mode_Master, SPI_CPOL_High, SPI_CPHA_2Edge, SPI_Direction_1Line_Tx, SPI_NSS_Hard, 0x00); /* SPI Enable */ SPI_Cmd(SPI1, ENABLE); /* Настройка MAX71219 */ MAX7219_WriteData(DecodeMode, 0x00); // все без BCD декодирования MAX7219_WriteData(ScanLimit, MAX7219_DIGITS); // сколько цифр используем MAX7219_WriteData(Intensity, MAX7219_BRIGHT); // яркость из 16 MAX7219_WriteData(Power,MAX7219_ON); // включили питание } void MAX7219_WriteData(max7219_reg_t reg, uint8_t data) { // SPI_NSSInternalSoftwareCmd(ENABLE); /*!< Wait until the transmit buffer is empty */ while (SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE) == RESET) {} /* Send the register where the data will be stored */ SPI_SendData(SPI1, reg); /*!< Wait until the transmit buffer is empty */ while (SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE) == RESET) {} /* Send the data to be stored */ SPI_SendData(SPI1, data); // SPI_NSSInternalSoftwareCmd(DISABLE); }