完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
LORA驱动移植
一、LORA驱动驱动程序 1.DIO0-DIO3为lora模块的输出引脚,连接的单片机引脚需要对应配置为输入模式进行检测。 2.SPI_MOSI、SPI_MISO、SPI_SCK、CS脚为lora模块和stm32之间的spi接口引脚。 3.L_RST是lora模块的复位引脚,对应stm32的IO口要配置为输出模式。 二、移植步骤: 1.打开STM32CubeMX,选择ACCESS TO MCU SELECTOR 自己的芯片 。各管脚 ①DIO0 -DIO3为GPIO_INPUT② 配置SPI1_CS和LRST配置为GPIO_OUTPUT模式(注意CS脚这里是普通模式输出) ③SPI1_MOSI、SPI1_MISO、SPI1_CLK为标准SPI接口。 ④然后再对各管脚进行选择和展开处:系统核心,PB管脚设置,全双工管脚,在用户标签改LRST,不是L_管脚标签改为LRST, 不是L_ Host),在Parameter Settings里将Data Size设为8 Bits,Prescaler(for Baud Rate)设为4部分,(注:灰色的Baud Rate与Set的Prescaler(for Baud Rate)和STM32的主时钟频率有关,下一步设置STM32的主时钟频率)其他参数默认不变,如下所示: 4 设置STM32的主时钟频率如下为48MHz 此时的SPI1: 5.在Project Manager的Project里,自定义项目名称和设置项目路径,Toolchain/IDE选择MDK-ARM V5。 6.勾选,这个选项使每个外设生成一个.c和.h文件,让7.点击GENERATE CODE 再点击Open Project自动生成工程。 自动生成的工程如下: 先关闭工程,下一步是代码移植。 三、代码移植 1.解压官方 解压后在src下找到复制平台和收音机文件夹 再找到自动生成的工程路径 在自动生成的工程下,新建一个命名为lora的文件夹,在lora下贴平台和收音机文件夹 2。打开LoraDrive工程并全新的两个文件夹lora/lora/platform(还是radio重新新建过程就在中卡住,关闭工程重新打开工程新建一次,卡就重新启动电脑) 新建工程后如下: 3.分别给新建的文件夹添加两个文件… _ _ _ .h文件路径 5.最关键的地方来了!!! ①删除loraplatformsx12xxEigerspi.c和spi.h文件(该文件没用,但名称和cubemx生成的spi初始化文件名相同会导致后面编译失败)。 ②打开platform.h文件,再打开宏定义#define PLAFORM SX12Eiger(默认的手动定义这里是被注释掉的,所以我们要打开它,我用的是Source Insight4.0打开的platform.h文件,用其他软件打开也可以,看个人习惯。更改后记得保存) ③打开sx12xxEiger.c文件,屏蔽或删除该文件内的所有函数。(我这里就是用Keil5 MDK打开sx12xxEiger.c文件,Ctrl+A全选,详细选择注释选择注释) ④打开sx12xxEiger.h文件,修改#include “stm32f10x.h” #include “stm32f0xx_halh” ⑤sx1276-Hal.h中#define GET_TICK_COUNT( ) HAL_GetTick ⑥的错误主要都集中在sx1276-Hal.c文件,该文件也是实现移植的接口。该文件代码接口如下(全选替换成修改代码就可以了): /* * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER. * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. * * Copyright (C) SEMTECH S.A. */ /*! * file sx1276-Hal.c * brief SX1276 Hardware Abstraction Layer * * version 2.0.B2 * date Nov 21 2012 * author Miguel Luis * * Last modified by Miguel Luis on Jun 19 2013 */ #include #include #include "main.h" #include "spi.h" #include "gpio.h" #include "platform.h" #include "../../radio/sx1276-Hal.h" uint8_t SpiInOut( uint8_t outData ) { uint8_t Rxdata; HAL_SPI_TransmitReceive(&hspi1,&outData,&Rxdata,1, 1000); return Rxdata; } void SX1276InitIo( void ) { } void SX1276SetReset( uint8_t state ) { if(state==RADIO_RESET_ON) { HAL_GPIO_WritePin(LRST_GPIO_Port,LRST_Pin,GPIO_PIN_RESET); } else { HAL_GPIO_WritePin(LRST_GPIO_Port,LRST_Pin,GPIO_PIN_SET); } } void SX1276Write( uint8_t addr, uint8_t data ) { SX1276WriteBuffer( addr, &data, 1 ); } void SX1276Read( uint8_t addr, uint8_t *data ) { SX1276ReadBuffer( addr, data, 1 ); } void SX1276WriteBuffer( uint8_t addr, uint8_t *buffer, uint8_t size ) { HAL_GPIO_WritePin(SPI1_CS_GPIO_Port,SPI1_CS_Pin,GPIO_PIN_RESET); SpiInOut( addr | 0x80 ); for(uint8_t i = 0; i < size; i++ ) { SpiInOut( buffer ); } HAL_GPIO_WritePin(SPI1_CS_GPIO_Port,SPI1_CS_Pin,GPIO_PIN_SET); } void SX1276ReadBuffer( uint8_t addr, uint8_t *buffer, uint8_t size ) { HAL_GPIO_WritePin(SPI1_CS_GPIO_Port,SPI1_CS_Pin,GPIO_PIN_RESET); SpiInOut( addr & 0x7F ); for(uint8_t i = 0; i < size; i++ ) { buffer = SpiInOut( 0 ); } HAL_GPIO_WritePin(SPI1_CS_GPIO_Port,SPI1_CS_Pin,GPIO_PIN_SET); } void SX1276WriteFifo( uint8_t *buffer, uint8_t size ) { SX1276WriteBuffer( 0, buffer, size ); } void SX1276ReadFifo( uint8_t *buffer, uint8_t size ) { SX1276ReadBuffer( 0, buffer, size ); } inline uint8_t SX1276ReadDio0( void ) { return HAL_GPIO_ReadPin(DIO0_GPIO_Port,DIO0_Pin); } inline uint8_t SX1276ReadDio1( void ) { return HAL_GPIO_ReadPin(DIO1_GPIO_Port,DIO1_Pin); } inline uint8_t SX1276ReadDio2( void ) { return 0; } inline uint8_t SX1276ReadDio3( void ) { return HAL_GPIO_ReadPin(DIO3_GPIO_Port,DIO3_Pin); } inline uint8_t SX1276ReadDio4( void ) { return 1; } inline uint8_t SX1276ReadDio5( void ) { return 1; } inline void SX1276WriteRxTx( uint8_t txEnable ) { } ⑦编译,MDK的编译会强制每个.c或.h文件最后都要空一行,根据提示把警告的文件后面回车多添加一行新行。 添加新行错误后,在七步更改代码中又重新出现了一个示例,看看有没有文件漏出新行,或者如果定义其他的时候是否还有其他输入字符。我上个截图中除了需要添加新行外,就还有其他错误。经过逐步检查发现在第⑤步修改sx1276-Hal.h中#define GET_TICK_COUNT( ) HAL_GetTick() 时有中文输入法的出现,更改之后再保存,编译,就没事啦。 最终编译成功如下: 到这里,官方LORA的驱动移植就完成啦~ 就可以基于lora的驱动后我们自己编写的应用代码了。 |
|
|
|
只有小组成员才能发言,加入小组>>
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
1739 浏览 0 评论
3339 浏览 9 评论
3017 浏览 16 评论
3508 浏览 1 评论
9106 浏览 16 评论
1224浏览 3评论
633浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
621浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2363浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1928浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-14 17:46 , Processed in 1.251140 second(s), Total 76, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号