引脚接法
*SCL PB13 ————SPI2 SCK
*SDA PB15 ————SPI2 MOSI
*RES PB11
*DC PB2
*CS PB0
*BLK PC4
使用SPI2的主机模式,8位数据,软件片选功能,SPI频率2分频,SPI2的主频是60MHz
- void DAL_SPI2_Config(void)
- {
- hspi2.Instance = SPI2;
- hspi2.Init.Mode = SPI_MODE_MASTER;
- hspi2.Init.Direction = SPI_DIRECTION_2LINES;
- hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
- hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
- hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
- hspi2.Init.NSS = SPI_NSS_SOFT;
- hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
- hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
- hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
- hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
- hspi2.Init.CRCPolynomial = 0;
- if (DAL_SPI_Init(&hspi2) != DAL_OK)
- {
- Error_Handler();
- }
- }
- void DAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
- {
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- if (hspi->Instance == SPI1)
- {
- /* Enable SPI1 clock */
- __DAL_RCM_SPI1_CLK_ENABLE();
- /* Enable SPI1 GPIO clock */
- __DAL_RCM_GPIOA_CLK_ENABLE();
- /* Configure SPI1 NSS SCK MISO and MOSI pin */
- GPIO_InitStruct.Pin = GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
- DAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- }
- if (hspi->Instance == SPI2)
- {
- /* Enable SPI2 clock */
- __DAL_RCM_SPI2_CLK_ENABLE();
- /* Enable SPI2 GPIO clock */
- __DAL_RCM_GPIOB_CLK_ENABLE();
- /* Configure SPI2 NSS SCK MISO and MOSI pin */
- GPIO_InitStruct.Pin = GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
- DAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
- }
- }
这个地方必须要将读的Buff填进去,不能填NULL,不然无法正常发送数据。
- void SPI_WriteByte(u8 byte)
- {
- u8 buffer[100];
- DAL_SPI_TransmitReceive(&hspi2, &byte, buffer, 1, 1000U);
- }
- #define CS(stat) DAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,stat)
- #define RES(stat) DAL_GPIO_WritePin(GPIOB,GPIO_PIN_11,stat)
- #define DC(stat) DAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,stat)
- #define BLK(stat) DAL_GPIO_WritePin(GPIOC,GPIO_PIN_4,stat)
- void LCD_WR_REG(u8 Reg)
- {
- CS(FALSE);
- DC(FALSE);
- SPI_WriteByte(Reg);
- CS(TRUE);
- }
- void LCD_WR_DATA(u8 Data)
- {
- CS(FALSE);
- DC(TRUE);
- SPI_WriteByte(Data);
- CS(TRUE);
- }
将写寄存器和写数据配置完成后就可以刷屏了
可以看的出来,刷屏还是有点慢的,后面再改成DMA发送,这样刷屏会更快一点,还是慢的话就用SPI1+DMA,时钟频率更高点,速度会更快
|