|
硬汉哥以及各位大佬,你们好,我目前在用STM32H750驱动一个SPI接口的LCD ili9488,目前驱动起来会一直卡在while (__HAL_SPI_GET_FLAG(bsp_lcd_manager.spi_port, SPI_FLAG_RXNE ) == RESET);语句中
跪求帮助,
代码如下:
- static void MX_SPI4_Init(void)
- {
- /* USER CODE BEGIN SPI4_Init 0 */
- /* USER CODE END SPI4_Init 0 */
- /* USER CODE BEGIN SPI4_Init 1 */
- /* USER CODE END SPI4_Init 1 */
- /* SPI4 parameter configuration*/
- hspi4.Instance = SPI4;
- hspi4.Init.Mode = SPI_MODE_MASTER;
- hspi4.Init.Direction = SPI_DIRECTION_2LINES;
- hspi4.Init.DataSize = SPI_DATASIZE_8BIT;
- hspi4.Init.CLKPolarity = SPI_POLARITY_LOW;
- hspi4.Init.CLKPhase = SPI_PHASE_1EDGE;
- hspi4.Init.NSS = SPI_NSS_SOFT;
- hspi4.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
- hspi4.Init.FirstBit = SPI_FIRSTBIT_MSB;
- hspi4.Init.TIMode = SPI_TIMODE_DISABLE;
- hspi4.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
- hspi4.Init.CRCPolynomial = 0x0;
- hspi4.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
- hspi4.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
- hspi4.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
- hspi4.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
- hspi4.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
- hspi4.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
- hspi4.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE;
- hspi4.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
- hspi4.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_DISABLE;
- hspi4.Init.IOSwap = SPI_IO_SWAP_DISABLE;
- if (HAL_SPI_Init(&hspi4) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN SPI4_Init 2 */
- __HAL_SPI_ENABLE(&hspi4);
- /* USER CODE END SPI4_Init 2 */
- }
复制代码- void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
- {
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
- if(hspi->Instance==SPI4)
- {
- /* USER CODE BEGIN SPI4_MspInit 0 */
- /* USER CODE END SPI4_MspInit 0 */
- /** Initializes the peripherals clock
- */
- PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI4;
- PeriphClkInitStruct.Spi45ClockSelection = RCC_SPI45CLKSOURCE_D2PCLK1;
- if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
- {
- Error_Handler();
- }
- /* Peripheral clock enable */
- __HAL_RCC_SPI4_CLK_ENABLE();
- __HAL_RCC_GPIOE_CLK_ENABLE();
- /**SPI4 GPIO Configuration
- PE4 ------> SPI4_NSS
- PE5 ------> SPI4_MISO
- PE6 ------> SPI4_MOSI
- PE12 ------> SPI4_SCK
- */
- GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_12;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF5_SPI4;
- HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
- /* USER CODE BEGIN SPI4_MspInit 1 */
- /* USER CODE END SPI4_MspInit 1 */
- }
- }
复制代码 uint8_t bsp_lcd_init(SPI_HandleTypeDef *hspi) 中调用第一条spi写数据 _bsp_lcd_write_reg
- static uint8_t _bsp_lcd_write_reg(uint8_t reg_index)
- {
- LCD_DC_L;
- _protocol_spi_read_write_byte(reg_index);
- return 0;
- }
复制代码- static uint8_t _protocol_spi_read_write_byte(uint8_t tx_data)
- {
- #if 0
- HAL_SPI_Transmit(bsp_lcd_manager.spi_port, &tx_data, 1, 1);
- #else
- while (__HAL_SPI_GET_FLAG(bsp_lcd_manager.spi_port, SPI_FLAG_TXE ) == RESET);
- WRITE_REG(bsp_lcd_manager.spi_port->Instance->TXDR, tx_data);
- while (__HAL_SPI_GET_FLAG(bsp_lcd_manager.spi_port, SPI_FLAG_RXNE ) == RESET);
- return READ_REG(bsp_lcd_manager.spi_port->Instance->RXDR);
- #endif
- }
复制代码 然后就会卡在while (__HAL_SPI_GET_FLAG(bsp_lcd_manager.spi_port, SPI_FLAG_RXNE ) == RESET);
整个工程如附件
|
|