- void SPI1_Init(void)
- {
- GPIO_Config_T GPIO_InitStructure;
- RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_GPIOA);//使能GPIO时钟
- RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_SYSCFG);//使能系统配置控制器时钟
-
- GPIO_ConfigPinAF(GPIOA, GPIO_PIN_SOURCE_5, GPIO_AF_SPI1);// Config SPI1 PinAF
- GPIO_ConfigPinAF(GPIOA, GPIO_PIN_SOURCE_7, GPIO_AF_SPI1);// Config SPI1 PinAF
- GPIO_InitStructure.pin = GPIO_PIN_5|GPIO_PIN_7;
- GPIO_InitStructure.mode = GPIO_MODE_AF; //复用推挽输出
- GPIO_InitStructure.speed = GPIO_SPEED_100MHz;//速度
- GPIO_InitStructure.otype = GPIO_OTYPE_PP;
- GPIO_InitStructure.pupd = GPIO_PUPD_NOPULL;
-
- GPIO_Config(GPIOA, &GPIO_InitStructure); //初始化GPIOA
- GPIO_SetBit(GPIOA,GPIO_PIN_5|GPIO_PIN_7);
-
- SPI_Config_T SPI_InitStructure;
-
- RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_SPI1);//使能SPI1时钟
-
- SPI_ConfigStructInit(&SPI_InitStructure);
- SPI_InitStructure.direction = SPI_DIRECTION_1LINE_TX;//只发送模式
- SPI_InitStructure.mode = SPI_MODE_MASTER;//设置SPI工作模式:主机模式
- SPI_InitStructure.length = SPI_DATA_LENGTH_8B;//设置SPI数据大小:8位帧结构
- SPI_InitStructure.polarity = SPI_CLKPOL_HIGH;//串行同步时钟空闲时SCLK位高电平
- SPI_InitStructure.phase = SPI_CLKPHA_2EDGE;//串行同步时钟空第二个时钟沿捕获
- SPI_InitStructure.nss = SPI_NSS_SOFT;//NSS信号由硬件管理
- SPI_InitStructure.baudrateDiv = SPI_BAUDRATE_DIV_2;//波特率预分频值:波特率预分频值为4
- SPI_InitStructure.firstBit = SPI_FIRSTBIT_MSB;//数据传输高位先行
- SPI_InitStructure.crcPolynomial = 7;//CRC值计算的多项式
-
- SPI_Config(SPI1,&SPI_InitStructure);//初始化SPI
-
- SPI_DisableCRC(SPI1);
-
- SPI_Enable(SPI1);//使能SPI
- }
替换数据发送部分
- /******************************************************************************
- 函数说明:LCD串行数据写入函数
- 入口数据:dat 要写入的串行数据
- 返回值: 无
- ******************************************************************************/
- void LCD_Writ_Bus(u8 dat)
- {
- LCD_CS_Clr();
- while(SPI_I2S_ReadStatusFlag(SPI1, SPI_FLAG_TXBE) == RESET);//检查接收标志位
- SPI_I2S_TxData(SPI1,dat);
- delay(1);
- LCD_CS_Set();
- }
修改TFT相关控制引脚
- //-----------------LCD端口定义----------------
- #define LCD_RES_Clr() GPIO_ResetBit(GPIOE,GPIO_PIN_7)//RES
- #define LCD_RES_Set() GPIO_SetBit(GPIOE,GPIO_PIN_7)
- #define LCD_DC_Clr() GPIO_ResetBit(GPIOE,GPIO_PIN_8)//DC
- #define LCD_DC_Set() GPIO_SetBit(GPIOE,GPIO_PIN_8)
-
- #define LCD_CS_Clr() GPIO_ResetBit(GPIOE,GPIO_PIN_9)//CS
- #define LCD_CS_Set() GPIO_SetBit(GPIOE,GPIO_PIN_9)
- #define LCD_BLK_Clr() GPIO_ResetBit(GPIOE,GPIO_PIN_10)//BLK
- #define LCD_BLK_Set() GPIO_SetBit(GPIOE,GPIO_PIN_10)
增加 测试代码
- int main(void)
- {
- System_TickInit(); //滴答定时
- MyUartInit(115200);//串口通信
- LED_Init(); //LED
- LCD_Init(); //LCD
- LCD_Fill(0,0,LCD_W,LCD_H,WHITE);
- LCD_BLK_Set();//打开背光
-
- while(1)
- {
- /*实时更新*/
- DataDeal_485();
-
- if((base_timer_flag & 0x01) != 0)
- {
- base_timer_flag &= 0xfe;
- }
- if((base_timer_flag & 0x02) != 0)
- {
- base_timer_flag &= 0xfd;
-
- GPIO_ToggleBit(GPIOE,GPIO_PIN_6);
- }
- if((base_timer_flag & 0x04) != 0)
- {
- base_timer_flag &= 0xfb;
-
- if((base_timer_flag & 0x08) != 0)
- {
- base_timer_flag &= 0xF7;
-
- LCD_ShowPicture(0,0,240,240,gImage_2);
- }
- else
- {
- base_timer_flag |= 0x08;
- LCD_Fill(0,0,LCD_W,LCD_H,WHITE);
- LCD_ShowChinese(0,0,"极海电子",RED,WHITE,32,0);
- LCD_ShowString(0,40,"LCD_W:",RED,WHITE,16,0);
- LCD_ShowIntNum(48,40,LCD_W,3,RED,WHITE,16);
- LCD_ShowString(80,40,"LCD_H:",RED,WHITE,16,0);
- LCD_ShowIntNum(128,40,LCD_H,3,RED,WHITE,16);
- LCD_ShowString(80,40,"LCD_H:",RED,WHITE,16,0);
- LCD_ShowString(0,70,"Increaseing Nun:",RED,WHITE,16,0);
- LCD_ShowFloatNum1(128,70,t,4,RED,WHITE,16);
- t += 0.11;
- for(j=0;j<3;j++)
- {
- for(i=0;i<6;i++)
- {
- LCD_ShowPicture(40*i,120+j*40,40,40,gImage_1);
- }
- }
- }
-
- GPIO_ToggleBit(GPIOE,GPIO_PIN_5);
- }
- }
- }
编译,调试。。。。。
这样就完成TFT的驱动工作了。。。
详细请各位看官查阅附件。
APM32F411V-TFT.zip
(7.32 MB, 下载次数: 5)