




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
WordSTM32外设驱动库分析及如何实现一、如何控制单片机?
(单片机)的内存映射图解析
这里以(STM32)F429(芯片)为例,讲解下单片机芯片内存映射图。从此图中可以看到芯片的外设被分配了512M的空间,然而真正的外设其实没有使用到512M的内存空间。
然后我们操作外设时,只需要操作它对应的内存地址即可。更加详细的外设内存地址,可以参考芯片的用户手册(不是数据手册)的Memorymap章节。
因为单片机是将外设映射到内存地址上,所以我们可以像操作内存一样来操作外设(写/读)。
我们在操作内存时是通过地址来进行操作的,由于单片机已经将外设与内存进行了映射,所以我们在操作单片机外设时只需要操作外设映射的内存地址就行。
内存如何操作?
在(C语言)中操作内存,我们可以用指针来进行操作。在(汇编)语言中由于没有指针这个概念,所以我们在操作地址时只能用一些内存读写指令来完成。比如:LDR,STR
结构体操作与宏定义操作的对比
C语言——宏定义形式
#define
GPIOA
(*(volatile
uint32_t
*)(0x000800E0))#define
GPIOA_DR
(*(volatile
uint32_t
*)(0x000800E4))#define
GPIOA_MR
(*(volatile
uint32_t
*)(0x00080108))#define
GPIOA_TR
(*(volatile
uint32_t
*)(0x00080108))
C语言——结构体操作
struct
GPIOA_Reg{
volatile
uint32_t
dr;
volatile
uint32_t
mr;
volatile
uint32_t
tr;}GPIOA_REG
汇编语言操作内存
LDR
r0,
=0x00800010MOV
r1,
#2STR
r1,
[r0]
二、(寄存器)方式操作单片机
代码结构框架:
文件结构
一个芯片头文件:外设的地址宏定义以及外设相关的结构体定义
查看芯片的用户手册(注意:不是数据手册)中寄存器对应的相应地址。然后使用宏定义来将它们定义好,同时定义好结构体来更加方便的管理外设寄存器组。这里以STM32F1系列为例
•
一个启动文件:汇编编写的、中断向量表等
•
用户代码文件:剩余就是用户代码文件了
•
各个芯片的外设驱动函数编写(读/写、控制)、以及用户逻辑部分代码。
三、使用HAL库方式操作单片机
HAL库与固件库的区别
HAL全称Hardwareabstractlayer((硬件)抽象层),这是一个大家公认并且遵守的一种函数名称命名、资源定义。因为是统一的命名规范,所以当用户更换芯片平台后由于函数命名与所使用的资源都与具体硬件没有关系,这样就不需要修改用户层代码了。
而所谓的标准库其实就是芯片厂商公司内部自己命名与实现的库并且各个厂商的命名规则不一样,这样就会导致可移植性变差。当用户更换了芯片平台后由于它们各自的A(PI)函数不一样就会导致用户需要修改应用层代码。
HAL库设计
1.HAL框架设计
2.HAL资源命名规则
HAL函数命名规则:
中断与(时钟)设置宏:
回调函数命名规则:
3.文件结构:
一个芯片头文件:外设的地址宏定义以及外设相关的结构体定义
查看芯片的用户手册(注意:不是数据手册)中寄存器对应的相应地址。然后使用宏定义来将它们定义好,同时定义好结构体来更加方便的管理外设寄存器组。这里以STM32F1系列为例
一个启动文件:汇编编写的、中断向量表等。
一个HAL库全局头文件:一些全局的宏定义以及包含其他外设头文件
HAL库文件:芯片外设的驱动函数
四、HAL库组成说明
1.HAL库的数据结构体
•
外设句柄结构体
•
初始化和配置结构体
•
特定的处理结构体(读写/控制)
**外设句柄结构体(跟硬件不相关):**
比如:下面这个串口结构体
typedef
struct{
USART_TypeDef
*Instance;
/*
USART
regis(te)(rs)
base
(ad)dress
*/
USART_InitTypeDef
Init;
/*
Usart
communication
pa(ram)eters
*/
uint8_t
*pTxBuffPtr;/*
Pointer
to
Usart
Tx
transfer
Buffer
*/
uint16_t
TxXferSize;
/*
Usart
Tx
Transfer
size
*/
__IO
uint16_t
TxXferCount;/*
Usart
Tx
Transfer
Counter
*/
uint8_t
*pRxBuffPtr;/*
Pointer
to
Usart
Rx
transfer
Buffer
*/
uint16_t
RxXferSize;
/*
Usart
Rx
Transfer
size
*/
__IO
uint16_t
RxXferCount;
/*
Usart
Rx
Transfer
Counter
*/
(DMA)_HandleTypeDef
*hdmatx;
/*
Usart
Tx
DMA
Handle
parameters
*/
DMA_HandleTypeDef
*hdmarx;
/*
Usart
Rx
DMA
Handle
parameters
*/
HAL_LockTypeDef
Lock;
/*
Locking
object
*/
__IO
HAL_USART_StateTypeDef
State;
/*
Usart
communication
state
*/
__IO
HAL_USART_ErrorTypeDef
ErrorCode;/*
USART
Error
code
*/}USART_HandleTypeDef;
初始化结构体(跟硬件相关):
比如:下面这个串口硬件相关的结构体
typedef
struct{
uint32_t
BaudRate;
/*!
特定的处理结构体(跟硬件有关):
比如:下面这个(ADC)处理处理结构体
typedef
struct
{
uint32_t
Channel;
/*!
2.HAL库公共资源
HALStatus:状态枚举
Typedef
enum{HAL_OK
=
0x00,HAL_ERROR
=
0x01,HAL_BUSY
=
0x02,HAL_(TI)MEOUT
=
0x03}
HAL_StatusTypeDef;
HALLocked:用于防止共享资源被意外访问
typedef
enum{HAL_UNLOCKED
=
0x00,
/*!
公共的宏定义:NULL和HAL_MAX_DELAY
#ifndef
NULL#define
NULL
(void
*)
0#endif#define
HAL_MAX_DELAY
0xFFFFFFFF
3.HAL库中断回调函数实现说明
(1)使用__weak定义好回调函数。如果用户自己重写了回调函数,那么编译器就会使用用户重写的这个回调
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年模具设计师考试章节划分试题及答案
- 2024年体育经纪人考试的主题知识与实际案例分析试题及答案
- 2024年项目管理考试动态分析试题及答案
- 模具设计师考试细节注意试题及答案
- 《我家的好邻居》课件大纲
- 如何在种子繁育中结合环保理念试题及答案
- 福建事业单位考试学习信心提升与试题及答案
- 项目管理敌手分析方法试题及答案
- 游泳救生员的职业压力与应对策略的试题及答案
- 农作物种子繁育员考试中的考生互动与关系建立试题及答案
- 西师大版小学五年级 数学(下)期末测试题(含答案)
- 化工工艺原理考试题库梳理
- 2025-2030氧化铈纳米粒子行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 2024年青岛西海岸新区教育和体育系统招聘工作人员考试真题
- 定金款管理制度
- 2025年货运检查员职业技能鉴定参考试题库(含答案)
- 光伏电站安全培训
- GB/T 37027-2025网络安全技术网络攻击和网络攻击事件判定准则
- 2024年秋儿童发展问题的咨询与辅导终考期末大作业案例分析1-5答案
- DL∕T 796-2012 风力发电场安全规程
- GB/Z 43281-2023即时检验(POCT)设备监督员和操作员指南
评论
0/150
提交评论