

本文适用于零基础,手把手搭建基于STM32单片机控制亿佰特公司E22-xxxMxx、E220-xxxMxx、E32-xxxMxx的LoRa模块,旨在降低M系列LoRa模块开发难度,帮助大家更快上手M系列的LoRa模组。《零基础搭建基于STM32单片机的M系列LoRa模块透传教程一》主要介绍了CubeMX代码文件的生成,本文将会介绍 Keil代码的移植 为核心教程。
本文使用E22系列模块,使用的射频芯片为sx126x,可以在Semtech官网进行下载sx126x驱动文件,下载地址如下https://github.com/Lora-net/sx126x_driver/archive/refs/tags/v2.2.zip 。
把下载好的文件解压缩,得到“sx126x_driver-x.x.x”文件夹,把此文件夹移动到XXSTM32_MDrivers项目的驱动文件夹下。打开keil工程“STM32_M.uvprojx”,按照如图1所示,添加sx126x驱动.c文件。

图1
再通过图2所示,添加sx126x驱动.h文件。注意“序号5”文件路径是XXSTM32_MDriverssx126x_driver-2.2src。

图2
e22_hal.c代码见附件1,e22_demo.c代码见附件2。
在XXSTM32_MCoreSrc文件下创建“e22_hal.c”文件,名字可以自己取。然后按照图3所示,添加e22_hal.c文件。

图3
然后在e22_hal.c文件中进行代码的编写,先引用sx126x、gpio和spi的头文件,如图4所示。

图4
编写射频模组复位函数和状态忙等待函数,如图5所示。

图5
编写射频模组唤醒函数,如图6所示。

图6
编写射频模组寄存器写入函数,如图7所示。

图7
编写射频模组寄存器读取函数,如图8所示。

图8
编写射频模组发送和接收切换函数,如图9所示。

图9
最后在e22_hal.h文件的最末尾加上如下代码,详细见图9(2)所示。
sx126x_hal_status_t sx126x_rf_switch_tx(void);
sx126x_hal_status_t sx126x_rf_switch_rx(void);

图9(2)
在XXSTM32_MCoreSrc文件下创建“e22_demo.c”文件和e22_demo.h,名字可以自己取。然后在Keil中像添加e22_hal.c文件一样添加e22_ demo.c文件。
然后在e22_demo.c文件中进行代码编写,如图10所示,引用头文件和书写相关结构体,注意配置默认参数时,要注意自己模块的初始频率,本文使用的170MHz的频率,因此选择frequency_mhz = 170。

图10
编写射频模组SPI读写测试和晶振启动测试函数,如图11所示。

图11
编写射频模组初始化函数,如图12所示,注意图中红色框框的内容,选择自己模块的对应频率,本文使用模块的频率为170Mhz。

图12
编写射频模组重新配置参数函数,如图13所示。

图13
编写射频模组的射频发射函数,如图14所示。

图14
编写射频模组的持续接收函数,如图15所示。

图15
编写射频模组查询是否有接收数据的函数,如图16所示。

图16
编写射频模组中断响应函数,如图17和图18所示。

图17

图18
在main.h文件中,添加头文件引用,结构体和函数声明,代码如下,具体见图19和2.20所示。

图19

图20
在stm32f4xx_it.c文件中(不同型号的单片机的文件名不一样),添加中断回调函数,最好在void EXTI3_IRQHandler(void)函数下方,添加如下函数,详细见图21所示。
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if( GPIO_Pin == DIO1_Pin )
{
e22_demo_dio1_interrupt_callback();
}
}

图21
在main.c文件中,while(1)前面和while(1)里面添加如下代码,详细见图2.1所示。
e22_demo_init();
e22_demo_menu_config( &user_config );
e22_demo_receive();
static uint8_t rx_mode_buffer[255];
static uint8_t rx_mode_length = 0;
int8_t rx_rssi = 0;
if( e22_demo_check_rx_done( rx_mode_buffer, &rx_mode_length, &rx_rssi) == true )
{
/* 如果接收到数据,灯进行闪烁 */
HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
}

图2.1
软件配置好了,接线按照STM32CubeMX配置的进行连线,下图2.2是本文使用的单片机与无线模块的接线,最后下载程序到单片机,射频模块接上天线,最终完成接收的功能。注意,接收到信息并未处理,请自主实现,本教程模组接收到信息时,对应LED灯闪一下。

图2.2
在main.c文件中,while(1)前面和while(1)里面添加如下代码,详细见图2.3所示。
e22_demo_init();
e22_demo_menu_config( &user_config );
e22_demo_receive();
uint8_t value[12] = {0x54,0x58,0x2E,0x30,0x31,0x30,0x2E,0x30,0x30,0x34,0x2E,0x00};
uint8_t tx_length = 0;
e22_demo_transmit( (uint8_t*)value , 12);
HAL_Delay(500);
HAL_GPIO_WritePin( LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
HAL_Delay(500);

图2.3
软件配置好了,接线按照STM32CubeMX配置的进行连线,最后下载程序到单片机,射频模块接上天线,最终完成发送的功能,每隔0.5秒发送一包数据。
今天的分享就到这里啦,EBYTE每一天都致力于更好的助力物联化、智能化、自动化的发展,提升资源利用率,更多LoRa模组产品和LoRa技术资料,感兴趣的小伙伴可以登录我们的亿佰特官网和企业公众号(微信号:cdebyte)进行了解,也可以直接拨打400电话咨询技术专员!
相关阅读:
3、基于STM32核心板的E01和E01C无线模块驱动移植案例教程1
7 X 24 销售服务热线
4000-330-990深圳办事处柯经理:18218726658 无锡办事处刘经理:13558641933
成都总部销售经理:
秦 科(无线模块):18884314654 冯子恒(无线模块):18828049434
蔡友银(无线模块):13882211021 葛宇龙(通信设备):19138800613
胡兵(外贸销售经理):18584911141、 sales06@ebyte.com
业务邮箱:support@cdebyte.com 全国销售投诉电话:19934352316
地址:四川省成都市高新西区西区大道199号B5栋(前台座机:028-61543675)
©© 成都亿佰特电子科技有限公司【版权所有】 蜀ICP备13019384号


