STM32LCD实验
在本次实验中,我们成功验证了LCD例程,由此可表现出STM32驱动LCD的可行性,并且成功实现了在LCD显示屏上显示当前LED花式的名称,其在开发板上的验证也符合预期。这标志着在这次实验中,我掌握了 LCD 模块的硬件接口与驱动原理、掌握了STM32的LCD的配置方法。并且我在实验过程中也对于嵌入式系统的开发流程更加熟悉,嵌入式编程能力和调试与优化能力也进一步增强。除此之外,我还深入理解了LCD在
一、实验目的
1、STM32CubeMX在外部中断实验(点此可进入)基础上,增加PC0-PC7、PB9、PB8、PB5、PA8为 LCD 输出引脚,生成 MDK工程文件和外设初始化代码。
2、验证LCD例程。
3、MDK 工程文件要求:实验三基础移植例程的 LCD 驱动函数;程序运行过程中,LCD 显示当前的流水灯花式。
4、用实验板(STM32CubeMX的HCLK时钟设置为80M)验证。
二、软硬件环境
1.Java Run Time Environment (JRE);
2.STM32CubeMX软件;
3.Keil-MDK;
4.STM32G431RBTx开发板。
三、项目实现
1、STM32CubeMX生成Keil5工程文件和外设初始化代码
(1)配置LCD相关引脚:将PC0-PC7、PB9、PB8、PB5、PA8配置为输出模式,并且为其打上对应的用户标签。PC8-PC15这八个引脚在配置LED时已经配置过,因为与LCD共用,因此不用再重新配置。如下:

(2)点击“Generate Code”生成工程代码。
2、Keil调试、下载代码
(1)要求程序流程图:

(2) 找到LCD相关例程文件:在提供的资料包中,找到LCD的相关例程文件夹(“HAL_06_LCD”文件夹),打开其Keil的MDK工程文件。
(3)添加LCD的驱动文件以及头文件:在“HAL_06_LCD”文件夹中的“Inc”和“Src”文件夹中分别找到“fonts.h”、“lcd.h”以及“lcd.c”这三个文件,并将其添加到自己的工程中。添加结果如下:


(4)编写相关代码:将资料包中的MDK文件的LCD相关例程复制到自己的工程中,且还要加上#include "lcd.h"。并且在按键函数以及中断函数中的对应位置,编写LCD_DisplayStringLine函数,使其对应的LED花式名称可以在LCD显示屏中显示出来。如下:



(5)编译代码,若代码无误,便可下载代码。
3、开发板上检验
在开发板上检验PB1与PB2的中断功能,并且确认按键以及中断对应的LED灯花式都可正确实现,对应的花式名称也可在LCD中显示出来。
4、相关代码
- LCD例程
//LCD LCD_Clear(Blue); LCD_SetBackColor(Blue); LCD_SetTextColor(White); LCD_DisplayStringLine(Line0, (uint8_t *)" "); LCD_DisplayStringLine(Line1, (uint8_t *)" "); LCD_DisplayStringLine(Line2, (uint8_t *)" LCD Test "); LCD_DisplayStringLine(Line3, (uint8_t *)" "); LCD_DisplayStringLine(Line4, (uint8_t *)" "); LCD_SetBackColor(White); LCD_SetTextColor(Blue); LCD_DisplayStringLine(Line5, (uint8_t *)" "); LCD_DisplayStringLine(Line6, (uint8_t *)" HAL LIB "); LCD_DisplayStringLine(Line7, (uint8_t *)" "); LCD_DisplayStringLine(Line8, (uint8_t *)" @80 "); LCD_DisplayStringLine(Line9, (uint8_t *)" ");
- 花式1和花式4
while (1) { switch(key_READ()){ /*Key query*/ case 1: LCD_DisplayStringLine(Line6, (uint8_t *)" left_loop "); LED_OFF(GPIO_PIN_All); HAL_Delay(100); while(key_READ()==1) { left_loop(); } break; // case 2: // while(key_READ()==2) // right_loop(); // break; // case 3: // LED_ON(LED1_Pin|LED3_Pin|LED5_Pin|LED7_Pin); // LED_OFF(LED2_Pin|LED4_Pin|LED6_Pin|LED8_Pin); // HAL_Delay(100); // while(key_READ()==3) // { // /*flash half*/ // LED_Toggle(LED6_Pin|LED7_Pin|LED8_Pin|LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin|LED5_Pin); // HAL_Delay(500); // } // break; case 4: LCD_DisplayStringLine(Line6, (uint8_t *)" flash "); while(key_READ()==4) { /*flash all*/ LED_Toggle(LED6_Pin|LED7_Pin|LED8_Pin|LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin|LED5_Pin); HAL_Delay(300); } break; } /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ }
- 花式2和花式3
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { static uint8_t i,j; if(GPIO_Pin == GPIO_PIN_1) { LCD_DisplayStringLine(Line6, (uint8_t *)" right_loop "); LED_OFF(GPIO_PIN_All); HAL_Delay(100); for(i=0;i<8;i++) { right_loop(); } } if(GPIO_Pin == GPIO_PIN_2) { LCD_DisplayStringLine(Line6, (uint8_t *)" flash_half "); LED_ON(LED1_Pin|LED3_Pin|LED5_Pin|LED7_Pin); LED_OFF(LED2_Pin|LED4_Pin|LED6_Pin|LED8_Pin); HAL_Delay(100); for(j=0;j<8;j++) { LED_Toggle(LED6_Pin|LED7_Pin|LED8_Pin|LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin|LED5_Pin); HAL_Delay(500); } } }
四、实验效果
LCD
五、总结
在本次实验中,我们成功验证了LCD例程,由此可表现出STM32驱动LCD的可行性,并且成功实现了在LCD显示屏上显示当前LED花式的名称,其在开发板上的验证也符合预期。
这标志着在这次实验中,我掌握了 LCD 模块的硬件接口与驱动原理、掌握了STM32的LCD的配置方法。并且我在实验过程中也对于嵌入式系统的开发流程更加熟悉,嵌入式编程能力和调试与优化能力也进一步增强。除此之外,我还深入理解了LCD在实际应用中的重要性。后续可以进一步探索LCD与其他外设的协同工作,以构建更高效、更方便的嵌入式系统。
更多推荐



所有评论(0)