- GPIO_InitTypeDef GPIO_InitStructure;
- //推挽输出
- GPIO_InitStructure.Pins = ST7735_CS_Pin;
- GPIO_InitStructure.IT = GPIO_IT_NONE;
- GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_Init(ST7735_CS_GPIO_Port, &GPIO_InitStructure);
- GPIO_InitStructure.Pins = ST7735_DC_Pin;
- GPIO_Init(ST7735_DC_GPIO_Port, &GPIO_InitStructure);
- GPIO_InitStructure.Pins = ST7735_RST_Pin;
- GPIO_Init(ST7735_RST_GPIO_Port, &GPIO_InitStructure);
-
- GPIO_InitStructure.Pins = ST7735_SCK_Pin;
- GPIO_Init(ST7735_SCK_GPIO_Port, &GPIO_InitStructure);
-
- GPIO_InitStructure.Pins = ST7735_MOSI_Pin;
- GPIO_Init(ST7735_MOSI_GPIO_Port, &GPIO_InitStructure);
- PA05_AFx_SPI1SCK();
- PA04_AFx_SPI1MOSI();
- SYSCTRL_APBPeriphClk_Enable1(SYSCTRL_APB1_PERIPH_SPI, ENABLE);
-
- SPI_InitTypeDef SPI_InitStructure;
- SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_TxOnly; //单工只发
- SPI_InitStructure.SPI_Mode = SPI_Mode_Master; // 主机模式
- SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; // 帧数据长度为8bit
- SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; // 时钟空闲电平为高
- SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; // 第2个边沿采样
- SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; // 片选信号由SSI寄存器控制
- SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; // 波特率为PCLK的4分频
- SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; // 最高有效位 MSB 收发在前
- SPI_InitStructure.SPI_Speed = SPI_Speed_Low; // 低速SPI
- SPI_Init(ST7735_SPI, &SPI_InitStructure);
- SPI_Cmd(ST7735_SPI, ENABLE);
接下来就可以调用库函数执行相关的数据传输指令了- void ST7735_delay(uint8_t i)
- {
- delay1ms(i);
- }
- void ST7735_SPI_SendByte(uint8_t byte)
- {
- // 判断是否可以继续发送放在之后判断可以避免CS拉高后还没发送结束。可以确保每一次发送都是成功的。
- SPI_SendData(ST7735_SPI, byte);
- while(SPI_GetFlagStatus(ST7735_SPI, SPI_FLAG_TXE) == RESET);
- }
- void ST7735_SPI_RST_SetLow(void)
- {
- GPIO_WritePin(ST7735_RST_GPIO_Port,ST7735_RST_Pin,GPIO_Pin_RESET);
- }
- void ST7735_SPI_RST_SetHigh(void)
- {
- GPIO_WritePin(ST7735_RST_GPIO_Port,ST7735_RST_Pin,GPIO_Pin_SET);
- }
- void ST7735_SPI_CS_SetLow(void)
- {
- GPIO_WritePin(ST7735_CS_GPIO_Port,ST7735_CS_Pin,GPIO_Pin_RESET);
- }
- void ST7735_SPI_CS_SetHigh(void)
- {
- GPIO_WritePin(ST7735_CS_GPIO_Port,ST7735_CS_Pin,GPIO_Pin_SET);
- }
- void ST7735_SPI_DC_SetLow(void)
- {
- GPIO_WritePin(ST7735_DC_GPIO_Port,ST7735_DC_Pin,GPIO_Pin_RESET);
- }
- void ST7735_SPI_DC_SetHigh(void)
- {
- GPIO_WritePin(ST7735_DC_GPIO_Port,ST7735_DC_Pin,GPIO_Pin_SET);
- }
- /*
- 以下函数不用修改,以下函数调用上面的几个基础函数完成ST7735接口的操作。
- */
- void ST7735_Reset(void)
- {
- ST7735_SPI_RST_SetLow();
- ST7735_delay(100);
- ST7735_SPI_RST_SetHigh();
- ST7735_delay(100);
- }
- void ST7735_WriteCommand(uint8_t cmd)
- {
- ST7735_SPI_CS_SetLow();
- ST7735_SPI_DC_SetLow();
- ST7735_SPI_SendByte(cmd);
- ST7735_SPI_CS_SetHigh();
- }
- void ST7735_WriteByte(uint8_t data)
- {
- ST7735_SPI_CS_SetLow();
- ST7735_SPI_DC_SetHigh();
- ST7735_SPI_SendByte(data);
- ST7735_SPI_CS_SetHigh();
- }
- void ST7735_WriteData(uint8_t *data, size_t data_size)
- {
- ST7735_SPI_CS_SetLow();
- ST7735_SPI_DC_SetHigh();
- for(int i=0;i<data_size;i++) ST7735_SPI_SendByte(*(data+i));
- ST7735_SPI_CS_SetHigh();
- }
在主函数完成代码
- int32_t main(void)
- {
- SYSCTRL_HSI_Enable(SYSCTRL_HSIOSC_DIV12);
- __SYSCTRL_GPIOA_CLK_ENABLE();
- __SYSCTRL_GPIOB_CLK_ENABLE();
-
- GPIO_InitTypeDef GPIO_InitStructure;
- //推挽输出
- GPIO_InitStructure.IT = GPIO_IT_NONE;
- GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStructure.Pins = GPIO_PIN_2;
- GPIO_Init(CW_GPIOB, &GPIO_InitStructure);
-
-
- GPIO_InitStructure.Pins = ST7735_CS_Pin;
- GPIO_Init(ST7735_CS_GPIO_Port, &GPIO_InitStructure);
- GPIO_InitStructure.Pins = ST7735_DC_Pin;
- GPIO_Init(ST7735_DC_GPIO_Port, &GPIO_InitStructure);
- GPIO_InitStructure.Pins = ST7735_RST_Pin;
- GPIO_Init(ST7735_RST_GPIO_Port, &GPIO_InitStructure);
-
- GPIO_InitStructure.Pins = ST7735_SCK_Pin;
- GPIO_Init(ST7735_SCK_GPIO_Port, &GPIO_InitStructure);
-
- GPIO_InitStructure.Pins = ST7735_MOSI_Pin;
- GPIO_Init(ST7735_MOSI_GPIO_Port, &GPIO_InitStructure);
-
- SPI_Configuration();
-
- ST7735_Init();
- ST7735_FillScreen(ST7735_BLACK);
- ST7735_DrawRectangle(0,0,10,5,ST7735_YELLOW);
- ST7735_DrawRectangle(15,5,10,20,ST7735_BLUE);
- ST7735_DrawRectangle(30,25,10,10,ST7735_RED);
- ST7735_DrawString(0,35,"Hello",ST7735_GREEN,ST7735_BLACK,&Font_11x18);
- ST7735_DrawString(0,55,"Hello",ST7735_MAGENTA,ST7735_BLACK,&Font_7x10);
- while(1)
- {
- GPIO_WritePin(CW_GPIOB,GPIO_PIN_2,GPIO_Pin_RESET);
- Delay(0xFFFF);
- GPIO_WritePin(CW_GPIOB,GPIO_PIN_2,GPIO_Pin_SET);
- Delay(0xFFFF);
- }
- }
编译烧录,点亮屏幕