通过下述链接获取相关demo
https://docs.ai-thinker.com/%E5%BC%80%E5%8F%91%E8%B5%84%E6%96%99
如下图所示为初始化硬件的函数:
NVIC_PriorityGroupConfig()函数将中断优先级分组配置为4,4位全部分配为抢占式优先级;PB12引脚设置为控灯引脚,用来指示程序发送或收到数据;将时钟配置为1ms执行一次中断函数,中断函数内容如下图:
main函数如下图所示:
其中使用函数ExampleLLCC68ReciveDemo()和函数ExampleLLCC68SendDemo()用来设置Ra-01SCH-P模组选择使用该模组进行接收还是发送;
1) ExampleLLCC68ReciveDemo()函数
ExampleLLCC68ReciveDemo()函数内容如下图所示:
其中注册了五个回调函数:
LLCC68OnTxDone():
当数据发送完毕执行的回调函数
LLCC68OnRxDone():当接收数据完毕执行的回调函数
LLCC68OnTxTimeout():发送数据超时后执行的回调函数
LLCC68OnRxTimeout():接收数据超时后执行的回调函数
LLCC68OnRxError():接收数据错误后执行的回调函数
Radio.Init( &LLCC68RadioEvents )函数注册了以上五个回调函数,如下图所示为此函数实现;
Radio.SetChannel(LORA_FRE)函数用来设置Ra-01SCH-P模组的射频频率,函数实现如下图所示;
Radio.SetTxConfig( MODEM_LORA, LORA_TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
LORA_SPREADING_FACTOR, LORA_CODINGRATE,
LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
true, 0, 0, LORA_IQ_INVERSION_ON, 3000 )函数用来设置Ra-01SCH-P模组的TX模式参数。
函数参数:LoRa模式、发射功率、FSK模式使用参数(LoRa模式设置为0)、带宽、纠错编码率、前导码长度、固定长度数据包(默认false)、CRC校验、0表示关闭调频、调频之间的符号数(关闭调频此参数无意义),此函数实现如下图所示:
OCP_Value = Radio.Read(REG_OCP)读取当前过流保护设置的最大值;
Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
LORA_LLCC68_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,
0, true, 0, 0, LORA_IQ_INVERSION_ON, false )函数用来设置Ra-01SCH-P模组RX模式的参数。
函数参数:LoRa模式、带宽、扩频因子、编码纠错率、自动控制频率带宽、前导码长度、符号超时时间(接收器等待下一个符号到达的最长时间)、数据包长度是否固定、负载长度、是否CRC校验、是否启用频率跳变、频率跳变周期(需启动频率跳变,否则无效)、是否反转I/Q分量、是否连续接收。
Radio.Rx( 0 )进入接收模式,函数实现如下图所示:
Radio.IrqProcess( )判断是否有事件发生的处理函数,其中可判断事件:TX_DONE、RX_DONE、CRC_ERROR、CAD_DONE、RX_TX_TIMEOUT、PREAMBLE_DETECTED、SYNCWORD_VALID、HEADER_VALID、HEADER_ERROR。函数实现如下图所示:
delay_ms(1)延迟1ms判断一次是否有事件发生;
2) ExampleLLCC68SendDemo()函数
ExampleLLCC68SendDemo()函数是定时发送函数,函数实现如下图所示:
与ExampleLLCC68ReciveDemo()函数的区别在while()循环内,Get_SysTick()用来获取当前程序运行的时间(ms),
if(0==u32_count%1000){
printf("systick=%d ,send u32 data:%d\r\n", Get_SysTick(),u32_count);
if(0==u32_count%2000){
Radio.Send((uint8_t *)&u32_count,4);
}else
Radio.Send((uint8_t *)sendData,(strlen(sendData)+1));
}
u32_count++;
delay_ms(1);
上述代码为每个2s发送一次数据,2s发送一次计数值,发送函数实现如下图所示