器件型号:CC1120EM-420-470-RD
我想将驱动程序移植到 STM32、发现该驱动程序将阻止 GPIO2、在执行 STX 命令后无响应。
我设置"CC112X_Settling _CFG= 0x00B"、我的器件版本为0x23、无运行手动校准。
我的初始寄存器设置如下:(所有十六进制值)
CC112X_IOCFG3 b0
CC112X_IOCFG2 6.
CC112X_IOCFG1 b0
CC112X_IOCFG0 40.
CC112X_SYNC_CFG1 b.
CC112X_DCFILT_CFG 1c
CC112X_PREAMING_CFG1 18.
CC112X_IQIC C6
CC112X_CHAN_BW 8.
CC112X_MDMCFG0 5.
CC112X_AGC_REF 20
CC112X_AGC_CS_THR 19.
CC112X_AGC_CFG1 A9
CC112X_AGC_CFG0 CF
CC112X_FIFO_CFG 0
CC112X_Setting_CFG b
CC112X_FS_CFG 14.
CC112X_PKT_CFG0 20.
CC112X_PA_CFG2 77
CC112X_PKT_LEN 关断
CC112X_IF_Mix _CFG 0
CC112X_FREQOFF_CFG 22.
CC112X_FREQ2 69
CC112X_FREQ1 F8
CC112X_FS_DIG1 0
CC112X_FS_DIG0 5F
CC112X_FS_CAL1 40.
CC112X_FS_CAL0 e
CC112X_FS_DIVTWO 3.
CC112X_FS_DSM0 33.
CC112X_FS_DVC0 17.
CC112X_FS_PFD 50.
CC112X_FS_PRE 6e
CC112X_FS_REG_DIV_CML 14.
CC112X_FS_SPARE AC
CC112X_FS_VCO0 b4
CC112X_XOSC5 e
CC112X_XOSC1 3.
CC112X_PARTNUMBER 48.
CC112X_PARTVERSION 23.
CC112X_SYNC3 93
CC112X_SYNC2 b.
CC112X_SYNC1 51.
CC112X_SYNC0 DE
问题1.相同的寄存器设置值可以在 Arduino UNO 上运行(也可以轮询 GPIO2)、但在 STM32上失败、需要注意设置吗?
问题2.如何确认问题 STX 成功? 读取 MARCSTATE = 0x34? 或者...?
问题3.如果 可以确认 Tx 正常工作(问题2)、则 Tx 和 Rx 都运行相同的寄存器设置、这是否意味着在 Rx 设置为 SRX 后 可以从 Rx FIFO 读取数据? (请参阅下面我的示例 Rx 代码)?
我再次列出了我的代码片段、以显示更清晰的信息。
/******* TX 主程序代码***** /
while (1)
{
TrxSpiCmdStrobe (CC112X_SFTX);
set_didle();
cc112xSpiWriteTxFifo (sendData、strlen (sendData));
执行{
TrxSpiCmdStrobe (CC112X_SFSTXON);
} while (v!= 0x12);
执行{
TrxSpiCmdStrobe (CC112X_STX);
} while (v!= 0x34);
while (!HAL_GPIO_ReadPin (GPIOB、GPIO_PIN_1));//此时将阻止(GPIO2)!!
while (HAL_GPIO_ReadPin (GPIOB、GPIO_PIN_1));//GPIO2引脚
HAL_DELAY (500);
}
/******* RX 主程序***** /
#define RX_FIFO_ERROR 0x11
while (1)
{
trxSpiCmdStrobe (CC112X_Sidle); //首先设置为空闲。 必须在中
执行{
cc112xSpiReadReg (CC112X_MARCSTATE、&marcstate、1);
} while (marcstate!= 0x41);
TrxSpiCmdStrobe (CC112X_SCAL);
trxSpiCmdStrobe (CC112X_SRX);
cc112xSpiReadReg (CC112X_NUM_RXBYTES、&v、1);
//检查 FIFO 中是否有字节
if (v!= 0)
{
//读取 MARCSTATE 以检查 RX FIFO 错误
cc112xSpiReadReg (CC112X_MARCSTATE、&marcstate、1);
//屏蔽 MARCSTATE 位并检查我们是否有 RX FIFO 错误
if ((marcstate & 0x1F)== RX_FIFO_ERROR)
{
//刷新 RX FIFO
TrxSpiCmdStrobe (CC112X_SFRX);
}
其他
{
//从 RX FIFO 读取 n 个字节
cc112xSpiReadRxFifo (rxBuffer、v);
char * msg2 ="接收数据:";
HAL_UART_transmit (&hart2、(uint8_t*) msg2、strlen (msg2)、0xFFFF);
for (int i=0;i<=strlen (rxBuffer);i++)
{
//读取 rxBuffer 数据
}
}
}
trxSpiCmdStrobe (CC112X_SRX);
HAL_DELAY (500);
}
提前感谢