wanyisq 发表于 2016-5-25 09:17:34

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

本帖最后由 wanyisq 于 2016-5-25 09:20 编辑

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

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

#include "gpio.h"

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

SPI_HandleTypeDef hspi1;

/* SPI1 init function */
void MX_SPI1_Init(void)
{

hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLED;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
hspi1.Init.CRCPolynomial = 10;
HAL_SPI_Init(&hspi1);

}

void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
{

GPIO_InitTypeDef GPIO_InitStruct;
if(hspi->Instance==SPI1)
{
/* USER CODE BEGIN SPI1_MspInit 0 */

/* USER CODE END SPI1_MspInit 0 */
    /* Peripheral clock enable */
    __SPI1_CLK_ENABLE();

    /**SPI1 GPIO Configuration   
    PA5   ------> SPI1_SCK
    PA7   ------> SPI1_MOSI
    */
    GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

/* USER CODE BEGIN SPI1_MspInit 1 */

/* USER CODE END SPI1_MspInit 1 */
}
}

void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi)
{

if(hspi->Instance==SPI1)
{
/* USER CODE BEGIN SPI1_MspDeInit 0 */

/* USER CODE END SPI1_MspDeInit 0 */
    /* Peripheral clock disable */
    __SPI1_CLK_DISABLE();

    /**SPI1 GPIO Configuration   
    PA5   ------> SPI1_SCK
    PA7   ------> SPI1_MOSI
    */
    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5|GPIO_PIN_7);

}
/* USER CODE BEGIN SPI1_MspDeInit 1 */

/* USER CODE END SPI1_MspDeInit 1 */
} mian.c中的初始化如下
int main(void)
{
   HAL_Init();
   SystemClock_Config();
   MX_GPIO_Init();
   MX_SPI1_Init();

   while (1)
   {
   }

下面是SPI写函数。、
void SPI_WriteCmd(uint8_t cmd)
{
    DC_L;
    HAL_SPI_Transmit(&hspi1, (uint8_t *)cmd,1,100)
    while(HAL_SPI_GetState(&hspi1)==HAL_SPI_STATE_BUSY_TX);
}

void SPI_Write_Data(uint8_t data)
{
    DC_H;
    HAL_SPI_Transmit(&hspi1, (uint8_t *)data,1,100)
    while(HAL_SPI_GetState(&hspi1)==HAL_SPI_STATE_BUSY_TX);
}      那位大神看得出问题在哪里吗

stary666 发表于 2016-5-25 11:14:26

st的mcu的spi好像都不好用

发表于 2016-5-25 14:34:40

楼主,你看一下例程对于SPI的使用。也可以通过监听波形,看看SPI发送的数据是否正确。我驱动SPI的FLASH没有问题。

modu8888 发表于 2016-5-25 20:47:08

我用103的SPI驱动12864点阵液晶屏,OK。
你用CubeMX配置的SPI,那几个参数你仔细琢磨下,多试试!

另外,你两个SPI函数纯是画蛇添足(?)无论你写命令也好,写数据也罢,直接用HAL_SPI_Transmit(,,,)不就得了?你把100改成1000试试。

:loveliness:

wanyisq 发表于 2016-5-26 09:53:16

modu8888 发表于 2016-5-25 20:47
我用103的SPI驱动12864点阵液晶屏,OK。
你用CubeMX配置的SPI,那几个参数你仔细琢磨下,多试试!



其实是一个就行配合OLED的数据/命令管脚DC,但我为了看明白问题在哪。
另外可以让我参考一下你的程序吗
页: [1]
查看完整版本: cubemx生成的F103的SPI代码运行不成功