STM32 F407探索者移植正点原子LCD例程(CubeMx)

这篇具有很好参考价值的文章主要介绍了STM32 F407探索者移植正点原子LCD例程(CubeMx)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

正点原子LCD移植教程

先说明本次实验所使用的硬件型号,本次实验使用正点原子F407探索者V3.4版本,屏幕尺寸为4.3寸 TFTLCD。

本文章主要讲解如何移植正点原子的官方LCD代码,并不涉及太多理论知识。然后,官方的LCD代码应该是更新过了,因为之前也移植过一次其他板子的,好像也不是酱紫,所以大家看到有些教程照着移植不能成功,便抽时间写一下教程,希望对大家有所帮助。

进入正题,首先打开CubeMx,本次省略了芯片选择,时钟配置、调试接口、以及文件保存等配置,如有需要可看上一个教程。

完成基础配置后,首先配置串口1,这一步是为了printf能正常使用

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

接下来配置FSMC,如图

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

首先Chip Select与LCD Register Select的选择需要根据板子来,如果读者是其他型号板子需查看原理图LCD部分,然后内存类型选择LCD Interface,数据选择16位,接下来需要继续配置下面的一些参数,这时需参考例程参数配置,首先打开正点原子官方LCD例程,打开之后先进行编译,然后进入LCD初始化函数,如图

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

如出现这种情况

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

也不用着急,打开魔术棒进行设置,如图进行设置后再点击编译即可进入

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

进入lcd_init函数后,下滑找到图示部分

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

这时我们需要根据此参数进行LCD配置

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

再继续填写参数,如图各项数据对应已用箭头指示好,方便其他型号的板子也可根据教程移植

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

填写完参数后继续配置LCD的背光引脚,查看原理图选择背光引脚,如图

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

配置好之后点生成代码,之后打开工程文件夹目录

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

将正点原子官方的LCD复制到我们的工程目录下,如图

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

文件存放如图

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

打开Keil将lcd.c文件添加到工程进来

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

再点击编译,会发现开始出现报错,不用着急,这是正常现象,在左边文件栏打开lcd.c文件,将头文件添加部分更改成图示添加方式

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

代码如下:

#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,如图

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

再点击编译,打开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;

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

点击编译,打开lcd_ex.c文件,修改头文件添加,删除delay.h文件,添加main.h文件,如图

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

这时如果编译会看到报的错误是没有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);

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

将所有delay_us更改完之后,继续更改delay_ms函数,继续刚刚的操作搜索delay_ms函数,再跳转对应的位置修改,注意,刚刚的delay_us函数是微秒(us)级别的延时,更改是用HAL_Delay(1)替换,现在更改的delay_ms函数只需替换前面的名字,即将delay_ms更换成HAL_Delay即可

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

修改完后进行编译的话可以看到已经没有此类错误,但仍有其他错误需要修改

继续,打开main.c文件,在图示位置添加头文件、

#include "lcd.h"

#include "stdio.h"

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

再打上lcd_init();初始化函数,如图

lcd_init();

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

之后右键或者选中按F12跳转进入lcd_init函数,在该函数中,从第一句代码到HAL_Delay(50)这一句;中间的代码,全部删除,只保留

FSMC_NORSRAM_TimingTypeDef fsmc_write_handle;

这句代码,删除完毕如图

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

接下来往上滑,将lcd_init上方的HAL_SRAM_MspInit函数整个删除,如图

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

这时点击编译已经没有错误了,到这里已经快完成了,再修改一下最后几个地方,在lcd_init函数最后,我们修改一下背光引脚,第一种方式可直接将LCD_BL(1);  替换为

HAL_GPIO_WritePin(LCD_BL_GPIO_Port, LCD_BL_Pin, GPIO_PIN_SET);

或者进入LCD_BL里修改引脚定义,第二种方式如图

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

在这个移植过程中,复制过来的lcd文件中定义的背光引脚跟原理图一样,若操作过程中发现其他例程若不一样如图修改即可。

接下来重定向一下串口,打开usart.c文件,首先在上方添加#include "stdio.h"头文件如图

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

再下滑到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;

}

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

再打开魔术棒,勾选Use Micro LIB

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

        至此,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成功点亮。

stm32cubemx探索者 stm32f407驱动lcd,嵌入式学习,stm32,嵌入式硬件,单片机

        最后说几个需要注意的点,在CubeMx中生成的文件中添加头文件,需要按教程所示在注释Begin与End之间添加,否则下次在CubeMx重新生成的话代码会被清除;然后注意看教程中的步骤,漏了某个步骤都可能导致失败,可通过编译报错那里检查。

希望本教程能对屏幕前的各位有所帮助,教程中的图片看起来有点糊是被CSDN压缩了一下,大家将就看一下,有问题欢迎留言探讨。文章来源地址https://www.toymoban.com/news/detail-854773.html

到了这里,关于STM32 F407探索者移植正点原子LCD例程(CubeMx)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包