版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
手把手教你学STM32初识STM32手把手教你学STM321,嵌入式的概念2,固件库支持包3,库文件的引用4,HAL库的基本知识5,嵌入式编程特点手把手教你学STM321,嵌入式的概念什么是嵌入式?包含硬件,控制代码和操作界面的综合体硬件部分包括:微控制器和相关电路模块,传感器模块等仅微控制器就有上万种之多由德州仪器研发的微控制器以ST开头M表示微控制器又因这些微控制器的寄存器以32位为主,就统称为STM32手把手教你学STM321,嵌入式的概念目前STM32的主流系列包括F1,F4,H7等等,本学期学习的主要是STM32中的F1系列芯片实际工作中用到的芯片是以性价比为第一条件,并不是谁最先进,谁最新就用谁所以学习STM32要注意触类旁通,举一反三。手把手教你学STM322,固件库支持包芯片的底层逻辑是由二进制代码操作寄存器,从而实现集成电路的相应功能,但我们使用的语言是C语言,C语言并不认识芯片的各个寄存器,这需要通过映射手段让寄存器地址与C语言的地址访问挂钩寄存器地址地址编码及映射文件封装程序引用这些支持文件被称为驱动手把手教你学STM322,固件库支持包以最简单的51单片机为例寄存器P0地址编码为0X80文件REG51.H中进行了声明程序引用:#includereg51.h但STM32的寄存器,不管数量还是复杂度,都有了极大的提升。光靠一个.h文件显然不够用了,所以STM32需要大量的底层文件,我们把这个底层文件的集合称为“固件库”。每一款芯片的寄存器都有区别,所以每款芯片的固件库都是不一样的。当我们要指挥某款芯片的时候,必须要先下载对应的固件库。手把手教你学STM322,固件库支持包ST公司为了自己产品的销路,在自己的官网上提供固件库的下载,并不定期的进行升级。以STM32F103ZE6芯片为例,早期的固件库为现在已经更新到2.5.0以上的版本了高版本的支持文件和低版本支持文件在细节方面肯定有差距,但都能生成HEX文件,即使不升级也可以使用,没有过期之说。手把手教你学STM323,库文件的引用为了保证代码的执行,需要将芯片的常用支持文件打包放在工程文件夹中,新建工程最繁琐的地方就是去拷贝这些支持文件。程序员文件系统支持文件芯片内核支持文件芯片外设支持文件手把手教你学STM323,库文件的引用C语言告诉我们,程序是从主函数开始执行的,但STM32并不只是由C语言说了算,相当一部分是优先于C语言执行的,其执行顺序是:1.内核及启动文件2.预编译指令3.主函数预编译主函数手把手教你学STM323,库文件的引用并不是每次写程序要把所有支持文件都写进去,这是不现实的。正确的做法是,要用到的才引用,不用的不引用。有经验的程序员在创建工程时,会把常用的文件放在相应文件夹下,以方便自己查找和引用。那这么多文件,怎么才知道是不是我要用的呢?这是通过文件的名字来规范的,被引用文件的名字不是乱起的,有严格的命名要求例如,时钟配置文件包含“RCC”的字样;端口文件包含“GPIO”字样编程常见支持文件及中文含义core.h内核dbgmcu.h调试控制器spi.hSPI通信misc.h中断管理dma.h数据传输控制tim.h定时器stdint.h数据定义exit.h外部中断usart.h异步串行通信stdio.h输入输出flash.h内部闪存wwdg.h窗口看门狗stm32f10x.h通用地址映射fsmc.h静态存储sys.h基地址及位定义adc.h模数转换gpio.h端口控制bkp.h备份寄存器i2c.hI2C通信can.h局域网控制iwdg.h独立看门狗cec.hHDMI通信控制pwr.h电源控制conf.h标准外设控制rcc.h时钟配置crc.h硬件加速单元rtc.h内部低耗时钟dac.h数模转换sdio.hSDIO通信编程常用英文词汇(缩写)及中文含义include包含flag标志pin引脚define定义struct结构体hal硬件抽象库typedef数据类型定义enum枚举型set等于1ifndef预编译call调用reset等于0endif预编译结束remap重映射bit比特gpio端口handle句柄data数据rcc时钟enable使能read读TIM定时器disable禁止write写usart串口exit端口中断trigger触发channel通道init写入寄存器conf配置IT中断deinit寄存器恢复div分频status状态cmd命令mode模式手把手教你学STM324,HAL库的基本知识ST为了方便用户开发STM32芯片开发提供了三种支持文件:直接操作寄存器标准库HAL库LL库F0/F1/F3/F2/F4/L1目前已停止维护全系列兼容ST目前主推的库兼容性、易移植性效率低标准外设库(StandardPeripheralLibraries)HAL库(硬件抽象层):HardwareAbstractionLayerLL库:LowLayer全系列兼容与HAL库捆绑发布轻量级、效率高不匹配部分复杂外设执行效率高时间成本高手把手教你学STM324,HAL库的基本知识以一个通用的HAL库工程为例,包含下列文件夹手把手教你学STM324,HAL库的基本知识完整的HAL库还包含复杂外设和中间层的支持文件,文件数量相当庞大,通常程序员只添加编程需要用到的支持文件,即使这样,编译后也会产生大量的关联文件。编译前编译后手把手教你学STM324,HAL库的基本知识为什么要用HAL库代替已成成熟的标准支持库呢?设想这样一种场景:程序员小李专注于STM32F103R6芯片的开发工作,积累了大量的项目代码后来小李辞职了,公司要求用更先进的STM32F407芯片对产品进行升级,程序员小王接手了这个任务。小王非常希望能继承小李开发过的项目代码,只需要做少量修改就可以完成项目迭代。然而,小李的代码是用标准(支持)库写的,换一款芯片就需要重写底层驱动,这不但工作量非常大还很容易出错。如果小李是用HAL库写的项目代码,那么移植起来就非常简单了,HAL库有自己的底层驱动方式,只需要把不一样的连接修改过来,代码就可以直接运行了。因此,不少企业的工程师偏向于写HAL库的程序,在灵活性,可移植性,团队协作方面都有不错的表现。手把手教你学STM324,HAL库的基本知识如何创建HAL库工程1.手动创建,包括创建文件夹,复制需要的支持文件,修改KEIL编译器关键参数等2.复制已有的工程,将不需要的main函数内容清空,编译无错误无警告即可3.使用STM32CubeMax这种专业软件,通过图形化配置和参数设置,即可自动生成HAL库代码工程手把手教你学STM324,HAL库的基本知识如何创建HAL库工程1.手动创建,包括创建文件夹,复制需要的支持文件,修改KEIL编译器关键参数等2.复制已有的工程,将不需要的main函数内容清空,编译无错误无警告即可3.使用STM32CubeMax这种专业软件,通过图形化配置和参数设置,即可自动生成HAL库代码工程手把手教你学STM324,HAL库的基本知识为什么要初始化STM32芯片或者说现在主流的芯片,与传统的51单片机的最大不同在于,必须遵循先声明后使用的规则!芯片的任何资源,默认都是关闭的,其基本功能全无,这样做的好处是,芯片的通电功耗极低,而且各个资源互不影响,只有经过初始化声明的资源才被激活,就好比一栋楼有100间教室,只有在使用的教室才开着灯,其他全是黑的,这就最大程度上节约了能耗。STM32芯片端口定时器通信DMA默认全部关闭手把手教你学STM324,HAL库的基本知识初始化(init)解决了什么问题所有的初始化都是为了回答两个问题:1.本次要使用哪些资源?2.这些资源要怎样用?以定时器资源为例,STM32一块芯片有好几个定时器,初始化需要指明:我要用哪个定时器,我的定时器定时时间是多少,定时器是用来计数还是输出......资源越复杂,需要说明的内容就越多,芯片本质上仍然是由人控制的,就算它有72变,具体变个啥也需要程序员设定。像51单片机那样粗犷的写法是绝对不得行的。例如:P1=0x01,这种写法学单片机时没毛病,但是在STM32中绝对不行。你得先要激活P1这个端口组,然后说这个值是外部赋给端口的还是端口向外输出点个灯什么的。这种和以前完全不同的步骤让很多同学一时半会会难以接受,这是STM32入门时的一大难点。手把手教你学STM324,HAL库的基本知识STM32的初始化一般顺序HAL库工程的初始化有严格的顺序1.进行HAL库的激活2.进行系统时钟的声明3.进行相关资源的声明
手把手教你学STM325,嵌入式编程的特点和难点嵌入式编程和单片机编程相比,难度要高出一截,主要的区别在于1.很少直接访问寄存器2.用文字化语言表示数据而不是直接写数据3.编程要学会位运算
嵌入式的端口输出寄存器叫GPIOx->ODR,按照单片机的传统,可以用赋值写法GPIOA->ODR=0x0001;但是这样写,程序员需要很了解寄存器内容极其含义,对于STM32动则上百个寄存器的规模而言,这是不现实的。解决的方法是,通过支持文件中的官方函数去写寄存器HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);这个函数里一个数据都没出现,但是很多人都能看明白,这是在操作端口组A的第0个引脚,并且其值为1。手把手教你学STM325,嵌入式编程的特点和难点嵌入式编程和单片机编程相比,难度要高出一截,主要的区别在于1.很少直接访问寄存器2.用文字化语言表示数据而不是直接写数据3.编程要学会位运算嵌入式支持文件的所有预定义﹑函数的命名都是有规矩的,只要懂一点英语就不难猜到它的含义,函数参数也有参照。例如:#defineGPIO_PIN_0((uint16_t)0x0001),这句话的意思是,以后“GPIO_PIN_0”就代表0x0001这个值了。所以对端口赋值GPIOA->ODR=0x0001;这句话完成可以改成GPIOA->ODR=GPIO_PIN_0;虽然代码没有出现数值,但是确更容易看懂在操作什么对象函数也是一样的,不妨猜猜这几个函数有什么作用GPIO_PinStateHAL_GPIO_ReadPin();voidHAL_GPIO_WritePin();voidHAL_GPIO_TogglePin();手把手教你学STM325,嵌入式编程的特点和难点嵌入式编程和单片机编程相比,难度要高出一截,主要的区别在于1.很少直接访问寄存器2.用文字化语言表示数据而不是直接写数据3.编程要学会位运算STM32的很多寄存器是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年株洲市天元区工会人员招聘考试备考试题及答案详解
- 手术室宣教课题-1
- GBT 33475.6-2024 信息技术 高效多媒体编码 第6部分:智能媒体传输标准立项发展报告
- 27版53高中同步新教材生物必修1人教版增分测评卷第6章 细胞的生命历程
- 政治学科试题及其详尽答案解析
- 2026中国智能中医诊断设备算法优化与临床验证报告
- 2026中国智能停车场管理系统市场现状供需分析及投资评估规划分析研究报告
- 2026中国显示面板回收利用体系构建与环境效益评估
- 2026运动安全监测大数据平台商业模式与盈利模式创新报告
- 2026尼日利亚手机制造行业市场供需分析及投资评估规划分析研究报告
- 2025江苏中吴环保产业发展有限公司电镀产业园运营总监岗招聘2人笔试备考试题及答案解析
- 个体工商户登记申请书、提交材料规范、经营者变更登记承诺书
- 肌肉注射的试题及答案
- 香港繁体合同协议
- 手术室护理清点不良事件
- 硬质合金生产工艺流程
- 《 大学生军事理论教程》全套教学课件
- AQ-7015-2018-氨制冷企业安全规范
- 生物医学传感与检测原理 课件 第7、8章 生物医学中的化学传感与检测、生物标志物的传感检测新技术
- 消防维保方案(消防维保服务)(技术标)
- mt654 1997煤矿用带式输送机安全
评论
0/150
提交评论