stm32 2.4寸 TFT 触摸屏STM32驱动程序 2.4inch Arduino Display

stm32 2.4寸 TFT 触摸屏STM32驱动程序 2.4inch Arduino Display

今日为准备一项比赛,选购了一款2.4寸 8位并口通信的TFT触摸屏,此屏幕原本是专为arduino设计的,但同型号的屏幕都要四五十的价格,此款屏幕某宝仅需20出头,非常划算。欣喜之下果断购入。
2.4寸TFT触摸屏在这里插入图片描述
买来是打算用STM32进行开发的,卖家也提供了STM32的测试例程,但是结果很令人痛疼,屏幕所有显示均是镜像的,这就非常尴尬了。使用arduino UNO测试,显示正常,但是用51 和32 测试,屏幕显示均是镜像的,非常令人抓狂。看了下卖家提供的数据手册近四百页,还是英文的,这也太不友好了。在这里插入图片描述
在这里插入图片描述
本着钱也花了,不能浪费的精神,(主要是这款屏幕性价比太高了,8位并口通信,占用资源少,刷屏速度快)于是硬着头皮开始了漫长的修改屏幕驱动之路。
经过实验测试,屏幕整体的显示完全镜像,(正常的屏幕原点(0,0)在左上角扫描是从左往右,从上到下,使用51或32时原点在右上角,扫描方式为,从右到左,从上到下)心想,问题应该出在了屏幕初始化上,但历程中并无详细注释,无法得知是哪条指令控制屏幕显示方式,于是开始了苦逼的阅读数据手册之旅,经过一天一夜的苦战,并阅读对比arduino驱动源码,最后终于让我找到了问题所在,并且完美的修改了屏幕驱动。
现在可以实现正常显示,屏幕旋转显示。
在这里插入图片描述
在这里插入图片描述
目前只修改了STM32F103RCT6的驱动文件,32其他型号可参考本修改例程,主要参考主函数LCD初始化后添加的两句设置命令,和屏幕旋转函数。
后续可能会继续修改51版本的,如果有需求的话。
修改底层驱动花了不少时间,这里只贴CSDN下载链接,不直接放详细修改位置
修改不易,确保能用,主要是换点积分,不喜勿喷。
修改后的例程下载链接:
https://download.csdn.net/download/qq_43786163/15897108

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ArduinoSTM32都是常用的单片机开发板,用于各种电子项目和嵌入式系统的开发。下面我将用300字介绍如何使用这两种开发板编写按键长按和短按的程序。 对于Arduino开发板,可以使用内置的库函数来实现按键长按和短按的功能。首先,需要通过数字IO口连接一个机械按键并设置为输入模式。然后,在程序中设置一个计时器,用来检测按键的按下时间。通过判断按键按下的持续时间来确定是长按还是短按。 以下是Arduino的示例代码: ```Arduino const int buttonPin = 2; // 连接按键的数字IO口 int buttonState = 0; // 按键状态 unsigned long buttonTimer = 0; // 按键计时器 bool isLongPress = false; // 是否长按 void setup() { pinMode(buttonPin, INPUT); Serial.begin(9600); } void loop() { buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { if (buttonTimer == 0) { buttonTimer = millis(); // 记录按下的起始时间 } } else { if (buttonTimer != 0) { if (millis() - buttonTimer > 1000) { isLongPress = true; } else { isLongPress = false; } buttonTimer = 0; // 清空计时器 } } if (isLongPress) { Serial.println("Button long press"); } else { Serial.println("Button short press"); } delay(100); // 延时100毫秒 } ``` 对于STM32开发板,可以使用CubeMX和HAL库来实现按键长按和短按的功能。首先,在CubeMX中配置按键对应的GPIO口,并设置为输入模式。然后,在程序中使用HAL库提供的函数来检测按键的状态和按下时间。通过判断按键按下的持续时间来确定是长按还是短按。 以下是STM32的示例代码: ```C #include "main.h" #include "stdio.h" #include "stm32f1xx_hal.h" GPIO_TypeDef* BUTTON_GPIO_Port = GPIOA; uint16_t BUTTON_Pin = GPIO_PIN_0; uint32_t buttonTimer = 0; _Bool isLongPress = 0; void SystemClock_Config(void); static void MX_GPIO_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); while (1) { if (HAL_GPIO_ReadPin(BUTTON_GPIO_Port, BUTTON_Pin) == GPIO_PIN_SET) { if (buttonTimer == 0) { buttonTimer = HAL_GetTick(); } } else { if (buttonTimer != 0) { if (HAL_GetTick() - buttonTimer > 1000) { isLongPress = 1; } else { isLongPress = 0; } buttonTimer = 0; } } if (isLongPress) { printf("Button long press\n"); } else { printf("Button short press\n"); } HAL_Delay(100); } } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /**Configure the main internal regulator output voltage */ __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /**Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) { Error_Handler(); } } static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_AFIO_CLK_ENABLE(); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } ``` 以上就是使用ArduinoSTM32开发板编写按键长按和短按程序的方法。你可以根据自己的需求进行修改和扩展。希望对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值