summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxuzhuoyi <[email protected]>2018-09-13 21:35:52 +0800
committerxuzhuoyi <[email protected]>2018-09-13 21:35:52 +0800
commit68c5cc39c33e18024b7fe42b45f4ed6ae05ba1c2 (patch)
tree1f18a97eef98b3c8af356ae894b639a061983438
parentfd7af6a1509a0e282011fd7c3d9b18455f46da87 (diff)
[bsp][stm32f429-disco] Add guiengine support
-rw-r--r--bsp/stm32f429-disco/applications/application.c5
-rw-r--r--bsp/stm32f429-disco/drivers/drv_lcd.c98
-rw-r--r--bsp/stm32f429-disco/drivers/drv_lcd.h19
3 files changed, 102 insertions, 20 deletions
diff --git a/bsp/stm32f429-disco/applications/application.c b/bsp/stm32f429-disco/applications/application.c
index e6ad9e652f..621f1f988d 100644
--- a/bsp/stm32f429-disco/applications/application.c
+++ b/bsp/stm32f429-disco/applications/application.c
@@ -34,6 +34,8 @@
void rt_init_thread_entry(void* parameter)
{
+ rt_device_t lcd;
+
/* GDB STUB */
#ifdef RT_USING_GDB
gdb_set_device("uart6");
@@ -59,6 +61,9 @@ void rt_init_thread_entry(void* parameter)
#ifdef RT_USING_FINSH
finsh_system_init();
#endif
+ lcd = rt_device_find("lcd");
+ rtgui_graphic_set_device(lcd);
+ rt_gui_demo_init();
}
int rt_application_init()
diff --git a/bsp/stm32f429-disco/drivers/drv_lcd.c b/bsp/stm32f429-disco/drivers/drv_lcd.c
index b94e16539d..30481c0790 100644
--- a/bsp/stm32f429-disco/drivers/drv_lcd.c
+++ b/bsp/stm32f429-disco/drivers/drv_lcd.c
@@ -64,6 +64,7 @@ static RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;
static uint32_t ActiveLayer = 0;
//LCD_DrvTypeDef *LcdDrv;
SPI_HandleTypeDef hspi5;
+static SPI_HandleTypeDef SpiHandle;
void delay_us(rt_uint32_t nus)
{
@@ -86,6 +87,28 @@ void delay_ms(rt_uint32_t nms)
}
}
+/**
+ * @brief SPI MSP Init.
+ * @param hspi: SPI handle
+ */
+static void SPIx_MspInit(SPI_HandleTypeDef *hspi)
+{
+ GPIO_InitTypeDef GPIO_InitStructure;
+
+ /* Enable SPIx clock */
+ DISCOVERY_SPIx_CLK_ENABLE();
+
+ /* Enable DISCOVERY_SPI GPIO clock */
+ DISCOVERY_SPIx_GPIO_CLK_ENABLE();
+
+ /* configure SPI SCK, MOSI and MISO */
+ GPIO_InitStructure.Pin = (DISCOVERY_SPIx_SCK_PIN | DISCOVERY_SPIx_MOSI_PIN | DISCOVERY_SPIx_MISO_PIN);
+ GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStructure.Pull = GPIO_PULLDOWN;
+ GPIO_InitStructure.Speed = GPIO_SPEED_MEDIUM;
+ GPIO_InitStructure.Alternate = DISCOVERY_SPIx_AF;
+ HAL_GPIO_Init(DISCOVERY_SPIx_GPIO_PORT, &GPIO_InitStructure);
+}
/**
* @brief Selects the LCD Layer.
@@ -244,29 +267,66 @@ static uint32_t SPIx_Read(uint8_t ReadSize)
/**
* @brief Configures the LCD_SPI interface.
*/
-__weak void LCD_IO_Init(void)
+void LCD_IO_Init(void)
{
- /* Set or Reset the control line */
+ GPIO_InitTypeDef GPIO_InitStructure;
+
+
+ /* Configure NCS in Output Push-Pull mode */
+ LCD_WRX_GPIO_CLK_ENABLE();
+ GPIO_InitStructure.Pin = LCD_WRX_PIN;
+ GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStructure.Pull = GPIO_NOPULL;
+ GPIO_InitStructure.Speed = GPIO_SPEED_FAST;
+ HAL_GPIO_Init(LCD_WRX_GPIO_PORT, &GPIO_InitStructure);
+
+ LCD_RDX_GPIO_CLK_ENABLE();
+ GPIO_InitStructure.Pin = LCD_RDX_PIN;
+ GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStructure.Pull = GPIO_NOPULL;
+ GPIO_InitStructure.Speed = GPIO_SPEED_FAST;
+ HAL_GPIO_Init(LCD_RDX_GPIO_PORT, &GPIO_InitStructure);
+
+ /* Configure the LCD Control pins ----------------------------------------*/
+ LCD_NCS_GPIO_CLK_ENABLE();
+
+ /* Configure NCS in Output Push-Pull mode */
+ GPIO_InitStructure.Pin = LCD_NCS_PIN;
+ GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStructure.Pull = GPIO_NOPULL;
+ GPIO_InitStructure.Speed = GPIO_SPEED_FAST;
+ HAL_GPIO_Init(LCD_NCS_GPIO_PORT, &GPIO_InitStructure);
+
+ /* Set or Reset the control line */
LCD_CS_LOW();
LCD_CS_HIGH();
- /* SPI5 parameter configuration*/
- hspi5.Instance = SPI5;
- hspi5.Init.Mode = SPI_MODE_MASTER;
- hspi5.Init.Direction = SPI_DIRECTION_2LINES;
- hspi5.Init.DataSize = SPI_DATASIZE_8BIT;
- hspi5.Init.CLKPolarity = SPI_POLARITY_LOW;
- hspi5.Init.CLKPhase = SPI_PHASE_1EDGE;
- hspi5.Init.NSS = SPI_NSS_SOFT;
- hspi5.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
- hspi5.Init.FirstBit = SPI_FIRSTBIT_MSB;
- hspi5.Init.TIMode = SPI_TIMODE_DISABLE;
- hspi5.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
- hspi5.Init.CRCPolynomial = 10;
- if (HAL_SPI_Init(&hspi5) != HAL_OK)
- {
- //_Error_Handler(__FILE__, __LINE__);
- }
+ /* SPI configuration -----------------------------------------------------*/
+ SpiHandle.Instance = DISCOVERY_SPIx;
+ /* SPI baudrate is set to 5.6 MHz (PCLK2/SPI_BaudRatePrescaler = 90/16 = 5.625 MHz)
+ to verify these constraints:
+ - ILI9341 LCD SPI interface max baudrate is 10MHz for write and 6.66MHz for read
+ - l3gd20 SPI interface max baudrate is 10MHz for write/read
+ - PCLK2 frequency is set to 90 MHz
+ */
+ SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
+
+ /* On STM32F429I-Discovery, LCD ID cannot be read then keep a common configuration */
+ /* for LCD and GYRO (SPI_DIRECTION_2LINES) */
+ /* Note: To read a register a LCD, SPI_DIRECTION_1LINE should be set */
+ SpiHandle.Init.Direction = SPI_DIRECTION_2LINES;
+ SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE;
+ SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW;
+ SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
+ SpiHandle.Init.CRCPolynomial = 7;
+ SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT;
+ SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB;
+ SpiHandle.Init.NSS = SPI_NSS_SOFT;
+ SpiHandle.Init.TIMode = SPI_TIMODE_DISABLED;
+ SpiHandle.Init.Mode = SPI_MODE_MASTER;
+
+ SPIx_MspInit(&SpiHandle);
+ HAL_SPI_Init(&SpiHandle);
}
diff --git a/bsp/stm32f429-disco/drivers/drv_lcd.h b/bsp/stm32f429-disco/drivers/drv_lcd.h
index b62242bbe1..b537b13a67 100644
--- a/bsp/stm32f429-disco/drivers/drv_lcd.h
+++ b/bsp/stm32f429-disco/drivers/drv_lcd.h
@@ -150,7 +150,24 @@
#define LCD_RDX_GPIO_PORT GPIOD
#define LCD_RDX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
#define LCD_RDX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE()
-
+
+/*############################### SPIx #######################################*/
+#define DISCOVERY_SPIx SPI5
+#define DISCOVERY_SPIx_CLK_ENABLE() __HAL_RCC_SPI5_CLK_ENABLE()
+#define DISCOVERY_SPIx_GPIO_PORT GPIOF /* GPIOF */
+#define DISCOVERY_SPIx_AF GPIO_AF5_SPI5
+#define DISCOVERY_SPIx_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE()
+#define DISCOVERY_SPIx_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE()
+#define DISCOVERY_SPIx_SCK_PIN GPIO_PIN_7 /* PF.07 */
+#define DISCOVERY_SPIx_MISO_PIN GPIO_PIN_8 /* PF.08 */
+#define DISCOVERY_SPIx_MOSI_PIN GPIO_PIN_9 /* PF.09 */
+/* Maximum Timeout values for flags waiting loops. These timeouts are not based
+ on accurate values, they just guarantee that the application will not remain
+ stuck if the SPI communication is corrupted.
+ You may modify these timeout values depending on CPU frequency and application
+ conditions (interrupts routines ...). */
+#define SPIx_TIMEOUT_MAX ((uint32_t)0x1000)
+
int rt_lcd_init(void);
#endif