OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 284|回复: 2

我这么用SPI有什么问题吗? 读取wx25qxx

[复制链接]

1

主题

13

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2020-1-10
在线时间
7 小时
发表于 2023-12-14 19:41:23 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 xred 于 2023-12-14 19:43 编辑

如题,学习移植下wx25qxx的driver, 总是不成功,哪位大佬指定一下?
对了,不能用DMA, 没有DMA. 也没有使用中断, 直接在循环里面判断的标识.不用中断和DMA, 这么写的话, 用什么姿势能正确读取?

W25QXX_result_t w25qxx_transmit(W25QXX_HandleTypeDef* w25qxx, uint8_t* buf, uint32_t len)
{
    for (size_t i = 0; i < len; i++) {
        LL_SPI_TransmitData8(SPI1, buf);
        while (!LL_SPI_IsActiveFlag_TXE(SPI1)) { }
    }
    return W25QXX_Ok;
}

W25QXX_result_t w25qxx_receive(W25QXX_HandleTypeDef* w25qxx, uint8_t* buf, uint32_t len)
{
    for (size_t i = 0; i < len; i++) {
        while (!LL_SPI_IsActiveFlag_RXNE(SPI1)) {} // 卡死在这
        buf = LL_SPI_ReceiveData8(SPI1);
    }
    return W25QXX_Ok;
}



初始化:

  1. static uint8_t MX_SPI1_Init(void)
  2. {
  3.     LL_SPI_InitTypeDef SPI_InitStruct = { 0 };
  4.     LL_GPIO_InitTypeDef GPIO_InitStruct = { 0 };

  5.     LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SPI1);

  6.     LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);
  7.     /**SPI1 GPIO Configuration
  8.     PA1   ------> SPI1_SCK
  9.     PA2   ------> SPI1_MOSI
  10.     */
  11.     GPIO_InitStruct.Pin = LL_GPIO_PIN_1;
  12.     GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
  13.     GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
  14.     GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  15.     GPIO_InitStruct.Pull = LL_GPIO_PULL_DOWN;
  16.     GPIO_InitStruct.Alternate = LL_GPIO_AF_0;
  17.     LL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  18.     GPIO_InitStruct.Pin = LL_GPIO_PIN_2;
  19.     GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
  20.     GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
  21.     GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  22.     GPIO_InitStruct.Pull = LL_GPIO_PULL_DOWN;
  23.     GPIO_InitStruct.Alternate = LL_GPIO_AF_0;
  24.     LL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  25.     GPIO_InitStruct.Pin = LL_GPIO_PIN_6;
  26.     GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
  27.     GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
  28.     GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  29.     GPIO_InitStruct.Pull = LL_GPIO_PULL_DOWN;
  30.     GPIO_InitStruct.Alternate = LL_GPIO_AF_0;
  31.     LL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  32.     SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX;
  33.     SPI_InitStruct.Mode = LL_SPI_MODE_MASTER;
  34.     SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT;
  35.     SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_LOW;
  36.     SPI_InitStruct.ClockPhase = LL_SPI_PHASE_1EDGE;
  37.     SPI_InitStruct.NSS = LL_SPI_NSS_SOFT;
  38.     SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV2;
  39.     SPI_InitStruct.BitOrder = LL_SPI_MSB_FIRST;
  40.     SPI_InitStruct.CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE;
  41.     SPI_InitStruct.CRCPoly = 7;

  42.     LL_SPI_Init(SPI1, &SPI_InitStruct);
  43.     LL_SPI_SetStandard(SPI1, LL_SPI_PROTOCOL_MOTOROLA);
  44.     LL_SPI_DisableNSSPulseMgt(SPI1);
  45.     // LL_SPI_EnableNSSPulseMgt(SPI1);
  46.     LL_SPI_SetRxFIFOThreshold(SPI1, LL_SPI_RX_FIFO_TH_QUARTER);

  47.     // NVIC_SetPriority(SPI1_IRQn, 1);
  48.     // NVIC_EnableIRQ(SPI1_IRQn);
  49.     // LL_SPI_EnableIT_RXNE(SPI1);

  50.     LL_SPI_Enable(SPI1);

  51.     return 0;
  52. }
复制代码



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8205
金钱
8205
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-12-15 10:28:11 | 显示全部楼层
百度 STM32 SPI
或者软件模拟SPI
你对SPI的理解有误,对于主机来说,收与发是同时进行的,有发送才能有接收。
https://blog.csdn.net/qq_41399894/article/details/100942131
专治疑难杂症
回复

使用道具 举报

1

主题

13

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2020-1-10
在线时间
7 小时
 楼主| 发表于 2023-12-15 10:58:10 | 显示全部楼层
LcwSwust 发表于 2023-12-15 10:28
百度 STM32 SPI
或者软件模拟SPI
你对SPI的理解有误,对于主机来说,收与发是同时进行的,有发送才能有接 ...

多谢, 我在研究研究
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 17:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表