嵌入式系统原理及应用(基于STM32)救急专用

2023-11-11

目录

第一章:嵌入式系统概述

第二章:嵌入式系统基础知识

第三章:STM32系列微控制器

第四章:通用输入输出端口

第五章:异常与中断处理

第六章:定时器

第七章:串行通信接口

第八章:模数转换器(数模转换器)


第一章:嵌入式系统概述

嵌入式系统的定义以应用为中心,以计算机技术为基础,软、硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗和应用环境有严格要求的专用计算机系统。

嵌入式系统的特点

  1. 常用于特定的任务
  2. 运行资源有限
  3. 及其关注成本
  4. 有功耗限制
  5. 对实时性有要求
  6. 运行环境差异较大
  7. 对可靠性要求较高
  8. 具有较长的生命周期
  9. 目标代码固化在非易失性存储芯片中
  10. 需要专用工具和方法来进行硬件设计

 嵌入式系统的组成

                                                                                              HAL:硬件抽象层hardware abstraction layer 

① 嵌入式硬件平台:以嵌入式处理器为核心,包括存储器,输入输出接口,网络通信接口等。

②硬件抽象层(HAL):实现硬件与软件的隔离,使得软件不用直接与硬件打交道,提高了系统的可移植性。

③嵌入式系统软件:包括实时操作系统,嵌入式应用软件,嵌入式中间件(用来满足上层软件对运行环境的复用),嵌入式图形系统。


第二章:嵌入式系统基础知识

嵌入式硬件系统:

处理器的特点①体积小        
                         ②支持实时多任务调度                
                         ③具有存储区域保护功能       
                         ④可扩展处理器结构       
                         ⑤较低的功耗

处理器的指令集CISC:复杂指令集

                             RISC:精简指令集


处理器的存储结构
冯·诺依曼结构:

  1. 存储程序:计算机可以将程序指令存储在内存中,计算机可以通过程序计数器(PC)按照指定的顺序执行指令。

  2. 存储器:计算机的存储器被分为内存和外存两个部分,内存用于存储程序和数据,外存用于长期储存数据。

  3. 控制器:计算机具有控制器,可以控制程序流程和数据流动。

  4. 运算器:计算机具有运算器,可以进行算术运算和逻辑运算。

  5. 二进制数值:计算机使用二进制数值来进行数据存储和处理,所有的数据都表示为二进制数值。

 哈佛结构:

     1. 存储器分离:哈佛结构将指令存储器和数据存储器分开,指令和数据采用不同的总线进行传输,可以在同一时间内同时进行指令和数据的存取操作,提高了系统的运行效率。

     2. 并行传输:由于指令和数据分开传输,哈佛结构可以采用不同的总线并行传输,提高了传输效率。

     3. 程序与数据分离:哈佛结构使得程序和数据分离存储,程序可以根据需要动态更改,不会影响数据的存储。

     4. 存储器容量大:由于指令存储器和数据存储器各自独立,可以分别进行扩展,因此哈佛结构的存储器容量可以比冯·诺伊曼结构大得多。

     5. 实时处理:由于指令和数据可以同时传输,因此哈佛结构适用于实时数据处理。

嵌入式微处理器的分类:Arm,MIPS,PowerPC

存储器:

        常用存储器类型:

                             

        常用外部存储器:电子盘,CF卡,SD卡,MicroSD卡

嵌入式系统的开发流程和模式:

        开发流程:                                                   

       开发模式:    


第三章:STM32系列微控制器

STM32F407XX的地址映射:将4GB的线性存储空间划分成8个区,每个区域的容量都是512MB,称为一个Block
几个主要的区:
        1.代码区:包括flash,ccm,系统存储器和选项字节
        2.片内SRAM区:用于存放临时数据的SRAM存储器
        3.片内外设区(Peripheral):对该区域的地址读写就相当于对相应的外设进行操作
        4.FSMC区:用来存放外部静态存储器的地址空间,它包括了访问外部SRAM、NOR Flash、NAND Flash等的地址范围。在使用FSMC时,需要在代码中配置相应的寄存器,使微控制器能够正确地访问外部存储器。
        5.Cortex-M4核内外设区:指Cortex-M4架构在处理器核心包含的外设

STM32系列微控制器命名规则:


第四章:通用输入输出端口

STM32F407有7组GPIO端口:GPIOA~GPIOG,每组16个引脚,编号为0~15

GPIO常用的工作模式:
       
(1)输入模式:引脚输入电平通过TTL施密特触发器转换成0或1并放到数据寄存器中,又分为浮空输入,上拉输入,下拉输入,模拟输入
        (2)输出模式:将0或1写入输出寄存器,在GPIO上对应高低电平,用分为开漏输出,开漏复用输出,推挽输出,推挽复用输出
        (3)复用功能输入输出:将GPIO引脚控制权交给相应外设
        (4)模拟模式:模拟输入与模拟输出,电压信号不做转换

[注]:GPIO作为中断源时,对应的GPIO端口必须配成输入模式啊

        代码实例:

//GPIO初始化代码
static void MX_GPIO_Init (void)
{
GPIO_InitTypeDef GPIO_Initstruct = {0};/*GPIO Ports clock Enable */
_HAL_RCC_GPIOC_CLK_ENABLE();_HAL_RCC_GPIOF_CLK_ENABLE();_HAL_RCC_GPIOH_CLK_ENABLE ();
/*Configure GPIo pin output Level*/
HAL_GPIO_writePin(GPIOF,GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_SET);
/*Configure GPI0 pin output Level*/
HAL_GPIo_writePin(GPIOF,GPIO_PIN_8|GPIO_PIN_9,GPIO_PIN_RESET);
/*Configure GPIo pins */
GPIo_Initstruct.Pin = GPIo_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;GPIO_Initstruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIo_Initstruct.Pull = GPIO_NOPULL;
GPIo_Initstruct.Speed = GPIO_SPEED_FREQ_LON;HAL_GPIo_Init(GPIOF,&GPIO_Initstruct);
}
//实现LED闪烁
int main (void)
{
HAL_Init ();
systemclock_Config ( );
MX_GPIO_Init() ;
while (1)
{
HAL_GPIo_writePin (GPIOF,GPIO_PIN_6,GPIO_PIN_RESET);//点亮DS1
HAL_Delay (500) ;//延时500 ms
HAL_GPIO_writePin (GPIOF,GPIO_PIN_6,GPIO_PIN_SET);//熄灭DS1
HAL_Delay (500) ;
}

第五章:异常与中断处理

中断一般是指外设(片内外设和位带外设)产生的事件,Cortex-M3/M4的异常是由嵌套中断向量控制器(NVIC)统一进行管理的,NVIC最多支持256个中断向量入口,其中0~15是异常入口,偏移量16以上的均为外部中断源。

Cortex-M3/M4的系统地址映射处理器会为总线上每一个可以访问的区域分配一段连续的物理地址,并且会对多个这样的区域按某种方式进行排列,从而形成整个可访问的地址空间,这种地址空间的排列方式称为系统的地址映射。

异常和中断的优先级数值越低,表示优先级越高。(具体看题目怎么要求)

NVIC有3个异常:分别是Reset,NMI,和Hard Fault,他们的优先级是固定的且都是负数,他们的优先级高于其他异常

剩余的中断优先级由NVIC中的IPR0~IPR20寄存器配置,每个IP[7:4]位又分为两部分:
        组优先级(抢占优先级)
        子优先级(响应优先级)

判断优先级的原则:

  1. 组优先级和子优先级,数值越小,优先级越高。
  2. 先判断组优先级,组优先级越高,则优先级越高。
  3. 组优先级相同,子优先级越高,优先级越高。
  4. 当组优先级和子优先级都相同时,那么中断向量表入口地址低的优先级高。

中断抢占(中断嵌套)遵循的规则:

  1.  组优先级高的会打断组优先级低的。
  2. 组优先级相同的,无论子优先级的大小关系怎样,都不能打断。

外部中断和事件: 指由EXIT配置的中断,EXIT的输出最终被映射到NVIC的相应通道,中断向量表中预留了外部中断向量存放的位置,EXIT控制器的每个中断都可以独立配置

中断的触发事件:1.上升沿        2.下降沿        3.双边沿触发

GPIO端口的中断处理函数
(有个印象就行,不会考具体函数的写法)

 代码实例:
 

void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{
/*EXTI line interrupt detected*/
    if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin)!=RESET)
    {
        HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
        HAL_GPIO_EXTI_Callback (GPIO_Pin);//回调函数,写中断服务程序的操作
    }
}

void HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin)
{
    if(GPIO_Pin == GPIO_PIN_3)/*判断是否是GPIo第3脚*/
    {
        if ( HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_6) == GPIO_PIN_SET)/*判断PF6引脚的状态*/
            HAL_GPIO_writePin (GPTOF,GPIO_PIN_6,GPIO_PIN_RESET);
        else
        HAL_GPIO_writePin(GPIOF,GPIO_PIN_6,GPTO_PIN_SET);
    }
}

第六章:定时器

系统定时器(SysTick):是NVIC的组成部分,对应的中断是15,SysTick是简单的24位倒计时器
通过4个控制寄存器来配置:

 HAL库中的SysTick相关函数:

 通用定时器:STM32F4 提供了多个功能强大的定时器,而且每个定时器相互独立,他们之间没有任何资源共享。

定时器的分类
        ①通用定时器:包含输出比较模式,单脉冲模式,输入捕获模式
        ②高级定时器
        ③基本定时器
        ④低功耗定时器
        ⑤高分辨率定时器

通用定时器的特征

 通用定时器的时钟源模式
        1.内部时钟模式:将CK_INT作为时钟源,CK_INT是APBX总线上定时器的输入信号,数值为APBX时钟频率的两倍
       
CK_INT的最大频率:接APB1 84MHz;接APB2 168MHz
        2.外部时钟模式1:时钟源来自触发输入的TRGI信号
        3.外部时钟模式2:选用ETRF信号作为定时器时钟源
        4.定时器级联:是指将主定时器(主模式定时器)设定为从定时器(从模式定时器)的预分频器,当一个定时器处于主模式时,就可以对另一个处于从模式定时器的计数器执行复位,启动,停止等操作

 计数器的计数模式


        1.向上计数:计数器从0开始计数,每到来一个计数时钟信号就将计数值加一,当计数值和TIMx_ARR中的值相同时,计数器产生溢出(上溢),同时计数器从0开始计数,每次溢出都可以选择是否更新事件。


        2.向下计数:计数器从TIMx_ARR开始计数,每到来一个计数时钟信号就将计数值减一,当计数值减到0时,计数器产生溢出(下溢),同时从TIMx_ARR重新加载初值,开始新一轮的计数。


        3.中心对齐(向上/向下计数模式):计时器从0开始计数,每一个时钟信号加1,当计数值和TIMx_ARR中的值相等时,产生计数上溢,紧接着开始进行减1计数,直到计数值为0时产生计数下溢。

        根据更新事件产生的时机又分为:
                                                               中心对齐模式1:下溢时产生更新事件
                                                               中心对齐模式2:上溢时产生更新事件
                                                               中心对齐模式3:上溢和下溢都产生更新事件

 事件更新频率公式

 例如:(假定时钟源的频率是84MHz)

 定时器的输出比较模式:在STM32F4微控制器中,定时器的输出比较模式用于控制输出波形或者指示给定的延时已经到期。输出比较模式会对定时器中计数器的计数值与捕获/比较寄存器的内容进行比较,当它们相同时,就可以进行以下操作。
(1)将输出比较模式和输出极性定义的值输出到对应的引脚上,输出引脚可以选择保持原有电平、改变为有效电平、改变为无效电平或进行电平翻转。
(2)设置状态寄存器中对应的标志位,若中断允许,则产生一次中断。
(3)若使能了相应的 DMA请求功能,则产生一次DMA请求。

 定时器的PWM输出模式:PWM输出模式用于产生固定频率、固定占空比的输出信号。定时器的PWM输出模式有两种类型。
(1) PWM模式1。当计数单元采用向上计数模式时,若计数器的计数值小于捕获/比较寄存器的值,输出有效电平,否则输出无效电平;当计数单元采用向下计数模式时,若计数器的计数值小于捕获/比较寄存器的值,输出无效电平,否则输出有效电平。
(2) PWM模式2。当计数单元采用向上计数模式时,若计数器的计数值小于捕获/比较寄存器的值,输出无效电平,否则输出有效电平;当计数单元采用向下计数模式时,若计数器的计数值小于捕获/比较寄存器的值,输出有效电平,否则输出无效电平。

定时器的输入捕获模式:定时器的输入捕获模式用于捕获定时器各个通道上的输入信号。在输入捕获模式下,当检测到输入引脚上触发信号的边沿时,计数器的当前值将被锁存到捕获/比较寄存器中,并产生捕获事件。当捕获事件产生时,如果使能了中断或DMA,将产生捕获中断或DMA请求。

第七章:串行通信接口

串行通信:串行通信是指将多个比特位按序传输,适用于计算机与计算机,计算机与外设之间的远距离通信,串行通信所需的线路成本低且抗干扰能力强。

并行通信:并行通信是指将多个比特位同时通过并行线路传输,数据传输率比串行通信高,数据线之间容易相互干扰,布线成本高,不适合长距离传输。

串行通信根据数据的传输方向可分为
①单工通信:发送端和接收端是固定的,数据流是单向的。
②半双工通信:数据可以在两个方向上传送,但是数据同一时刻只能衍一个方向传输。
③双工通信:在同一时刻,数据可以进行双向传输。

根据是否共享同一时钟信号可分为
①同步串行通信:共享同一时钟信号。
异步串行通信:没有同一时钟信号。
        其数据帧格式:(1)起始位,0有效
                                 (2)数据位,发送时低位在前,高位在后
                                 (3)校验位,可选
                                 (4)停止位,表示传送一帧数据结束
        异步串行接口

STM32F407中包含了6个USART控制器,其中USART模块包含三个部分:①波特率发生器 ②数据发送器 ③数据接收器
1.对USART通信来说:通信双方接收器和发送器的波特率应该相同,波特率可按照如下公式计算,其中PCLK:USART时钟频率、OVER8:采样系数、USARTDIV:无符号定点数,设置在USART_BRR寄存器中

 

第八章:模数转换器(数模转换器)

ADC是一种将模拟信号转换为离散值的数字信号的转换器,需要经过四个步骤:①取样保持量化编码

根据输出量的含义,ADC分为:直接型ADC,间接性ADC  (不重要)

ADC的主要性能指标:(1)取样时间(2)转换时间(3)采样率(4)分辨率(5)转换精度

ADC转换模式
                        (1)单个通道单转换模式

 


                        (2)多个通道单次转换


                        (3)单个通道连续转换


                        (4)多个通道连续转换

 ADC数据对齐:分为 左对齐,和右对齐

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式系统原理及应用(基于STM32)救急专用 的相关文章

  • MongoDB的基本使用

    基本操作 mongod f mongodb conf 启动mongodb mongo 进入到mongodb控制台 db shutdownServer 关闭服务 user admin db createUser user root pwd r
  • 怎么区分静态网页和动态网页

    在建设网站时 会经常听到静态网页和动态网页 但是他们真正的区别是什么 接下来仔细分析下二者的区别 静态网页是网站建设的基础 静态网页和动态网页之间也并不矛盾 为了网站适应搜索引擎检索的需要 即使采用动态网站技术 也可以将网页内容转化为静态网
  • Response.setContentType对应的类型大全

    Response setContentType MIME 的作用是时客户端的浏览器区分不同种类的数据 并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据 MIME的作用 由于MIME类型与文档的后缀相关 因此服务器使用文档的

随机推荐

  • MySQl心得4--5--数据库视图

    1 修改 查询 删除记录时都会提示多少条记录被影响 但建表不会提示 当表的数据修改后反映到视图 修改 查询 删除视图的命令跟建表时的一样 视图是从一个或多个表 或视图 导出的表 视图是数据库的用户使用数据库的观点 可以根据他们的不同需求 在
  • Jmeter做接口测试-面试题

    一 请说明你用Jmeter做接口测试的整体过程 用Jmeter做接口测试 至少要经过以下几步 1 根据开发提供的接口文档 编写接口测试用例 2 利用JMeter做接口测试 添加线程组和HTTP请求 在HTTP请求中 添加对应的ip地址 端口
  • http连接处理(下)(四)

    1 结合代码分析请求报文响应 下面我们将介绍服务器如何响应请求报文 并将该报文发送给浏览器端 首先介绍一些基础API 然后结合流程图和代码对服务器响应请求报文进行详解 基础API部分 介绍stat mmap iovec writev 流程图
  • CRC算法并行运算Verilog实现

    因为CRC循环冗余校验码的算法和硬件电路结构比较简单 所以CRC是一种在工程中常用的数据校验方法 尽管CRC简单 但在工程应用中还是有些问题会对工程师产生困惑 这篇文章将介绍一下CRC 希望对大家有所帮助 一 CRC算法介绍 CRC校验原理
  • Visual Studio安装时,不能更改共享组件、工具和SDK的位置

    之前安装的时候把安装路径改了 之后卸载不干净 注册表还留有缓存 不能更改位置 如下图 微软官方提供的卸载工具 TotalUninstaller 卸载不干净可以用这个工具 解决办法 更改注册表 HKEY LOCAL MACHINE SOFTW
  • KNN算法分类问题实现介绍和使用

    KNN算法详解 sklearn包介绍 一 sklearn包使用KNN算法 1 准备数据 X np array 5 1 3 5 1 4 0 2 4 9 3 1 4 0 2 4 7 3 2 1 3 0 2 4 6 3 1 1 5 0 2 5 3
  • uniapp的websocket的使用

    1 websocket的封装 uniapp获取websocket返回来的数据可以采用Vuex进行存储 class websocketUtil constructor url time url 是请求的后端的地址 time 是心跳包的时间 t
  • 【MAC终端UI自动化】获取当前最前端的应用程序

    目的 在操作当前应用后 弹出一个系统弹窗 想定位到这个弹窗 方法一 没搞定 期待大佬解答 想到atomac有个获取当前最前端的应用程序的方法getFrontmostApp a atomac getFrontmostApp print a 返
  • Proxy error: Could not proxy request... 问题解决

    背景 最近在项目中发现一个问题 每次npm run serve 时都是正常的 每次重新编译后就会有下面的提示 Proxy error Could not proxy request Manage repairDelivery settlem
  • cppkafka是什么 和librdkafka关系

    最近日志审计对接日志中心的开发 需要设计kafka相关的一些东西 因此了解了一些 在github 的 kafka官网上看到有 Language bindings 不太清楚其中的 cppkafka 是什么东西 能用来做什么 多方了解后才明白
  • C语言树莓派PICO,RP2040(树莓派Pico) PIO – 实例分析&编程

    这次拿来开刀的是WS2812 具体代码可见 gt https github com raspberrypi pico examples blob master pio ws2812 ws2812 pio program ws2812 sid
  • 什么是边缘计算网关?

    边缘计算网关 简称 边缘网关 将云端功能扩展到本地的边缘设备 使边缘设备能够快速自主地响应本地事件 提供低延时 低成本 隐私安全 本地自治的本地计算服务 同时所有服务都以 Docker 镜像方式安装 真正做到了跨平台 部署快捷 易管理 在链
  • MYSQL----union与limit

    union 1 union操作符用于合并两个或多个 SELECT 语句的结果集 2 union内部的 SELECT 语句必须拥有相同数量的列 列也必须拥有相似的数据类型 同时 每条 SELECT 语句中的列的顺序必须相同 limit 1 l
  • Jmeter使用篇(六) : Jmeter集合点

    配置Jmeter集合点的方法 1 需要设置集合点 进行并发同步 则需要在请求之前进行集合点的设置 具体位置在 添加 定时器 Synchronizing Timer 同步定时器
  • 01-LED-Blink-Demo(开发环境esp-idf)

    Blink Example This example code is in the Public Domain or CC0 licensed at your option Unless required by applicable law
  • 使用 STM32 的 SPI 来读取外部 SPI FLASH 芯片(W25Qxx)

    SPI简介 SPI 是英语 Serial Peripheral interface 的缩写 顾名思义就是串行外围设备接口 是 Motorola 首先在其 MC68HCXX 系列处理器上定义的 SPI 接口主要应用在 EEPROM FLASH
  • LeetCode刷题笔记:1619.删除某些元素后的数组均值

    1 问题描述 给你一个整数数组 arr 请你删除最小 5 的数字和最大 5 的数字后 剩余数字的平均值 与 标准答案 误差在 10 5 的结果都被视为正确结果 2 解题思路 先排序 再从数组下标5 处开始遍历 到数组下标95 截止 3 代码
  • 设计模式1:单例模式、工厂、创建者、原型

    设计模式 一种抽象 总结 Gang of Four GOF 分类 3大类23种 创建型模式 结构型模式和行为型模式 几个设计原则 接口分离 依赖倒置 原则 编程面向接口而不是实现 单一原则 单一部分完成特定的分类功能 封装 开闭原则 对修改
  • Ubuntu14/16 PCL1.7/1.8 opencv2/3/4 编译安装共存

    为了使用cuda和pcl共同编程 而系统带的pcl1 7不带gpu模块 故编译安装pcl完全版 与系统pcl1 7共存 不同分发版本Ubuntu应该没有什么区别 不同版本pcl编译和使用道理也都基本相同 opencv也是一样的道理 PCL
  • 嵌入式系统原理及应用(基于STM32)救急专用

    目录 第一章 嵌入式系统概述 第二章 嵌入式系统基础知识 第三章 STM32系列微控制器 第四章 通用输入输出端口 第五章 异常与中断处理 第六章 定时器 第七章 串行通信接口 第八章 模数转换器 数模转换器 第一章 嵌入式系统概述 嵌入式