你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

F103的SPI2与ILI9341显示屏控制器通信

[复制链接]
wfy680 发布时间:2018-6-10 15:26
本帖最后由 wfy680 于 2018-6-10 15:30 编辑

原本将SPI2对应的IO脚设置成GPIO,模拟SPI与ILI9341通信,一切正常。现在将这个口设置成SPI,通信不显示,请高手指教。代码如下:
#define SPI_MASTER_NSS           GPIO_Pin_12
#define SPI_MASTER_SCK           GPIO_Pin_13
#define SPI_MASTER_MI            GPIO_Pin_14
#define SPI_MASTER_MO            GPIO_Pin_15

void OLED_Init(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);          
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10 ;          //D/C   BLK   RST
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                 //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   //速度50MHz
  GPIO_Init(GPIOA, &GPIO_InitStructure);             
  GPIO_SetBits(GPIOA , GPIO_Pin_9);       // 背光,高电平亮
  OLED_RST_Clr(); // 复位
  Delay_ms(2);
  OLED_RST_Set();
  Delay_ms(5);

  SPI2_UserInit();

//************* Start Initial Sequence **********//
  LCD_WR_REG(0xCF);  
  LCD_WR_DATA8(0x00);
  LCD_WR_DATA8(0xD9);
  LCD_WR_DATA8(0X30);

  LCD_WR_REG(0xED);  
  LCD_WR_DATA8(0x64);
  LCD_WR_DATA8(0x03);
  LCD_WR_DATA8(0X12);
  LCD_WR_DATA8(0X81);

  LCD_WR_REG(0xE8);  
  LCD_WR_DATA8(0x85);
  LCD_WR_DATA8(0x10);
  LCD_WR_DATA8(0x78);

  LCD_WR_REG(0xCB);  
  LCD_WR_DATA8(0x39);
  LCD_WR_DATA8(0x2C);
  LCD_WR_DATA8(0x00);
  LCD_WR_DATA8(0x34);
  LCD_WR_DATA8(0x02);

  LCD_WR_REG(0xF7);  
  LCD_WR_DATA8(0x20);

  LCD_WR_REG(0xEA);  
  LCD_WR_DATA8(0x00);
  LCD_WR_DATA8(0x00);

  LCD_WR_REG(0xC0);    //Power control
  LCD_WR_DATA8(0x21);   //VRH[5:0]

  LCD_WR_REG(0xC1);    //Power control
  LCD_WR_DATA8(0x12);   //SAP[2:0];BT[3:0]

  LCD_WR_REG(0xC5);    //VCM control
  LCD_WR_DATA8(0x32);
  LCD_WR_DATA8(0x3C);

  LCD_WR_REG(0xC7);    //VCM control2
  LCD_WR_DATA8(0XC1);

  LCD_WR_REG(0x36);    // Memory Access Control
  LCD_WR_DATA8(0x08);  // BGR顺序

  LCD_WR_REG(0x3A);     // 16位像素
  LCD_WR_DATA8(0x55);

  LCD_WR_REG(0xB1);   //帧速率控制
  LCD_WR_DATA8(0x00);   
  LCD_WR_DATA8(0x18);

  LCD_WR_REG(0xB6);    // Display Function Control
  LCD_WR_DATA8(0x0A);
  LCD_WR_DATA8(0xA2);



  LCD_WR_REG(0xF2);    // 3Gamma Function Disable
  LCD_WR_DATA8(0x00);

  LCD_WR_REG(0x26);    //Gamma curve selected
  LCD_WR_DATA8(0x01);

  LCD_WR_REG(0xE0);    //Set Gamma
  LCD_WR_DATA8(0x0F);
  LCD_WR_DATA8(0x20);
  LCD_WR_DATA8(0x1E);
  LCD_WR_DATA8(0x09);
  LCD_WR_DATA8(0x12);
  LCD_WR_DATA8(0x0B);
  LCD_WR_DATA8(0x50);
  LCD_WR_DATA8(0XBA);
  LCD_WR_DATA8(0x44);
  LCD_WR_DATA8(0x09);
  LCD_WR_DATA8(0x14);
  LCD_WR_DATA8(0x05);
  LCD_WR_DATA8(0x23);
  LCD_WR_DATA8(0x21);
  LCD_WR_DATA8(0x00);

  LCD_WR_REG(0XE1);    //Set Gamma
  LCD_WR_DATA8(0x00);
  LCD_WR_DATA8(0x19);
  LCD_WR_DATA8(0x19);
  LCD_WR_DATA8(0x00);
  LCD_WR_DATA8(0x12);
  LCD_WR_DATA8(0x07);
  LCD_WR_DATA8(0x2D);
  LCD_WR_DATA8(0x28);
  LCD_WR_DATA8(0x3F);
  LCD_WR_DATA8(0x02);
  LCD_WR_DATA8(0x0A);
  LCD_WR_DATA8(0x08);
  LCD_WR_DATA8(0x25);
  LCD_WR_DATA8(0x2D);
  LCD_WR_DATA8(0x0F);

  LCD_WR_REG(0x11);    //Exit Sleep
  Delay_ms(120);
  LCD_WR_REG(0x29);    //Display on

  LCD_DrawPoint(100,100,RED);  // ****设置一个红点验证 , 不成功!!


}

void LCD_DrawPoint(u16 x,u16 y,u16 Color)
{
        Address_set(x,y,x,y);//设置光标位置
        LCD_WR_DATA(Color);             
}



void LCD_WR_DATA8(char da) // 写 8 bit 数据
{       
  OLED_DC_Set();   
  SPI2_Send(da);
}  


void LCD_WR_REG(char da)  // 写 8 bit 指令
{               
  OLED_DC_Clr();   
  SPI2_Send(da);
}




void LCD_WR_DATA(int da)
{       
  OLED_DC_Set();
  SPI2_Send(da>>8);
  SPI2_Send(da);
}          


void SPI2_UserInit( void )
{
    GPIO_InitTypeDef GPIO_InitStructure;
    SPI_InitTypeDef  SPI_InitStructure;


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  , ENABLE);//使能GPIOB时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); //使能spi2

    GPIO_InitStructure.GPIO_Pin = SPI_MASTER_SCK | SPI_MASTER_MO;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = SPI_MASTER_MI;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    //GPIO_SetBits(GPIOB , SPI_MASTER_SCK | SPI_MASTER_MO |SPI_MASTER_MI);



    /* SPI2 configuration ------------------------------------------------------*/
    /* SPI2 configuration ------------------------------------------------------*/
    SPI_Cmd(SPI2, DISABLE); //必须先disable,才能改变MODE
    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; // SPI_Direction_1Line_Tx , SPI_Direction_2Lines_FullDuplex
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; // SPI_DataSize_16b   SPI_DataSize_8b:SPI数据大小:发送8位帧数据结构
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;   // SCK    SPI_CPOL_Low ,  SPI_CPOL_High: //设备空闲状态时同步时钟SCK的状态,High
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //CPHA=1:数据采样从第二个时钟沿开始   
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;    // NSS由软件控件片选   SPI_NSS_Hard   SPI_NSS_Soft
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; // SPI_BaudRatePrescaler_8   SPI_BaudRatePrescaler_256
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;//SPI_FirstBit_MSB;   SPI_FirstBit_LSB
    SPI_InitStructure.SPI_CRCPolynomial = 7;
    SPI_Init(SPI2, &SPI_InitStructure);

    SPI_Cmd(SPI2, ENABLE);
}


void SPI2_Send(u8 data)
{
    while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);   /* Wait for SPI2 Tx buffer empty */
    SPI_I2S_SendData(SPI2, data );
}


void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
{
  LCD_WR_REG(0x2a);
  LCD_WR_DATA8(x1>>8);
  LCD_WR_DATA8(x1);
  LCD_WR_DATA8(x2>>8);
  LCD_WR_DATA8(x2);

  LCD_WR_REG(0x2b);
  LCD_WR_DATA8(y1>>8);
  LCD_WR_DATA8(y1);
  LCD_WR_DATA8(y2>>8);
  LCD_WR_DATA8(y2);

  LCD_WR_REG(0x2C);                                                                                          
}


收藏 评论0 发布时间:2018-6-10 15:26

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版