cubemx生成的F103的SPI代码运行不成功

2019-03-23 18:12发布

83A3.tmp.jpg 4252.tmp.jpg E734.tmp.jpg 我把以前的工程中的模拟SPI换成cubemx生成的硬件SPI代码,驱动OLED。但是一直没效果。之前没用过CUBEMX,不知道问题在哪。

生成的SPI.c文件如下
  1. #include "spi.h"

  2. #include "gpio.h"

  3. SPI_HandleTypeDef hspi1;

  4. void MX_SPI1_Init(void)
  5. {

  6.   hspi1.Instance = SPI1;
  7.   hspi1.Init.Mode = SPI_MODE_MASTER;
  8.   hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  9.   hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
  10.   hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  11.   hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
  12.   hspi1.Init.NSS = SPI_NSS_SOFT;
  13.   hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
  14.   hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  15.   hspi1.Init.TIMode = SPI_TIMODE_DISABLED;
  16.   hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
  17.   hspi1.Init.CRCPolynomial = 10;
  18.   HAL_SPI_Init(&hspi1);

  19. }

  20. void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
  21. {

  22.   GPIO_InitTypeDef GPIO_InitStruct;
  23.   if(hspi->Instance==SPI1)
  24.   {
  25.      __SPI1_CLK_ENABLE();
  26.   
  27.     /**SPI1 GPIO Configuration   
  28.     PA5     ------> SPI1_SCK
  29.     PA7     ------> SPI1_MOSI
  30.     */
  31.     GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7;
  32.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  33.     GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  34.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  35.   }
  36. }

  37. void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi)
  38. {

  39.   if(hspi->Instance==SPI1)
  40.   {
  41.        __SPI1_CLK_DISABLE();
  42.       HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5|GPIO_PIN_7);

  43.   }

  44. }
复制代码mian.c中的初始化如下
  1. int main(void)
  2. {
  3.    HAL_Init();
  4.    SystemClock_Config();
  5.    MX_GPIO_Init();
  6.    MX_SPI1_Init();

  7.    while (1)
  8.    {
  9.    }
复制代码
下面是SPI写函数。、
  1. void SPI_WriteCmd(uint8_t cmd)
  2. {
  3.     DC_L;
  4.     HAL_SPI_Transmit(&hspi1, (uint8_t *)cmd,1,100)
  5.     while(HAL_SPI_GetState(&hspi1)==HAL_SPI_STATE_BUSY_TX);
  6. }

  7. void SPI_Write_Data(uint8_t data)
  8. {
  9.     DC_H;
  10.     HAL_SPI_Transmit(&hspi1, (uint8_t *)data,1,100)
  11.     while(HAL_SPI_GetState(&hspi1)==HAL_SPI_STATE_BUSY_TX);
  12. }      
复制代码那位大神看得出问题在哪里吗
此帖出自小平头技术问答
0条回答

一周热门 更多>