lora测试板的gpio设置

[复制链接]
keer_zu 发表于 2025-8-17 16:51 | 显示全部楼层 |阅读模式
  1. #define RADIO_NSS_PIN       GPIO_Pin_12
  2. #define RADIO_NSS_PORT      GPIOB

  3. #define RADIO_MOSI_PIN      GPIO_Pin_15
  4. #define RADIO_MOSI_PORT     GPIOB
  5. #define RADIO_MOSI_AF       GPIO_PinSource15

  6. #define RADIO_MISO_PIN      GPIO_Pin_14
  7. #define RADIO_MISO_PORT     GPIOB
  8. #define RADIO_MISO_AF       GPIO_PinSource14

  9. #define RADIO_SCK_PIN       GPIO_Pin_13
  10. #define RADIO_SCK_PORT      GPIOB
  11. #define RADIO_SCK_AF        GPIO_PinSource13

  12. #define RADIO_nRESET_PIN    GPIO_Pin_2
  13. #define RADIO_nRESET_PORT   GPIOB

  14. #define RADIO_BUSY_PIN      GPIO_Pin_10
  15. #define RADIO_BUSY_PORT     GPIOB

  16. #define RADIO_DIO1_PIN      GPIO_Pin_0
  17. #define RADIO_DIO1_PORT     GPIOA
 楼主| keer_zu 发表于 2025-8-17 16:52 | 显示全部楼层
  1. GPIO设置
    • NSS/BUSY/RESET/DIO1分配GPIO:
      • NSSRESET:输出模式(推挽上拉,初始高电平)
      • BUSYDIO1:输入模式(上拉)
 楼主| keer_zu 发表于 2025-8-17 17:25 | 显示全部楼层

您的自定义SPI初始化代码与STM32CubeMX生成的代码在关键参数上存在差异。以下是详细对比和修改建议:

关键参数对比表

参数 您的自定义设置 CubeMX生成设置 是否一致
模式 SPI_Mode_Master SPI_MODE_MASTER ✓ 一致
方向 SPI_Direction_2Lines_FullDuplex SPI_DIRECTION_2LINES ✓ 一致
数据大小 SPI_DataSize_8b SPI_DATASIZE_8BIT ✓ 一致
时钟极性(CPOL) SPI_CPOL_Low SPI_POLARITY_LOW ✓ 一致
时钟相位(CPHA) SPI_CPHA_1Edge SPI_PHASE_1EDGE ✓ 一致
NSS模式 SPI_NSS_Soft SPI_NSS_HARD_OUTPUT ✗ 不一致
波特率分频 SPI_BaudRatePrescaler_16 SPI_BAUDRATEPRESCALER_2 ✗ 不一致
首比特顺序 SPI_FirstBit_MSB SPI_FIRSTBIT_MSB ✓ 一致
CRC多项式 7 7 ✓ 一致
CRC计算 未明确启用 SPI_CRCCALCULATION_DISABLE -
FIFO阈值 SPI_RxFIFOThreshold_QF 未设置 ✗ 不一致
TI模式 未设置 SPI_TIMODE_DISABLE -
NSS脉冲模式 未设置 SPI_NSS_PULSE_ENABLE -

在STM32CubeMX中修改的步骤

  1. 打开SPI2配置界面

    • 在"Pinout & Configuration"标签页中找到SPI2
  2. 修改NSS设置

    • 在"Parameter Settings"选项卡
    • 找到"NSS"选项 → 改为Software模式
    • 这样会生成:hspi2.Init.NSS = SPI_NSS_SOFT;
  3. 修改波特率分频

    • 在"Baud Rate"部分
    • 将"Prescaler"改为16分频
    • 这样会生成:hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
  4. 禁用CRC计算

    • 找到"CRC Calculation"选项
    • 设为Disable(与您自定义设置一致)
    • 确保生成:hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  5. 禁用TI模式和NSS脉冲

    • 找到"TI Mode" → 设为Disable
    • 找到"NSS Pulse Mode" → 设为Disable

修改后的CubeMX配置代码

void MX_SPI2_Init(void)
{
  hspi2.Instance = SPI2;
  hspi2.Init.Mode = SPI_MODE_MASTER;
  hspi2.Init.Direction = SPI_DIRECTION_2LINES;
  hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi2.Init.NSS = SPI_NSS_SOFT;                   // 修改为软件NSS
  hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; // 修改为16分频
  hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi2.Init.TIMode = SPI_TIMODE_DISABLE;          // 禁用TI模式
  hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; // 禁用CRC
  hspi2.Init.CRCPolynomial = 7;
  hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  hspi2.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;     // 禁用NSS脉冲

if (HAL_SPI_Init(

/* USER CODE BEGIN SPI2_Init 2

code

 楼主| keer_zu 发表于 2025-8-17 17:26 | 显示全部楼层

需要手动添加的FIFO配置

CubeMX不会自动生成FIFO阈值配置,您需要在初始化后手动添加:

/* USER CODE BEGIN SPI2_Init 2 */
// 设置RX FIFO阈值为1/4满 (SPI_RXFIFO_THRESHOLD_QF)
SET_BIT(hspi2.Instance->CR2, SPI_CR2_FRXTH);
/* USER CODE END SPI2_Init 2 */

完整匹配您需求的解决方案

  1. CubeMX图形化配置

    • NSS模式:Software
    • 波特率分频:16
    • CRC计算:Disable
    • TI模式:Disable
    • NSS脉冲模式:Disable
  2. 手动代码添加

    // 在HAL_SPI_Init()之后添加
    SET_BIT(hspi2.Instance->CR2, SPI_CR2_FRXTH); // 设置FIFO阈值
    
  3. GPIO配置注意事项

    • 确保NSS引脚被配置为GPIO输出(软件控制)
    • 在传输前手动拉低NSS,传输后拉高

最终匹配结果

经过上述修改,CubeMX生成的初始化代码将与您的自定义设置完全一致:

  • 软件控制的NSS
  • 16分频的波特率(3MHz [url=home.php?mod=space&uid=72445]@[/url] 48MHz系统时钟)
  • 8位数据大小
  • FIFO阈值设置为1/4满
  • 禁用CRC、TI模式和NSS脉冲

这样既保持了CubeMX配置的便利性,又满足了您的硬件要求。

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

本版积分规则

个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1477

主题

12909

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部