当前位置: 首页 > news >正文

2-1嵌入式进阶指南:P169H002 基于 ST7789T3 和 CST816D 驱动的 LCD 触摸显示屏开发手册(2)

基于P169H002的LCD 触摸显示屏的驱动板制作

学会驱动板制作就可以将LCD 触摸显示屏添加到你的任何项目中。
本教程覆盖全面,看完即可自己从0完成,包含了:
硬件: 原理图、PCB 、器件选型。
软件:新建工程、LCD底层驱动、触摸屏底层驱动、LVGL的UI界面。

本文是基于P169H002的LCD触摸显示屏的第二部分。
如果有需要可以点击下方链接跳转
前一节:第一部分:绘制原理图和PCB
后一节:第三部分:LCD屏幕驱动程序编写

第二部分:软件底层基础实现

本文使用的STM32F411RET6相关资料如下(需要可直接跳转):
1、Keil5的Device:STM32F4xx CMSIS Packs;
2、HAL库和RTOS:STM32CubeF4 MCU和MPU包;
3、参考手册:STM32F411xC/E 参考手册.PDF;

1、准备软件开发环境

①新建工程

(1)点击下载CMSIS包

在这里插入图片描述

(2)安装时的路径一定要在你的Keil安装路径之下

在这里插入图片描述

(3)新建工程选择芯片型号

在这里插入图片描述

②配置HAL库

建立好自己的工程文件之后,把从官方下载下来的STM32Cube MCU和MPU包中的配置HAL库需要的文件,粘贴复制到自己的工程中。
注:我的工程结构并不规范,但是这样便利性会更好,后期可以自己调整

(1)一级目录

在这里插入图片描述

(2)CMSIS
INC目录

在这里插入图片描述
一共33个文件

Src目录

在这里插入图片描述

(3)Hardware

这里放自己写的底层驱动加上Inc和Src即可。

(4)Library
Inc目录

在这里插入图片描述
要把 STM32F4XX_HAL_conf_template.h 重命名成 STM32F4XX_HAL_conf.h

Src目录

在这里插入图片描述
库文件大概加上就可以,如果你觉得工程体积太大可以只加需要用到的。

(5)LVGL

这个文件是LVGL的移植,具体操作在另一篇专门写LVGL移植的文章中。

③配置工程

Startup

在这里插入图片描述

CMSIS

在这里插入图片描述

library

在这里插入图片描述

Define的填写 和 头文件的包含

在这里插入图片描述
完成这些点击编译,完成后 0 Error(s), 0 Warning(s) 就是成功完成了开发环境的配置。

2、选择内部高速时钟

在main函数中的HAL_Init()之后为保证程序顺利运行,自己配置一次内部高数时钟。

uint32_t RCC_Init(void)
{RCC_OscInitTypeDef RCC_OscInitStructure;RCC_OscInitStructure.OscillatorType = RCC_OSCILLATORTYPE_HSI;RCC_OscInitStructure.HSIState = RCC_HSI_ON;             //开启HSI 16MHzRCC_OscInitStructure.PLL.PLLState = RCC_PLL_ON;         //开启PLLRCC_OscInitStructure.PLL.PLLM = 16;                     //PLL分频到1MHz,将输入时钟分频到 1~2MHz(PLL 最佳工作范围)RCC_OscInitStructure.PLL.PLLN = 200;                    //PLL倍频到200MHzRCC_OscInitStructure.PLL.PLLP = RCC_PLLP_DIV2;          //PLL分频到100Mhz,分频后作为 SYSCLK(CPU 主时钟)频率最高 100 MHzRCC_OscInitStructure.PLL.PLLQ = 4;                      //为 USB OTG、SDIO 等外设提供时钟RCC_OscInitStructure.PLL.PLLSource = RCC_PLLSOURCE_HSI; //PLL选择内部高速时钟源HAL_RCC_OscConfig(&RCC_OscInitStructure);RCC_ClkInitTypeDef RCC_ClkInitStructure;RCC_ClkInitStructure.AHBCLKDivider = RCC_SYSCLK_DIV1;   //HCLK  最高100MHzRCC_ClkInitStructure.APB1CLKDivider = RCC_HCLK_DIV2;    //PCLK1 最高50MHzRCC_ClkInitStructure.APB2CLKDivider = RCC_HCLK_DIV1;    //PCLK2 最高100MHzRCC_ClkInitStructure.ClockType = RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_HCLK  |RCC_CLOCKTYPE_PCLK1 |RCC_CLOCKTYPE_PCLK2;   //配置4条时钟线RCC_ClkInitStructure.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;HAL_RCC_ClockConfig(&RCC_ClkInitStructure,FLASH_LATENCY_3);/* 检查时钟频率 */uint32_t CLK[3] = {0};HAL_RCC_MCOConfig(RCC_MCO2,RCC_MCO2SOURCE_SYSCLK,RCC_MCODIV_2);SystemCoreClockUpdate();CLK[0] = HAL_RCC_GetHCLKFreq();CLK[1] = HAL_RCC_GetPCLK1Freq();CLK[2] = HAL_RCC_GetPCLK2Freq();return CLK[0];
}

因为内部高速时钟的稳定性不好,对环境温度和电压有一定要求,HAL_RCC_MCOConfig();这个函数通过参数的配置可以输出芯片内部的时钟频率,用示波器可以获取真实的时钟波形,然后通过RCC_OscInitStructure.HSICalibrationValue这个成员来微调HSI,来保持稳定可知的时钟频率。

像在文中的参数,有如下解释:
@param1:RCC_MCO2: Clock source to output on MCO2 pin(PC9).
@param2:RCC_MCO2SOURCE_SYSCLK: System clock (SYSCLK) selected as MCO2 source.
@param3:RCC_MCODIV_1: no division applied to MCOx clock
通过PC9把SYSCLK的时钟频率1分频的输出出来。
(这里要注意GPIO的最高输出速率,如果时钟频率超过了GPIO的最高速率,输出的波形会有错误)

3、通过USART进行调试

这里没有什么需要赘述的,简单的配置串口。
串口初始化

void UART_Debug_Init(void)
{UART_Debug.Uart.Instance = USART6;UART_Debug.Uart.Init.BaudRate = 9600;UART_Debug.Uart.Init.HwFlowCtl = UART_HWCONTROL_NONE;UART_Debug.Uart.Init.Mode = UART_MODE_TX_RX;UART_Debug.Uart.Init.OverSampling = UART_OVERSAMPLING_16;UART_Debug.Uart.Init.Parity = UART_PARITY_NONE;UART_Debug.Uart.Init.StopBits = UART_STOPBITS_1;UART_Debug.Uart.Init.WordLength = UART_WORDLENGTH_8B;HAL_UART_Init(&UART_Debug.Uart);
}void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{if(huart->Instance == USART6){/* 打开外设时钟 */__HAL_RCC_GPIOC_CLK_ENABLE();__HAL_RCC_USART6_CLK_ENABLE();/* 初始化GPIO */GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.Alternate = GPIO_AF8_USART6;GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;GPIO_InitStructure.Pin = GPIO_PIN_6;GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_MEDIUM;HAL_GPIO_Init(GPIOC,&GPIO_InitStructure);GPIO_InitStructure.Alternate = GPIO_AF8_USART6;GPIO_InitStructure.Mode = GPIO_MODE_INPUT;GPIO_InitStructure.Pin = GPIO_PIN_7;GPIO_InitStructure.Pull = GPIO_PULLUP;HAL_GPIO_Init(GPIOC,&GPIO_InitStructure);}
}

正常启动提示

int main(void)
{/* 初始化 */System_Init();UART_Debug_Init();/* 启动正常提示 */HAL_Delay(50);HAL_UART_Transmit(&UART_Debug.Uart,(uint8_t *)"STM32F411RET6 开机\r\n",18,100);while(1){}
}

准备工作成功完成
在这里插入图片描述

本文结语:如果觉得不错可以点赞收藏一下,没准哪天你就用到了。

http://www.dtcms.com/a/447479.html

相关文章:

  • 河北建设厅官方网站昆明网站建设价位
  • 网站源码破解ui设计培训班哪家好
  • 网站的切图是谁来做中山网站搭建
  • 怎么用手机自己做网站wordpress好看的背景
  • 在Ubuntu系统里格式化2TB的移动硬盘
  • 网站建设荣茂如何推广自己的店铺?
  • 怎么样自己做网站接订单网络推广建设期的网站
  • 做刷单网站违法吗建站的平台
  • 有没有教做衣服的网站创意灵感
  • 北斗GNSS位移监测系统在地质灾害预警中的实际应用与维护管理
  • 自有服务器怎么做网站备案1网站建设公司
  • 上海网站开发设计培训上海网站设计培训班
  • 制作网站流程购物网站排名2017
  • 兼职做美工摄影去哪个网站seo整站优化方案
  • BGP实验-路由优选
  • 做网站一定要虚拟主机吗wordpress音乐插件
  • 呼和浩特做网站公司wordpress设置静态访问不了
  • 人形机器人的发展历程、技术演进与未来图景
  • 合肥市公司网站建设美观网站建设物美价廉
  • 做网站怎么选关键词游戏开发需要学什么编程语言
  • 建设部网站王尚春做天猫网站设计难吗
  • 推荐广东中山网站建设姓名logo设计免费
  • 建设兼职网站目的logo设计公司在线生成
  • 怎样打开用sql做的网站自己怎么做免费网站空间
  • 平面设计案例网站app 制作
  • 流式事件与块响应接口设计流程拆解
  • VS2019如何获取C++标准库的版本
  • 商务网站规划建设与管理答案千里马招标网站
  • Source Insight 4.00.0148版本发布,微更新
  • 网站 可信验证android项目开发