你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
wanyisq 提问时间:2016-5-25 09:17 /
本帖最后由 wanyisq 于 2016-5-25 09:20 编辑

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

始终配置

始终配置

SPI配置

SPI配置

管脚配置

管脚配置

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

  2. #include "gpio.h"

  3. /* USER CODE BEGIN 0 */

  4. /* USER CODE END 0 */

  5. SPI_HandleTypeDef hspi1;

  6. /* SPI1 init function */
  7. void MX_SPI1_Init(void)
  8. {

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

  22. }

  23. void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
  24. {

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

  29.   /* USER CODE END SPI1_MspInit 0 */
  30.     /* Peripheral clock enable */
  31.     __SPI1_CLK_ENABLE();
  32.   
  33.     /**SPI1 GPIO Configuration   
  34.     PA5     ------> SPI1_SCK
  35.     PA7     ------> SPI1_MOSI
  36.     */
  37.     GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7;
  38.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  39.     GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  40.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  41.   /* USER CODE BEGIN SPI1_MspInit 1 */

  42.   /* USER CODE END SPI1_MspInit 1 */
  43.   }
  44. }

  45. void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi)
  46. {

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

  50.   /* USER CODE END SPI1_MspDeInit 0 */
  51.     /* Peripheral clock disable */
  52.     __SPI1_CLK_DISABLE();
  53.   
  54.     /**SPI1 GPIO Configuration   
  55.     PA5     ------> SPI1_SCK
  56.     PA7     ------> SPI1_MOSI
  57.     */
  58.     HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5|GPIO_PIN_7);

  59.   }
  60.   /* USER CODE BEGIN SPI1_MspDeInit 1 */

  61.   /* USER CODE END SPI1_MspDeInit 1 */
  62. }
复制代码
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. }        
复制代码
那位大神看得出问题在哪里吗
收藏 评论4 发布时间:2016-5-25 09:17

举报

4个回答
stary666 回答时间:2016-5-25 11:14:26
st的mcu的spi好像都不好用
atmel.png
nxp.png
st.png
废鱼 回答时间: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试试。

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

其实是一个就行  配合OLED的数据/命令管脚DC,但我为了看明白问题在哪。
另外可以让我参考一下你的程序吗

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版