硬汉嵌入式论坛

 找回密码
 立即注册
查看: 365|回复: 2
收起左侧

[技术讨论] stm32f401硬件spi和nrf24l01通信,发现读取不上来无线模块的寄存器值

[复制链接]

16

主题

17

回帖

65

积分

初级会员

积分
65
发表于 2025-4-3 22:54:44 | 显示全部楼层 |阅读模式
在使用stm32f401硬件spi和nrf24l01通信,发现读取不上来无线模块的寄存器值,发现调整SPI_BAUDRATEPRESCALER_16和gpio的速度,每次读取得到的值都不一样,而且都是错误的值,spi1的速度最大是42mhz,2.4g最大8mhz,spi的速度配成2,4,8,16都不行。读取不上来。
比如:如果spi速度是8分频,gpio是高速,那读取上来的值都是0x1f(读取无线模块的任何一个寄存器都是这个值),如果调整成16,那读上来的全部都是0x7f。
                Clr_NRF24L01_CSN;
                spi1_read_write_byte(0x07);
                u8nrf2401l = spi1_read_write_byte(0xFF);
                Set_NRF24L01_CSN;



/* USER CODE END SPI1_Init 1 */
  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_DISABLE;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi1.Init.CRCPolynomial = 7;
}

void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
{

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

  /* USER CODE END SPI1_MspInit 0 */
    /* SPI1 clock enable */
    __HAL_RCC_SPI1_CLK_ENABLE();

    __HAL_RCC_GPIOA_CLK_ENABLE();
    /**SPI1 GPIO Configuration
    PA4     ------> SPI1_NSS
    PA5     ------> SPI1_SCK
    PA6     ------> SPI1_MISO    GPIO_AF5_SPI1
    PA7     ------> SPI1_MOSI
    */
    GPIO_InitStruct.Pin = SPI1_SCK_Pin|SPI1_MOSI_Pin|SPI1_MISO_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
         

  /* USER CODE BEGIN SPI1_MspInit 1 */
        GPIO_InitStruct.Pin = SPI1_NSS_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  /* USER CODE END SPI1_MspInit 1 */
  }
}

回复

使用道具 举报

16

主题

17

回帖

65

积分

初级会员

积分
65
 楼主| 发表于 2025-4-4 08:26:02 | 显示全部楼层
更新,今天用了F401探索者硬件spi1,同样的程序,同样的引脚,能够正常读取出来寄存器的值。之前用的F401RET6MINI开发板的硬件spi1,怎么调都不行。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2025-4-4 12:08:33 | 显示全部楼层
zlx 发表于 2025-4-4 08:26
更新,今天用了F401探索者硬件spi1,同样的程序,同样的引脚,能够正常读取出来寄存器的值。之前用的F401RE ...

这个我早期做的24l01也记录过一些问题,基本上注意就是GPIO速度等级和SPI分频问题。

在STM32-V5开发板上面使用nRF24L01注意事项
https://www.armbbs.cn/forum.php? ... 6892&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-10 02:06 , Processed in 0.394530 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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