前言
STM32CubeMX用起来太舒服了,效率嘎嘎高,在学习正点原子的战舰V3开发板,但是他们的代码库都不是用Mx生成的,简单些的案例练习倒是无所谓,但是像用到TFTLCD这种复杂点的案例,在配置案例时还是想移到Mx上编辑,所以就有将正点原子的lcd库,修改到可以在Keil+Mx上使用的了。
环境
模块:正点原子战舰V3,自带的4‘3TFTLCD电容屏
开发板:正点原子战舰V3(STM32F103ZET6)
案例的代码环境:Keil5+STM32CubeMX生成的HAL库
步骤
文章末尾会把,配置好的STM32CubeMX工程模板,和可运行案例一并分享出来的,当然了,下述也有图文步骤。
STM32CubeMX配置
-
主频:配置为72M
如图在SYS中,
High Speed Clock (HSE)
配置为 Crystal/Ceramic Resonator,选择外部高速晶振。然后点击箭头指向处,进行下一张图的可视化配置。 -
GPIO配置:在4‘3TFTLCD模块中还有需要GPIO来输出电平控制背光。
选择PB0引脚,设置成输出模式。然后命名为LCD_BL,这样到时候生成文件时,这个名称会有宏定义,控制该引脚,当然也不是必需要命名的,只是更加规范些。
-
FSMC配置
我对FSMC也是了解一点,配置参数也是参考正点原子和网上的。大家感兴趣,还想提刷新处理的话,也许可以学学看怎么改哈。
-
输出文件
完成下述简单的配置后就能输出文件,到keil中配置了。
Keil5编写
-
复制正点原子的TFTLCD案例工程中的lcd库,到刚才创建的工程中。然后添加
编译文件
,编译路径
-
lcd.h中的修改
-
删除
#include "sys.h"
,添加#include "main.h"
-
变量类型的修改
因为该lcd库中定义的变量类型为
u8
,u16
,u32
,vu8
,vu16
,vu32
,在HAL中没有,可以有以下两种方法修改:-
使用
Ctrl
+F
中的替换,进行全局替换。 -
使用
typedef
来定义类型typedef uint8_t u8; typedef uint16_t u16; typedef uint32_t u32; typedef volatile u8 vu8; typedef volatile u16 vu16; typedef volatile u32 vu32;
-
-
背光引脚的控制
大概在55行上下的位置,下面的第一句是原来的。第一句是添加新的。
//#define LCD_LED PBout(0) //LCD背光 PB0 #define LCD_LED(value) HAL_GPIO_WritePin(LCD_BL_GPIO_Port, LCD_BL_Pin, (GPIO_PinState)value);
对应的lcd.c文件中(大概在2087行,建议用搜索去翻),背光的控制函数也应该改为如下:
//LCD_LED = 1; //点亮背光 LCD_LED(1);
-
注释掉SRAM句柄,大概在33行
//extern SRAM_HandleTypeDef TFTSRAM_Handler; //SRAM句柄(用于控制LCD)
-
-
lcd.c中的修改
-
删除或注释,如下用不到没有的库文件,和打印函数。
//#include "usart.h" //#include "delay.h"
-
导入或替换延时函数
替换。将原本毫秒级的
delay_ms
函数全部替换为HAL库有的HAL_Delay
函数,然后是微秒级的,因为HAL中没有,所以暂时先重写函数,统一替换成1ms的,后续大家要是引入了微秒级延时也好替换。// 重写微妙级函数 void delay_us(uint32_t nus) { HAL_Delay(1); }
-
-
main.c
主函数中就是正点原子案例中的演示演示函数了,就不在介绍了
现象
案例正常运行
工程
我在工程中用的是DAP仿真器,可能大家用的是JLINK之类的,记得在工程中切换。
链接包含资料:Keil5工程代码*1,STM32CubeMX工程模板*1
链接:https://pan.baidu.com/s/1jMgEB5p37iXZWGpbcc8wiw 提取码:016u