因最近有做显示的需求,显示相关的代码比较复杂,而手头有一块正点原子的H750Minipro,所以花了一些时间移植正点原子的例程代码到自己的工程里。至于为什么要移植呢,是因为自己比较习惯用STM32CubeMX生成工程文件,文件中自带了硬件的初始化,而正点的初始化都是自己写的,所以需要自行移植其他部分的代码
首先,根据自己的型号,打开正点的例程(任何一个包括LCD显示和触摸功能的就可以)
我们需要手动移植的代码基本都在BSP里面了,首先需要对照着配置一下cubemx
led和key都没有用到,所以都不用管
打开mpu.c
可以看到这里是在配置MPU,相应地我们打开cubemx,也进行一样的配置
显示部分
随后是lcd.h ,不展开介绍了,这块根据自己LCD的型号和通信方式等配置就行了(下面是我的)
再看代码,自己选择合适的文件结构,然后新建lcd.c和lcd.h,移植函数和定义等(举例我的)
正点的代码是兼容多种lcd屏的,这样会导致代码有点冗余,所以我把跟自己型号无关的都删了(我的是NT35510)最终移植的函数如下:
触摸部分
需要移植的touch.c,gt9xxx.c(这个是我的触摸屏芯片型号对应的文件),ctiic.c(触摸屏芯片和单片机通过iic通信)
这里有一个坑,就是触摸用到的iic相关的IO口,不可以在cubemx中定义,因为有两个IO口在不同的文件中输入和输出的方向不同
最后移植的函数:
也有很多没用到的函数,这个自己判断就可以了
微秒级延时
hal库有一个自带的函数HAL_Delay(n)可以实现毫秒级延时,下面分享一个微秒级延时的小代码
首先开启一个定时器(主频为240M)
void TimerDelay_us(uint32_t nus)
{
uint16_t differ = 0xFFFF -nus - 5;
__HAL_TIM_SetCounter(&htim7, differ);
HAL_TIM_Base_Start(&htim7);
while (differ < 0xFFFF - 5)
{
differ = __HAL_TIM_GET_COUNTER(&htim7);
}
HAL_TIM_Base_Stop(&htim7);
}
就可实现1us的延时了