rtthread studio使用【正点原子ATK阿波罗STM32F429开发板】bsp的Lcd驱动掉过的坑

坑一:bsp文件有drv_lcd.c,但RT-Thread Settings默认没有lcd驱动使能的选项

解决:

1、修改board文件夹下的kconfig文件,添加lcd使能选项

2、在RT-Thread Setting勾选"Enable LCD"

3、 在board/CubeMX_Config/Inc文件夹下stm32f4xx_hal_conf.h下使能LTDC宏

 坑二:LCD使能了,编译工程发现提示drv_lcd.c缺少lcd_port.h文件

解决:

        手动添加lcd_port.h文件,参数根据lcd数据手册修改,我使用的是正点原子的800*480 TFTLCD屏

 坑三:工程编译没有问题了,下载到开发板发现不好使

解决:

       1、 drv_lcd.c初始化LTDC没有配置LTDC时钟,需要自己手动添加

        2、添加时钟配置代码之后,检查时钟配置参数是不是正确的,我使用的正点原子800*480 TFTLCD屏,从数据手册得知时钟是33M(数据书册可以找X宝客服要),在board.c修改时钟树分频系数

/** System Clock Configuration
*/
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};

  /**Configure the main internal regulator output voltage 
  */
  __HAL_RCC_PWR_CLK_ENABLE();
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  /**Initializes the CPU, AHB and APB busses clocks 
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE
                              |RCC_OSCILLATORTYPE_LSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.LSEState = RCC_LSE_ON;
  RCC_OscInitStruct.LSIState = RCC_LSI_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 25;
  RCC_OscInitStruct.PLL.PLLN = 336;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 7;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /**Activate the Over-Drive mode 
  */
  if (HAL_PWREx_EnableOverDrive() != HAL_OK)
  {
    Error_Handler();
  }
  /**Initializes the CPU, AHB and APB busses clocks 
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  {
    Error_Handler();
  }
  PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
  PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
  if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
}

 3、drv_lcd.c没有定义lcd引脚的初始化函数,手动添加

void HAL_LTDC_MspInit(LTDC_HandleTypeDef *hltdc)
{
    GPIO_InitTypeDef GPIO_Initure;

     __HAL_RCC_LTDC_CLK_ENABLE();                //使能LTDC时钟
     __HAL_RCC_DMA2D_CLK_ENABLE();               //使能DMA2D时钟
     __HAL_RCC_GPIOB_CLK_ENABLE();               //使能GPIOB时钟
     __HAL_RCC_GPIOF_CLK_ENABLE();               //使能GPIOF时钟
     __HAL_RCC_GPIOG_CLK_ENABLE();               //使能GPIOG时钟
     __HAL_RCC_GPIOH_CLK_ENABLE();               //使能GPIOH时钟
     __HAL_RCC_GPIOI_CLK_ENABLE();               //使能GPIOI时钟

     //初始化PB5,背光引脚
     GPIO_Initure.Pin=GPIO_PIN_5;                //PB5推挽输出,控制背光
     GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;      //推挽输出
     GPIO_Initure.Pull=GPIO_PULLUP;              //上拉
     GPIO_Initure.Speed=GPIO_SPEED_HIGH;         //高速
     HAL_GPIO_Init(GPIOB,&GPIO_Initure);

     //初始化PF10
     GPIO_Initure.Pin=GPIO_PIN_10;
     GPIO_Initure.Mode=GPIO_MODE_AF_PP;          //复用
     GPIO_Initure.Pull=GPIO_NOPULL;
     GPIO_Initure.Speed=GPIO_SPEED_HIGH;         //高速
     GPIO_Initure.Alternate=GPIO_AF14_LTDC;      //复用为LTDC
     HAL_GPIO_Init(GPIOF,&GPIO_Initure);

     //初始化PG6,7,11
     GPIO_Initure.Pin=GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_11;
     HAL_GPIO_Init(GPIOG,&GPIO_Initure);

     //初始化PH9,10,11,12,13,14,15
     GPIO_Initure.Pin=GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|\
                      GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
     HAL_GPIO_Init(GPIOH,&GPIO_Initure);

     //初始化PI0,1,2,4,5,6,7,9,10
     GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5|\
                      GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_9|GPIO_PIN_10;
     HAL_GPIO_Init(GPIOI,&GPIO_Initure);
}

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值