lora_test.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #include "radio.h"
  2. #include "project_config.h"
  3. #include "stdio.h"
  4. #include "stm32f10x_it.h"
  5. #include "delay.h"
  6. #include "string.h"
  7. /*!
  8. * Radio events function pointer
  9. * 这个是传参进入其他函数中了,所以用全局变量(局部变量使用完了内存释放可能导致异常)
  10. */
  11. static RadioEvents_t SX126xRadioEvents;
  12. static void SX126xOnTxDone( void );
  13. static void SX126xOnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr );
  14. static void SX126xOnTxTimeout( void );
  15. static void SX126xOnRxTimeout( void );
  16. static void SX126xOnRxError( void );
  17. static void SX126xOnTxDone( void )
  18. {
  19. printf("TxDone\r\n");
  20. Radio.Standby();
  21. Radio.Rx( LORA_RX_TIMEOUT_VALUE );
  22. }
  23. static void SX126xOnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr )
  24. {
  25. uint32_t reciveNumber=0;
  26. Radio.Standby();
  27. printf("RxDone size:%d <rssi:%d, snr:%d> \r\n",size, rssi, snr);
  28. if(size!=4){
  29. printf("recive size != 4 is error\r\n");
  30. } else {
  31. reciveNumber = *(uint32_t *)payload;
  32. printf("recive u32 data = %d\r\n", reciveNumber);
  33. reciveNumber += 1;
  34. Radio.Send((uint8_t *)&reciveNumber, 4);
  35. }
  36. }
  37. static void SX126xOnTxTimeout( void )
  38. {
  39. printf("TxTimeout\r\n");
  40. }
  41. static void SX126xOnRxTimeout( void )
  42. {
  43. Radio.Standby();
  44. printf("RxTimeout retry recive\r\n");
  45. Radio.Rx( LORA_RX_TIMEOUT_VALUE );
  46. }
  47. static void SX126xOnRxError( void )
  48. {
  49. Radio.Standby();
  50. printf("RxError retry recive\r\n");
  51. Radio.Rx(LORA_RX_TIMEOUT_VALUE);
  52. }
  53. bool EnableMaster=true;//主从选择 true为主 false 为从
  54. int lora_test(void)
  55. {
  56. static uint8_t init = 0;
  57. uint32_t u32_count=0;
  58. if(init == 0) {
  59. SX126xRadioEvents.TxDone = SX126xOnTxDone;
  60. SX126xRadioEvents.RxDone = SX126xOnRxDone;
  61. SX126xRadioEvents.TxTimeout = SX126xOnTxTimeout;
  62. SX126xRadioEvents.RxTimeout = SX126xOnRxTimeout;
  63. SX126xRadioEvents.RxError = SX126xOnRxError;
  64. Radio.Init( &SX126xRadioEvents );
  65. Radio.SetChannel(LORA_FRE);
  66. Radio.SetTxConfig( MODEM_LORA, LORA_TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
  67. LORA_SPREADING_FACTOR, LORA_CODINGRATE,
  68. LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
  69. true, 0, 0, LORA_IQ_INVERSION_ON, 3000 );//参数:lora模式,发射功率,fsk用的lora设置为0就可以,带宽,纠错编码率,前导码长度,固定长度数据包(一般是不固定的所以选false),crc校验,0表示关闭跳频,跳频之间的符号数(关闭跳频这个参数没有意义),这个应该是表示是否要翻转中断电平的,超时时间
  70. Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
  71. LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
  72. LORA_SX126X_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,
  73. 0, true, 0, 0, LORA_IQ_INVERSION_ON, false );
  74. if(EnableMaster == true) {
  75. Radio.Send((uint8_t *)&u32_count, 4);
  76. } else {
  77. Radio.Rx( LORA_RX_TIMEOUT_VALUE );
  78. }
  79. init = 1;
  80. }
  81. Radio.IrqProcess( ); // Process Radio IRQ
  82. return 0;
  83. }