STM32CubeMX 移植TFTLCD

源代码基于正点原子。探索者原理图。很久没有用过正点原子的底层了

 在配置好后注意IO口是否和原理图接法一致。

 

TFT的背光高电平点亮。 

 RST复位引脚与32的复位引脚相连,上电复位。

Chip Select 不同引脚选择的 NEx不同。

存储类型接口按图中选择即可。

LCD Register Select  根据引脚选择

Data 数据位,D0~D15共有16个

 一个读一个写时序配置寄存器。

我这里的主频设置为168M 则HCLK=1/168M=6ns 再根据芯片手册的驱动时序计算。地址建立时钟周期为90ns,90/6=15.

生成工程。

先把工程原本的u8,u16等统一替换成库文件原本的uint,也可以再自行typedef定义一遍。

 地址根据NE4的地址,如果换到其他需要修改

 

 删除lcd.c中的一些初始化函数和代码。这些已经在fsmc.c和gpio.c中初始化好了。

 

删除至红框中的函数,延时函数替换为HAL_Delay。少加这个可能会导致外设初始化失败,我之前测试没有显示文字内容。

不需要串口打印可以自行屏蔽,增加变量进入debug模式查看id。

 

 这里也要替换下自己的代码风格。可以删除,因为初始化io口时已经为高电平。微秒函数由于在cm4芯片中有DWT

void DWT_Init(void)
{
	CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;	// ʹÄÜDWTÍâÉè
	DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk ; 					// ʹÄÜCortex-M DWT CYCCNT¼Ä´æÆ÷
	DWT->CYCCNT = 0; 																// DWT CYCCNT¼Ä´æÆ÷¼ÆÊýÇå0
}

void delay_us(uint32_t us) {
		volatile uint32_t cycles = (SystemCoreClock/1000000L)*us;
		volatile uint32_t start = DWT->CYCCNT;
		do  {
		} while(DWT->CYCCNT - start < cycles);
}

 

 

 

 

 

 

 

 

 

### STM32CubeMX 中配置和移植 LCD 显示的方法 #### 使用 STM32CubeMX 进行 LCD 驱动程序初始化设置 STM32CubeMX 是一款用于简化基于 Arm® Cortex® 的 ST 微控制器项目的图形化工具。对于 STM32F407 而言,在该环境中可以方便地完成 LCD 屏幕的方向调整以及触摸屏的支持功能配置[^1]。 为了实现上述目标,需按照如下方式操作: - **启动并打开 STM32CubeMX** 打开软件后加载对应的微控制单元型号(如 STM32F407),之后进入外设配置界面。 - **选择合适的接口** 对于大多数 TFT-LCD 来说,通常会采用 FSMC 或者 SPI 接口来连接到 MCU 上;而如果涉及到电容式触控,则可能还需要额外启用 I2C/SPI 总线以便与 TS 控制器通信。 - **配置 LCD 参数** 在 `Pinout & Configuration` 页面找到相应的 GPIO 和总线资源分配给所选的显示模块,并设定好工作模式及时序参数等细节选项。此外还可以指定是否开启硬件层支持等功能特性。 - **生成初始化代码框架** 完成以上步骤之后点击菜单栏中的 “Project” -> “Generate Code”,此时 CubeMX 将自动生成一系列必要的源文件供后续开发使用,其中包括但不限于 lcd.c 及其头文件定义部分。 在生成的基础之上,可以通过编辑特定函数来自定义更多高级行为,例如更改显示屏旋转角度即是在 lcd.c 文件内的 `LCD_Display_Dir()` 函数处进行相应数值赋值即可改变默认方向。 ```c // 修改屏幕默认方向 void LCD_SetDisplayDirection(uint8_t dir){ /* USER CODE BEGIN LCD_SetDisplayDirection */ switch(dir){ case 0: // Portrait mode break; case 1: // Landscape mode break; default: break; } } ``` #### 关联问题处理机制说明 当遇到 USB 设备数据传输需求时,可通过编写类似下面这样的回调函数来进行高效的数据接收管理[^2]: ```c static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len) { /* USER CODE BEGIN CDC_Receive_FS */ HAL_UART_Transmit(&huart1,Buf,*Len,HAL_MAX_DELAY); return (USBD_OK); /* USER CODE END CDC_Receive_FS */ } ``` 此段代码展示了如何利用串口发送接收到的信息作为演示用途之一。 #### 维护项目结构的最佳实践建议 考虑到长期维护性和扩展性的考量因素,应当遵循良好的编程习惯保持清晰有序的工作空间布局。具体做法包括但不限于:合理规划目录层次关系、妥善保存中间产物副本以防意外丢失重要资料等内容[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随风飘零翼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值