开发环境搭建及驱动移植 2

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重定向 

 

执行

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/788919.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索Django:打造高效、可扩展的Web应用(终)

10. Django的静态文件管理与部署 配置静态文件路径收集静态文件部署Django应用 在Django应用程序中,静态文件(例如CSS、JavaScript、图像等)的管理和部署是非常重要的,它们用于美化网页样式、增强用户交互体验等。本节将详细介绍…

STM32重要参考资料

stm32f103c8t6 一、引脚定义图 二、时钟树 三、系统结构图 四、启动配置 (有时候不小心短接VCC和GND,芯片会锁住,可以BOOT0拉高试试(用跳线帽接)) 五、最小系统原理图 可用于PCB设计

C++类 单例模式

例子 请看如下的类和调用: 在您提供的代码片段中,CPathPlanMan 类使用了一个单例模式,这意味着这个类只需要一个实例,并且提供了全局访问点来获取这个实例。这通常用于控制对一个类实例的访问,尤其是在创建实例代价昂…

BetterZip for Mac2024最新mac解压缩软件

作为一名软件专家,对于市面上各类软件都有较为深入的了解,下面介绍的是一款适用于Mac系统的解压缩软件——BetterZip,将从其功能特点、使用方法、用户体验及适用人群等方面进行详细介绍。 BetterZip5-安装包绿色版下载如下: htt…

AWS相关服务说明

互联网网关 官网 # 官网 https://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/VPC_Internet_Gateway.htmlInternet 网关是一种横向扩展、冗余且高度可用的 VPC 组件,支持在 VPC 和 Internet 之间进行通信。它支持 IPv4 和 IPv6 流量。它不会对您的网络流量造…

某音乐平台歌曲信息逆向之参数寻找

如何逆向加密参数:某音乐平台歌曲信息逆向之webpack扣取-CSDN博客 参数构建 {"comm": {"cv": 4747474,"ct": 24,"format": "json","inCharset": "utf-8","outCharset": "ut…

XML与Xpath

XML与Xpath XML是一种具有某种层次结构的文件,Xpath则是解析这种文件的工具 接下来将会解释XML文件的结构和Xpath的基本使用,并且用Java语言进行操作展示。 XML结构 XML(可扩展标记语言)文件具有一种层次结构,由标签…

c++11 标准模板(STL)本地化库 - 平面类别 - (std::ctype) 定义字符分类表(二)

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析&#xff0c;以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 平面类别 定义字符分类表 std::ctype template< class CharT > clas…

Maven是什么? Maven的概念+作用

1.Maven的概念 Maven中文意思为“专家“、”内行“的意思&#xff0c;它是一个项目管理工具&#xff0c;可以对Java项目进行构建、依赖管理&#xff0c;通俗点 就是通过pom.xml文件的配置获取jar包不用手动的去添加jar包。 2.Maven的作用 对于大的工程&#xff0c;需要引用各…

jaihouse介绍

本文来自jaihouse在github上的仓库readme第一段。 https://github.com/siemens/jailhouse?tabreadme-ov-file 原文&#xff1a; Introduction Jailhouse is a partitioning Hypervisor based on Linux. It is able to run bare-metal applications or (adapted) operating …

morkdown语法转微信公众号排版(免费)

morkdown语法转微信公众号排版&#xff08;免费&#xff09; 源码来自githab&#xff0c;有些简单的问题我都修复了。大家可以直接去找原作者的源码&#xff0c;如果githab打不开就从我下载的网盘里下载吧。 效果

5分钟安装docker和docker compose环境

5分钟安装docker和docker compose环境 5分钟安装docker和docker compose环境环境介绍卸载docker环境安装docker安装docker compose 5分钟安装docker和docker compose环境 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑…

第21章 责任区域

< 回到目录 第21章 责任区域 “三个和尚没水吃” 。当某个行为或流程由多人负责时&#xff0c;通常该行为很难保质保量&#xff0c;甚至很难完成。 为了避免这种情况发生&#xff0c;需要将任务分门别类&#xff0c;将每个类别分配给一个人&#xff0c;注意&#xff0c;只…

IP代理池赋能Python网络爬虫

文章目录 什么是IP代理池代理服务器IP代理池的作用IP代理池的构建IP代理池的管理 相关案例IP代理在爬虫中的运用IP代理在数据收集中的运用IP代理在反爬虫中的运用 结语 什么是IP代理池 IP代理池是一个存储了多个可用代理IP地址的资源池&#xff0c;用于在网络爬虫、数据采集、…

C#属性显示

功能&#xff1a; 显示对象的属性&#xff0c;包括可显示属性、可编辑属性、及不可编辑属性。 1、MainWindow.xaml <Window x:Class"FlowChart.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://sche…

Java中的数组及其使用

目录 数组的基本概念 声明数组 创建数组 初始化数组 访问数组元素 数组的遍历 使用for循环 使用for-each循环 多维数组 数组的局限性和替代品 总结 在Java中&#xff0c;数组是存储固定大小的同类型元素的容器。这意味着你可以用一个单一的变量名存储多个项目的集合…

C++(11): 智能指针shared_ptr

1. 概述 shared_ptr智能指针&#xff0c;本质是“离开作用域会自动调整(减小)引用计数&#xff0c;如果引用计数为0&#xff0c;则会调用析构函数”。这样一来&#xff0c;就进化成类似于int、float等的一种会被自动释放的类型。 2. 初始化智能指针 初始化一个智能指针的方式比…

多态的练习

练习1&#xff1a;笔试&面试 题目1&#xff1a;继承成员变量和继承方法的区别 class Base { int count 10; public void display() { System.out.println(this.count); } } class Sub extends Base { int count 20; public void display() …

深入理解ThreadLocal原理

目录 1- 什么是ThreadLocal &#xff1f;2- ThreadLocal的作用&#xff1f;ThreadLocal实现线程间资源隔离ThreadLocal实现线程内资源共享 3- ThreadLocal 原理3-1 ThreadLocalMap3-2 ThreadLocalMap的扩容&#x1f511;1. 为什么会发生扩容&#xff1f;&#x1f511;2. Thread…

Python图像表征空间频率域处理和模式分析

&#x1f3af;要点 Python空间滤波器&#xff1a;&#x1f3af;卷积计算实现均值滤波器。&#x1f3af;非线性中值滤波器。&#x1f3af;最大值/最小值滤波器。&#x1f3af;一阶导数滤波器&#xff1a;索贝尔(sobel)滤波器、普鲁伊特(Prewitt)滤波器、坎尼(Canny)滤波器。&am…