本帖最后由 suncat0504 于 2024-7-6 15:20 编辑
在上次例程的基础上,这次加入SPI通讯的TFT显示屏。开发板上已经提供了一个SPI接口J6,依次为AN、RST、CS、SCK、MISO、MOSI、3V3、GND。我手里的TFT屏提供的接口GND、VDD、SCL、SDA、RST、DC、CS、BLK。 对接如下: 开发板 TFT显示屏 ------------------------------------------------------ RST(P1_3) RST(复位) CS(P3_23) CS(片选) SCK(P3_21) SCL(时钟脉冲) MISO(P3_22) MOSI(P3_20) SDA(数据) P0_10 RS(命令、数据) 3V3 VDD GND GND ------------------------------------------------------ 相关电路:
因为TFT显示屏只是单向接收数据,所以不需要使用MOSI引脚,所以悬空。 显示处理代码是从其它地方移植过来的,之前用的是模拟方式。所以这次虽然使用了SPI接口,但依旧使用模拟方式驱动。将程序移植过来以后,要根据FRDM-MCXN947开发板进行修改,主要就是GPIO口的初始化,高低电平的设置,其它处理逻辑完全不用改动。不过在移植之前需要处理下时间函数,以方便处理代码中的延迟处理。上次的程序中有SysTick_Handler函数,准备在这个基础上进行拓展。
之前的周期显然是不适合做ms级的处理,所以需要修改调整。因为代码(BOARD_BootClockFRO12M();)的设置,开发板使用12M的主频工作,所以主程序中SysTick_Config(12000000UL);这句设置的处理周期为1S。把数据调小,改成SysTick_Config(12000UL);,理论上Handler的周期应该变成1ms。改完代码,编译,下载,用示波器查看P0_10和P0_27的变化,得到如下结果: 确实变成了1ms。 然后在这个基础上,加入延迟处理: void SysTick_Handler(void) { if (g_delay_ms>0) { g_delay_ms--; } } void delay_ms(uint32_t ms) { g_delay_ms = ms; while(g_delay_ms>0); } 主程序改为: int main(void) { /* Board pin init */ CLOCK_EnableClock(kCLOCK_Gpio0); BOARD_InitPins(); BOARD_BootClockFRO12M(); /* Initialize the systick module. */ //SysTick_Config(12000000UL); SysTick_Config(12000UL); LED_RED_INIT(LOGIC_LED_OFF); LED_GREEN_INIT(LOGIC_LED_ON); while (1) { delay_ms(500); LED_GREEN_TOGGLE(); } } 预想中的绿色LED闪烁结果,竟然没有出现。很奇怪啊。 改成如下模式就没有问题: int main(void) { /* Board pin init */ CLOCK_EnableClock(kCLOCK_Gpio0); BOARD_InitPins(); BOARD_BootClockFRO12M(); /* Initialize the systick module. */ //SysTick_Config(12000000UL); SysTick_Config(12000UL); LED_RED_INIT(LOGIC_LED_OFF); LED_GREEN_INIT(LOGIC_LED_ON); while (1) { g_delay_ms=1000; while(1) { if (g_delay_ms>500) { LED_GREEN_ON(); } else { LED_GREEN_OFF(); } if (g_delay_ms==0) { break; } } } } 不知道为什么前面的处理会有问题。在不断调试的过程中,终于发现,还是以前遇到的那个问题,就是在死循环中如果没有什么有效的处理代码,这个循环丝毫不起作用。必须追加一行有效代码,那个延迟处理才能正常运转。不过在把变量g_delay_ms的生命中加上volatile修饰符之后,《volatile uint32_t g_delay_ms = 0;》,问题也被解决了。唉,这个问题,真是搞不懂。估计和编译器的设置有关。 移植过程中,一定要注意,除了IO口的初始化,一定不要忘了设置IO的输出方向。 在移植完TFT的程序后,编译、测试,
|