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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版