源代码基于正点原子。探索者原理图。很久没有用过正点原子的底层了
在配置好后注意IO口是否和原理图接法一致。
TFT的背光高电平点亮。
RST复位引脚与32的复位引脚相连,上电复位。
Chip Select 不同引脚选择的 NEx不同。
存储类型接口按图中选择即可。
LCD Register Select 根据引脚选择
Data 数据位,D0~D15共有16个
一个读一个写时序配置寄存器。
我这里的主频设置为168M 则HCLK=1/168M=6ns 再根据芯片手册的驱动时序计算。地址建立时钟周期为90ns,90/6=15.
生成工程。
先把工程原本的u8,u16等统一替换成库文件原本的uint,也可以再自行typedef定义一遍。
地址根据NE4的地址,如果换到其他需要修改
删除lcd.c中的一些初始化函数和代码。这些已经在fsmc.c和gpio.c中初始化好了。
删除至红框中的函数,延时函数替换为HAL_Delay。少加这个可能会导致外设初始化失败,我之前测试没有显示文字内容。
不需要串口打印可以自行屏蔽,增加变量进入debug模式查看id。
这里也要替换下自己的代码风格。可以删除,因为初始化io口时已经为高电平。微秒函数由于在cm4芯片中有DWT
void DWT_Init(void)
{
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; // ʹÄÜDWTÍâÉè
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk ; // ʹÄÜCortex-M DWT CYCCNT¼Ä´æÆ÷
DWT->CYCCNT = 0; // DWT CYCCNT¼Ä´æÆ÷¼ÆÊýÇå0
}
void delay_us(uint32_t us) {
volatile uint32_t cycles = (SystemCoreClock/1000000L)*us;
volatile uint32_t start = DWT->CYCCNT;
do {
} while(DWT->CYCCNT - start < cycles);
}