河北工业大学嵌入式系统知识点总结二

2024-06-21 01:04

本文主要是介绍河北工业大学嵌入式系统知识点总结二,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

STM32 的最小系统
定义:指以某控制器为核心,可以运行起来的最简单的硬件组成。
组成:电源电路、时钟电路、复位电路、启动电路和程序下载电路。
电压调节器三种工作模式
运行模式、停止模式、待机模式
三种低功耗模式(功耗递减顺序)
睡眠模式、待机模式、停止模式
在 STM32 中,有 4 个时钟源 HSI、HSE、LSI、LSE
HSI 是高速内部时钟,RC 振荡器,频率为 8MHz。
HSE 是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
LSI 是低速内部时钟,RC 振荡器,频率为 40kHz。
LSE 是低速外部时钟,接频率为 32.768kHz 的石英晶体。
STM32 将时钟信号(如 HSE)经过分频或倍频(PLL)后,得到系统时钟,系统时钟经过分频,产生外设所使用的时钟。
PLLMUL:PLL倍频系数,软件设置pll系数,只有再pll关闭情况下可以被写入
PLL支持2~16倍频
复位
目的:将系统强制定位在一个可知状态
三种复位形式:系统复位、电源复位、备份区复位
ARM 时钟复杂的原因
使外设和微处理器协调工作
时钟分开有助于实现低功耗
基于 CMSIS 标准的软件架构主要分为以下 4 层
用户应用层、操作系统及中间件接口层、CMSIS 层、硬件寄存器层
CMSIS 层主要分为三部分
核内外设访问层、中间件访问层、设备外设访问层
FWLib 固件库
固件库是一个固件函数包,它由程序、数据结构和宏组成
包括微控制器所有外设的标准驱动函数(接口)
优点:通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设
使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本
常用外设名称
RCC 复位和时钟控制器
TIM 高级、通用或基本定时器
GPIO 通用 I/O 出端口
EXTI 外部中断/事件寄存器
NVIC 嵌套向量中断控制器
USART 通用同步异步收发器
GPIO 有多组端口(PA、PB 等),每个端口有 16 位(0~15),每个端口有 6 个 32位寄存器(GPIOx_ODR、GPIOx_BSRR),1 个 16 位寄存器(GPIOx_BRR)
GPIO 端口的每个位可以由软件分别配置成多种模式
模拟输入、浮空输入、上拉输入、下拉输入
开漏输出、推挽输出、复用开漏输出、复用推挽输出
最常用的是浮空输入、上拉输入、推挽输出、复用推挽输出
GPIO 速度选择
在 I/O 口的输出模式下,有三种速度,2MHz、10MHz、50MHz。这里的速度
指 I/O 口驱动电路的响应速度而不是输出信号速度。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。
(计算)控制 GPIOB PIN10 输出电平的位绑定区地址是?位别名区地址是?
GPIOB 的地址为 0x40010C00,控制 GPIOB PIN10 输出的寄存器(ODR)地址为 0x40010C0C , 位 绑 定 区 地 址 为 0x40010C0D ( PIN0~PIN7 所 在 字 节 的 地 址 为 0x40010C0C,PIN8~PIN15 所在字节的地址为 0x40010C0C+1),PIN10 位于所在字节 的第 2 位,所以 n=2,位别名区地址为 0x42000000+(0x40010C0D-0x40000000)×32+2×4=0x422181A8
GPIO 固件库 stm32f10x_gpio.c、stm32f10x_gpio.h。
.h 头文件包含函数声明及函数 使用的变量,如 GPIO_Speed_TypeDef 的定义在.h 头文件中。
.c 文件包含函数的具体实 现,如 GPIO_Init 函数的具体函数体在.c 文件中。定义 GPIO 寄存器组的结构体 GPIO_TypeDef 在库文件 stm32f10x.h 中
ODR、BSRR、BRR 三个寄存器理解
参考gpio篇最后的示例程序
0 为低电平,1 为高电平。
ODR 寄存器直接控制端口某位的输出电平,如 GPIOA->ODR=0xfffe,意思是 GPIOA 的 PIN0 位置 0,其他位置 1。
BRR 和 BSRR 寄存器通过控制 ODR 寄存器的位来间接控制端口某位的输出电平。
BSRR 对 ODR 的每位进行置 1 和复位操作(置 0),BRR 对 ODR 的每位进行复位操作 (置 0)。
BSRR 的低 16 位中,某位置 1 就代表着 ODR 的某位置 1,也就代表着GPIOX 的某位置 1。BSRR 的高 16 位中,某位置 1 就代表着 ODR 的某位置 0,也就代表着 GPIOX的某位置 0。若高 16 位和低 16 位同时设置且都对应 ODR 的某一位,则以低 16 位为准。
例如 GPIOA->BSRR=0x00040002,意思是 PIN3 置 0,PIN2 置 1。
GPIOA->BSRR=0x00040004,意思是 PIN3 置 1。
在 BRR 的 16 位中,某位置 1 就代表着 ODR 的某位置 0,也就代表着 GPIOX 的某位置 0。例如 GPIOA->BRR=0x0004,意思是 PIN3 置 0。
中断:单片机执行主程序时,由于某个事件的原因,暂停主程序的执行,调用相应的程序处理该事件,处理完毕后再自动继续执行主程序的过程。
中断通道:处理中断的信号通路,每个中断通道对应唯一的中断向量(中断服务程序的入口地址)和中断服务程序(为处理中断而编写的程序),但可具有多个中断源
NVIC 用来设置中断优先级,分为占先优先级和副优先级
高占先优先级的中断可以打断低占先优先级的中断服务,构成中断嵌套相同占先优先级的中断之间不能构成中断嵌套。
副优先级不可以中断嵌套。但占先优先级相同但副优先级不同的多个中断同时申请服务时,先响应副优先级高的中断。
当占先优先级和副优先级都相同的多个中断同时申请服务时,首先响应中断通道所对应的中断向量地址低的中断。
中断的优先级时针对中断通道的。中断通道对应的多个中断源的执行顺序,取决于中断服务程序
中断优先级控制位有 0~4 共 5 组,优先级越小,级别越高
中断和事件
中断是需要 CPU 参与的,需要软件的中断服务函数才能完成中断。
事件是靠脉冲发生器产生一个脉冲,进而由硬件自动完成这个事件。
事件机制提供了一个完全由硬件自动完成触发到产生结果的一个通道,不需要软 件的参与,降低了 CPU 的负荷,节省了中断资源,提高了响应速度,事件是利用硬件来提升CPU 芯片处理事件能力的一个有效方法。
USART 的接口通过 RX(接受数据输入)、TX(发送数据输出)和 GND 三个引脚与其他设备连接在一起。
帧的字长可以为 8 或 9 位,
在起始期间,TX 引脚处于低电平,即起始位是 0
在停止位期间,TX 引脚处于高电平,即停止位是 1
完全由 1 组成(从起始位到终止位)的帧成为空闲帧
完全由 0 组成(从起始位到终止位)的帧成为断开帧
起始位是 0,停止位是 1,中间的数据位全 1 是全 1 帧
起始位是 0,停止位是 1,中间的数据位全 0 是全 0帧
停止位有 0.5、1、1.5、2 位的情况
波特率是每秒钟传送二进制位数,单位为位/秒,表征数据传输速度,不是字符实际传输速度。字符的实际传输速度指每秒钟所传字符帧的帧数。
(计算)波特率=fPCLX/(16×USARTDIV),单位 kb/s
取 36MHz 或 72MHz,适用时要先乘 1000,把单位换成 KHz
USARTDIV 的数据存在了寄存器 USART_BRR 中,USARTDIV 和USART_BRR 的换算如下:
假设 USART_BRR=0x1BC,则 USARTDIV=(0x1B.C)=1×16^1+11×16^0+12×16^-1=27.75D
假设 USARTDIV=25.62,则
Fraction=0.62×16=9.92≈10=0x0A
Mantissa=25=0x19
故 USART_BRR=0x19A。
当 36MHz 时,波特率=36000/(16×25.62)=87.82kb/s
假设 USARTDIV=50.99,则 Fraction=0.99×16=15.84≈16=0x10,Mantissa=50=0x32,
故 USART_BRR=0x330。当 72MHz 时,波特率=72000/(16×50.99)=88.25kb/s
串行通信
异步通信方式:发送方和接收方采用独立的时钟
同步通信方式:每个数据块的开头以同步字符 SYN 加以指示,没有起始位和停止位。
STM32 定时器类型
2 个高级控制器 TIM1、8,4 个通用定时器 TIM2、3、4、5,2 个基本定时器 6、7,1 个实时时钟 RTC,2 个看门狗定时器和 1 个系统滴答定时器SysTick。独立看门狗比窗口看门狗的时间精度低,但是它可以独立工作。SysTick 可用于精确延时到 us、ms 级别。RTC 提供日历/时钟。
APB1 不但要为 TIM2~7 提供时钟,而且还要为其它外设提供时钟;设置这个倍频器可以在保证其它外设使用较低时钟频率时,TIM2~7 仍能得到较高的时钟频率。
通用定时器 TIMx 的计数模式有向上计数模式、向下计数模式和中央对齐模式
(计算)定时时间=(预分频器+1)×(自动装载寄存器+1)/脉冲频率=(TIM_PSC+1)× (TIM_ARR+1)/CK_PSC=(TIM_Prescaler+1)×(TIM_Period+1)/TIMxCLK

这篇关于河北工业大学嵌入式系统知识点总结二的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1079765

相关文章

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL