本帖最后由 lulugl 于 2024-4-29 08:24 编辑
【目的】
使用雅特力的图形化配置工具AT32 Work Bench V1.0.07,这配置工程,并驱动LCD屏ST7735。【开发软件】
1、AT32 Work Bench V1.0.07
2、MDK 5.39
【实现步骤】
1、打开AT32 Work Bench V1.0.07。
2、新建基于AT32F402RCT7的工程。
3、配置SPI1,为主机双线单向只发模式。因为ST7735,没有读显存,所只需要MOSI、SCK就行了,为了节约IO,我把CS直接接地,REST直接接NRST,这样只需要3根线就可以驱动了。
配置的IO如下:
配置PA4为DC即数据、命令切换IO。
4、配置代码输出,首先要重命名自己的工程名称,然后按指导配置输出目录、还有就是固件包所在目录。
5、为了printf日志输出,我这里直接引用SDK中的at32f402_405_board。把他复制到工程中,并导入工程分组。
同时把头文件添加进工程:
在main.c中添加进boad.h的头文件,并添回测试如下:
/* add user code begin 2 */
printf("usart printf example: retarget the c library printf function to the usart\r\n");
/* add user code end 2 */
下载进主板,可以看到串口助手可以正常输出了:
【移植ST7789】
1、首先找到原来在其他板子上可以运行的st7735驱动:
2、把他复制进工程文件夹中,并添加进工程分组lcd,同时添加头文件到工程中。
3、打开lcd_st7735,添加头文件的引用:
#include "at32f402_405_board.h"
#include "at32f402_405_wk_config.h"
4、修改DC高低电平的宏定义:
#define LCD_DC_LOW() gpio_bits_reset(TFT_DC_GPIO_PORT, TFT_DC_PIN) //DC data command select
#define LCD_DC_HIGH() gpio_bits_set(TFT_DC_GPIO_PORT, TFT_DC_PIN)
5、修改好这个宏后,我修改了spi的发送函数。数据也拿到了,但是就是点不亮。所以spi硬件的先告一段落,先用软件spi来点亮先。【回炉】
1、重新定义一下IO除了BLK直接接VCC,我把RESET、CS都给加上了,在图形化配置工具中定义GPIO如下:
重新生成工程,这样AT32 Work Bench在at32f402_405_wk_config.h中就对GPIO进行了宏定义。
同时在at32f402_405_wk_config.c中,也对GPIO进行了初始化:
2、修改输出高低电平的宏定义:
/*-----------------LCD端口定义----------------*/
/*
GND GND
3.3V VCC
PA5 SCL
PA7 SDA
PA4 CS(片选)
PA0 ERS(复位)
PA1 DC(命令数据选择)
VCC BL(背光)
*/
#define LCD_RES_LOW() gpio_bits_reset(TFT_RST_GPIO_PORT, TFT_RST_PIN)//RES rst ////
#define LCD_RES_HIGH() gpio_bits_set(TFT_RST_GPIO_PORT, TFT_RST_PIN)
#define LCD_DC_LOW() gpio_bits_reset(TFT_DC_GPIO_PORT, TFT_DC_PIN) //DC data command select
#define LCD_DC_HIGH() gpio_bits_set(TFT_DC_GPIO_PORT, TFT_DC_PIN)
//#define LCD_BLK_LOW() GPIO_WritePin(CW_GPIOA, GPIO_PIN_12 , GPIO_Pin_RESET) //BLK
//#define LCD_BLK_HIGH() GPIO_WritePin(CW_GPIOA, GPIO_PIN_12 , GPIO_Pin_SET)
#define LCD_CS_LOW() gpio_bits_reset(TFT_CS_GPIO_PORT, TFT_CS_PIN) //CS
#define LCD_CS_HIGH() gpio_bits_set(TFT_CS_GPIO_PORT, TFT_CS_PIN)
#if SOFTWARE_SPI_ENABLE
#define LCD_SCLK_LOW() gpio_bits_reset(TFT_SCK_GPIO_PORT, TFT_SCK_PIN) //SCL=SCLK
#define LCD_SCLK_HIGH() gpio_bits_set(TFT_SCK_GPIO_PORT, TFT_SCK_PIN)
#define LCD_MOSI_LOW() gpio_bits_reset(TFT_MOSI_GPIO_PORT, TFT_MOSI_PIN) //SDA=MOSI
#define LCD_MOSI_HIGH() gpio_bits_set(TFT_MOSI_GPIO_PORT, TFT_MOSI_PIN)
#endif
到此,基于st7735的驱动就移植完了,源码我会附到文后。
在main.c中添加st7735的头文件以及init、与test测试:
/* add user code begin 2 */
delay_init();
printf("usart printf example: retarget the c library printf function to the usart\r\n");
LcdTest();
/* add user code end 2 */
【实现效果】
【评测心得】
这次使用AT32F405来驱动LCD屏,虽然用SPI没有成功,后面我会找一下st7735的数据手册,有可能是极性没有设置对,因为我用逻辑分析仪抓了时序,波形是出来了的。总的来说,AT32 Work Bench给我的感觉就是使用起来非常的方便,相比ST的stm32cubMAX,AT32 Work Bench的启动速度要快,操作简单,这极大的方便了用户。
附工程源码:
AT32F405RCT7_ST7735.zip
(1.58 MB)
|