正点原子LCD移植教程
先说明本次实验所使用的硬件型号,本次实验使用正点原子F407探索者V3.4版本,屏幕尺寸为4.3寸 TFTLCD。
本文章主要讲解如何移植正点原子的官方LCD代码,并不涉及太多理论知识。然后,官方的LCD代码应该是更新过了,因为之前也移植过一次其他板子的,好像也不是酱紫,所以大家看到有些教程照着移植不能成功,便抽时间写一下教程,希望对大家有所帮助。
进入正题,首先打开CubeMx,本次省略了芯片选择,时钟配置、调试接口、以及文件保存等配置,如有需要可看上一个教程。
完成基础配置后,首先配置串口1,这一步是为了printf能正常使用
接下来配置FSMC,如图
首先Chip Select与LCD Register Select的选择需要根据板子来,如果读者是其他型号板子需查看原理图LCD部分,然后内存类型选择LCD Interface,数据选择16位,接下来需要继续配置下面的一些参数,这时需参考例程参数配置,首先打开正点原子官方LCD例程,打开之后先进行编译,然后进入LCD初始化函数,如图
如出现这种情况
也不用着急,打开魔术棒进行设置,如图进行设置后再点击编译即可进入
进入lcd_init函数后,下滑找到图示部分
这时我们需要根据此参数进行LCD配置
再继续填写参数,如图各项数据对应已用箭头指示好,方便其他型号的板子也可根据教程移植
填写完参数后继续配置LCD的背光引脚,查看原理图选择背光引脚,如图
配置好之后点生成代码,之后打开工程文件夹目录
将正点原子官方的LCD复制到我们的工程目录下,如图
文件存放如图
打开Keil将lcd.c文件添加到工程进来
再点击编译,会发现开始出现报错,不用着急,这是正常现象,在左边文件栏打开lcd.c文件,将头文件添加部分更改成图示添加方式
代码如下:
#include "lcd.h"
#include "lcdfont.h"
#include "main.h"
#include "stdio.h"
#include "fsmc.h"
#include "lcd_ex.c"
添加完毕后再次点击编译,打开lcd.h文件,添加main.h,并删除sys.h,如图
再点击编译,打开main.h文件,在图示位置添加以下代码。
typedef uint32_t u32;
typedef uint16_t u16;
typedef uint8_t u8;
typedef __IO uint32_t vu32;
typedef __IO uint16_t vu16;
typedef __IO uint8_t vu8;
点击编译,打开lcd_ex.c文件,修改头文件添加,删除delay.h文件,添加main.h文件,如图
这时如果编译会看到报的错误是没有delay_ms或delay_us这两个函数,这是由于官方例程中自己定义了这两个函数,这里我们将代码中的这两个函数全部替换成HAL_Delay即可,首先替换delay_us,这个函数是us级别的延时,我们全部替换成HAL_Delay(1); 即可,如图,我们可以按下Ctrl+F,使用查找功能,在搜索框输入delay_us,之后查找全部,将其全部替换为HAL_Delay(1); HAL_Delay函数是以毫秒(ms)为单位的延时,故delay_us全部换成HAL_Delay(1);
将所有delay_us更改完之后,继续更改delay_ms函数,继续刚刚的操作搜索delay_ms函数,再跳转对应的位置修改,注意,刚刚的delay_us函数是微秒(us)级别的延时,更改是用HAL_Delay(1)替换,现在更改的delay_ms函数只需替换前面的名字,即将delay_ms更换成HAL_Delay即可
修改完后进行编译的话可以看到已经没有此类错误,但仍有其他错误需要修改
继续,打开main.c文件,在图示位置添加头文件、
#include "lcd.h"
#include "stdio.h"
再打上lcd_init();初始化函数,如图
lcd_init();
之后右键或者选中按F12跳转进入lcd_init函数,在该函数中,从第一句代码到HAL_Delay(50)这一句;中间的代码,全部删除,只保留
FSMC_NORSRAM_TimingTypeDef fsmc_write_handle;
这句代码,删除完毕如图
接下来往上滑,将lcd_init上方的HAL_SRAM_MspInit函数整个删除,如图
这时点击编译已经没有错误了,到这里已经快完成了,再修改一下最后几个地方,在lcd_init函数最后,我们修改一下背光引脚,第一种方式可直接将LCD_BL(1); 替换为
HAL_GPIO_WritePin(LCD_BL_GPIO_Port, LCD_BL_Pin, GPIO_PIN_SET);
或者进入LCD_BL里修改引脚定义,第二种方式如图
在这个移植过程中,复制过来的lcd文件中定义的背光引脚跟原理图一样,若操作过程中发现其他例程若不一样如图修改即可。
接下来重定向一下串口,打开usart.c文件,首先在上方添加#include "stdio.h"头文件如图
再下滑到usart.c文件最底部,添加如下代码:
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
再打开魔术棒,勾选Use Micro LIB
至此,LCD移植已经结束,接下来可以开始进行LCD显示操作了,前面操作过程中已经添加了lcd_init函数对LCD进行初始化,接下来直接调用显示函数即可,在正点原子LCD官方例程main函数中复制lcd显示代码,注意不同例程显示代码可能有所差别,本次代码如下:
lcd_show_string(10, 40, 240, 32, 32, "STM32", RED);
lcd_show_string(10, 80, 240, 24, 24, "TFTLCD TEST", RED);
lcd_show_string(10, 110, 240, 16, 16, "ATOM@ALIENTEK", RED);
由于该函数中包括了字体颜色设置,所以不需要在前面设置颜色。
编译下载到板子上,可看到LCD成功点亮。
最后说几个需要注意的点,在CubeMx中生成的文件中添加头文件,需要按教程所示在注释Begin与End之间添加,否则下次在CubeMx重新生成的话代码会被清除;然后注意看教程中的步骤,漏了某个步骤都可能导致失败,可通过编译报错那里检查。文章来源:https://www.toymoban.com/news/detail-854773.html
希望本教程能对屏幕前的各位有所帮助,教程中的图片看起来有点糊是被CSDN压缩了一下,大家将就看一下,有问题欢迎留言探讨。文章来源地址https://www.toymoban.com/news/detail-854773.html
到了这里,关于STM32 F407探索者移植正点原子LCD例程(CubeMx)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!