/** * @brief Initialize the LCD * @retval None */ void LCD_IO_Init(void) { GPIO_InitTypeDef gpioinitstruct = {0}; /* LCD_CS_GPIO and LCD_DC_GPIO Periph clock enable */ LCD_CS_GPIO_CLK_ENABLE(); LCD_DC_GPIO_CLK_ENABLE(); /* Configure LCD_CS_PIN pin: LCD Card CS pin */ gpioinitstruct.Pin = LCD_CS_PIN; gpioinitstruct.Mode = GPIO_MODE_OUTPUT_PP; gpioinitstruct.Pull = GPIO_NOPULL; gpioinitstruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(SD_CS_GPIO_PORT, &gpioinitstruct); /* Configure LCD_DC_PIN pin: LCD Card DC pin */ gpioinitstruct.Pin = LCD_DC_PIN; HAL_GPIO_Init(LCD_DC_GPIO_PORT, &gpioinitstruct); /* LCD chip select high */ LCD_CS_HIGH(); /* LCD SPI Config */ SPIx_Init(); }
/** * @brief Initializes the SD Card and put it into StandBy State (Ready for * data transfer). * @param None * @retval None */ void SD_IO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; uint8_t counter; /* SD_CS_GPIO Periph clock enable */ SD_CS_GPIO_CLK_ENABLE(); /* Configure SD_CS_PIN pin: SD Card CS pin */ GPIO_InitStruct.Pin = SD_CS_PIN; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(SD_CS_GPIO_PORT, &GPIO_InitStruct); /* LCD chip select line perturbs SD also when the LCD is not used */ /* this is a workaround to avoid sporadic failures during r/w operations */ LCD_CS_GPIO_CLK_ENABLE(); GPIO_InitStruct.Pin = LCD_CS_PIN; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(LCD_CS_GPIO_PORT, &GPIO_InitStruct); LCD_CS_HIGH(); /*------------Put SD in SPI mode--------------*/ /* SD SPI Config */ SPIx_Init(); /* SD chip select high */ SD_CS_HIGH(); /* Send dummy byte 0xFF, 10 times with CS high */ /* Rise CS and MOSI for 80 clocks cycles */ for (counter = 0; counter <= 9; counter++) { /* Send dummy byte 0xFF */ SD_IO_WriteByte(SD_DUMMY_BYTE); } }
/** * @brief Initializes the LCD * @retval None */ void LCD_IO_Init(void) { GPIO_InitTypeDef gpioinitstruct = {0}; /* LCD_CS_GPIO and LCD_DC_GPIO Periph clock enable */ LCD_CS_GPIO_CLK_ENABLE(); LCD_DC_GPIO_CLK_ENABLE(); LCD_RW_GPIO_CLK_ENABLE() ; /* Configure LCD_CS_PIN pin: LCD Card CS pin */ gpioinitstruct.Pin = LCD_CS_PIN; gpioinitstruct.Mode = GPIO_MODE_OUTPUT_PP; gpioinitstruct.Speed = GPIO_SPEED_HIGH; HAL_GPIO_Init(LCD_CS_GPIO_PORT, &gpioinitstruct); /* Configure LCD_DC_PIN pin: LCD Card DC pin */ gpioinitstruct.Pin = LCD_DC_PIN; HAL_GPIO_Init(LCD_DC_GPIO_PORT, &gpioinitstruct); /* Configure LCD_RW_PIN pin: LCD Card DC pin */ gpioinitstruct.Pin = LCD_RW_PIN; HAL_GPIO_Init(LCD_RW_GPIO_PORT, &gpioinitstruct); /* Configure LCD_RW_PIN pin: LCD Card DC pin */ gpioinitstruct.Pin = LCD_RD_PIN; HAL_GPIO_Init(LCD_RW_GPIO_PORT, &gpioinitstruct); /* Configure LCD_RST PIN pin:*/ gpioinitstruct.Pin = LCD_RST_PIN; HAL_GPIO_Init(LCD_RST_GPIO_PORT, &gpioinitstruct); /* LCD chip select high */ /*LCD_GPIO_PORT config */ gpioinitstruct.Pin = LCD_DATA_PIN_7; HAL_GPIO_Init(LCD_GPIO_PORT, &gpioinitstruct); gpioinitstruct.Pin = LCD_DATA_PIN_6; HAL_GPIO_Init(LCD_GPIO_PORT, &gpioinitstruct); gpioinitstruct.Pin = LCD_DATA_PIN_5; HAL_GPIO_Init(LCD_GPIO_PORT, &gpioinitstruct); gpioinitstruct.Pin = LCD_DATA_PIN_4; //10 HAL_GPIO_Init(LCD_GPIO_PORT, &gpioinitstruct); gpioinitstruct.Pin = LCD_DATA_PIN_3; //9 HAL_GPIO_Init(LCD_GPIO_PORT, &gpioinitstruct); gpioinitstruct.Pin = LCD_DATA_PIN_2; HAL_GPIO_Init(LCD_GPIO_PORT, &gpioinitstruct); gpioinitstruct.Pin = LCD_DATA_PIN_1; HAL_GPIO_Init(LCD_GPIO_PORT, &gpioinitstruct); gpioinitstruct.Pin = LCD_DATA_PIN_0; HAL_GPIO_Init(LCD_GPIO_PORT, &gpioinitstruct); //// LCD_CS_HIGH(); /* LCD SPI Config */ // SPIx_Init(); }