1 开发环境搭建
前言:
STD库-标准外设库 寄存器操作,将一些基本的寄存器操作封装成函数
HAL库-硬件抽象库将这些抽象成了一个抽象层,从使用的角度来看,是与硬件无关的
HAL库优势HAL库是ST未来主推的库,从2015开始ST新出的芯片已经没有STD库HAL库的处理机制比STD库好很多,HAL库支持STM32全线产品HAL库跨芯片的可移植性非常好
1.1 STM32cubmx安装及使用
略
1.2 IAR安装及使用
右键以管理员身份运行 再选择第二项 install
破解
参考Iar for STM8/for msp340/for 8051/Iar for arm 等各种版本安装 破 解过程 - 哔哩哔哩
IAR与Keil区别:
- MDK默认只创建工程,工作区是不会直接创建。如果想多个工程聚合,则首先需要创建一个工作区,然后再添加相应的工程。
- IAR默认是创建工程和工作区,如果想多个工程并存,直接添加即可.
- MDK编译时,只有level的选择;IAR有debug和Release的快速选择
- 默认状态,MDK的工具栏功能比较多,有点繁杂;IAM的比较简洁,但相对,也比较单薄。
- MDK的程序文件,最后必须要有一个新的空行,否则会有编译警告。
IAR常用快捷键
CTRL+B括号匹配选择括号内的多行代码;
CTRL+T自动缩进,格式化选中代码
CTRL+K快注释,屏蔽选中的代码
CTRL+SHIFT+K取消快注释,取消屏蔽选中的代码
2 M0工程建立
2.1 原理图
2.2 建立IO功能映射表
2.3 cubmx配置
系统时钟
选择时钟源 hse
配置倍频 6
使能锁相环配置系统主时钟为48M
usart1:方便调试
选择异步通信
无硬件流控
设置波特率115200
设置DMA接收
spi:lora和lcd总线都是通过spi驱动
选择全双工主机模式
硬件片选不使能 lcd和lora用的1个spi,选了会只能驱动一个设备
设置波特率为1.5MBit/s
时钟极性为低电平驱动时钟
相位为第一个边沿
3 Lora固件库介绍
3.1 官方网址:
LoRa Connect Transceiver, SX1278, 137MHz to 525MHz | Semtech
3.2 数据手册:
1276\1277\1278都是一样的手册(我们使用的是1278,美国用的是1276)
3.3 驱动源码文件结构:
src分析:
其中platform(指硬件平台的驱动源码,不同mcu,如m3、m4)
先只关心下面4个文件
包含几个不同的硬件平台的源码sx12xxEiger是操作 LoRa 芯片相关的接口platform.h 中包含驱动库的配置选项
驱动框架分类
sx1276-Hal.c
3.4 硬件接口设计
4 驱动移植
需要移植哪些驱动源码? 如何把源码添加到IAR工程里? 源码文件我们需要修改吗?
4.1 驱动文件移植
4.2 IAR工程文件添加
打开EWARM,右击添加工作组platfrom和radio
error的原因主要有3个
- 1官方固件库不支持m0
- 2不支持hal库
- 3io口不是和开发板一致
4.3 驱动源码修改
4.3.1 修改硬件平台,把宏定义添加到编译器的设置里面
修改包涵路径
4.3.2 修改sx12xxEiger.c,eiger.h采用m0平台,没有usb
注释前
注释后
初始化工作hal库都做好了,全部注释掉
4.3.3 修改led.c
时钟有关的和初始化内容不需要,注释掉
找到else,其他的硬件平台不需要看,改完对应io口,去掉以前的时间去掉库定义,hal库不支持。pin1随便写,不用
writepin函数修改
编译成功
4.3.4 修改sx1276-Hal.c
没有复位功能
修改后
注释不需要的
不要init
不需要reset
修改writebuff 和readbuff
修改readdio,不需要的dio 3、4、5,不需要硬件修改发送和接收的模式
4.3.5 修改sx1276-hal.h
修改定时器函数
4.3.6 修改spi.c
为什么要修改spi接口?这边使用了,但是官方没有提供
读写单字节数据
编译成功
4.4 LoRa模块上电自检,验证移植成功
搜索的函数复制到main
包含硬件平台
读取硬件平台loraID,printf重定向
执行