LCD显示屏介绍什么是LCD?LCD(Liquid Crystal Display,液晶显示屏)是一种利用液晶材料的光电效应实现显示内容的平面显示设备。LCD广泛应用于嵌入式系统,如智能家居、工业控制、手持设备等。
LCD基本结构LCD主要由以下几部分组成:
液晶层:夹在两片玻璃基板之间,负责成像。
偏光片:用于控制光线的通过与偏振。
电极层:通过电信号控制液晶分子的排列。
驱动电路:实现信号传递,控制显示内容。
背光源:提供照明,使显示内容可见
LCD显示原理LCD的显示原理是通过控制液晶分子的排列方式,改变光线的透射与反射,从而实现不同的显示效果。常见的显示方式有:
静态驱动:每个像素单独控制,适用于小尺寸LCD。
动态驱动:通过扫描方式控制行列,适用于大尺寸LCD。
常见屏幕型号字符型LCD(Character LCD)
特点:只能显示固定字符(如字母、数字),部分支持自定义简易符号。
常见型号:1602(16列2行)、2004(20列4行)等。
接口:并口(HD44780)、部分带I2C/SPI扩展板。
用途:仪表、家电、简单菜单等。
段码屏(Segment ...
触摸屏介绍什么是触摸屏?触摸屏(Touch Panel)是一种能够感知用户手指或触控笔在屏幕表面的操作位置,并将这些触摸信息以坐标数据的形式反馈给主控设备(如MCU、单板计算机等)的输入设备。触摸屏广泛应用于手机、平板、工业控制、人机交互界面等场合。
触摸屏的基本结构触摸屏通常由以下几部分组成:
触摸感应层:通过电容、电阻、红外等方式感应位置变化。
基板(玻璃/塑料):为感应层提供机械支撑。
FPC柔性排线:连接触摸层与主板,传输信号。
触摸控制芯片:如CST816T、GT911等,负责扫描感应层、处理触摸信号、输出触摸坐标。
触摸屏本身只负责采集触摸信息,不负责显示内容。显示内容由LCD、OLED等显示屏负责。
触摸屏类型
电阻式触摸屏
通过两层导电薄膜压接判断坐标,受力即可响应。
优点:支持手指、手套、触控笔,成本低。
缺点:精度有限,寿命短,透光率低。
常见型号:XPT2046、ADS7846、TP4056(控制IC);用于1602、12864等老式LCD的电阻触摸层
电容式触摸屏(主流)
依靠人体导电特性,检测电极阵列的电容变化推算位置。
优点:高透光率,灵敏度 ...
DMA介绍什么是DMADMA,全称Direct Memory Access,即直接存储器访问。
DMA用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作,实现并行的功能
我们知道CPU有转移数据、计算、控制程序转移等很多功能,系统运作的核心就是CPU,
CPU无时不刻的在处理着大量的事务,但有些事情却没有那么重要,比方说数据的复制和存储数据,如果我们把这部分的CPU资源拿出来,让CPU去处理其他的复杂计算事务,是不是能够更好的利用CPU的资源呢?
因此:转移数据(尤其是转移大量数据)是可以不需要CPU参与。比如希望外设A的数据拷贝到外设B,只要给两种外设提供一条数据通路,直接让数据由A拷贝到B不经过CPU的处理。
DMA就是基于以上设想设计的,它的作用就是解决大量数据转移过度消耗CPU资源的问题,有了DMA使CPU更专注于更加实用的操作、计算、控制等。
DMA传输方式DMA的作用就是实现数据的直接传输,主要涉及四种情况的数据传输,但本质上是一样的,都是从内存的某一区域传输到内存的另一区 ...
嵌入式操作系统
未读遇到的问题只执行某个任务,其他任务不执行如果某个任务空跑,没有延时让出CPU的话,其他同等优先级和更低优先级的任务就不会执行,这是典型的 FreeRTOS任务饿死问题
嵌入式操作系统
未读手动移植非常麻烦,上网查
快速移植使用STM32CubeMX快速移植,下面主要讲需要注意的地方:
内核版本选择STM32CubeMX使用的接口并不是原生的FreeRTOS的接口,而是在此基础上进行封装的过后的通用的RTOS的API。具体区别如下:
特点
FreeRTOS原生接口
CMSIS-RTOS接口(V1/V2)
设计者
FreeRTOS作者
ARM公司
可移植性
只能用在FreeRTOS
只要有适配层,可换RTOS
API名称
xTaskCreate, vTaskDelay
osThreadNew, osDelay
文档参考
FreeRTOS官方文档
ARM CMSIS-RTOS文档
CubeMX生成
原生接口不生成适配层
CubeMX自动生成适配层代码
生态适配
多数FreeRTOS例程
适合中间件/跨平台通用库
在中间件中可以找到FREERTOS,但是此时有内核版本CMSIS_V1和CMSIS_V2
CMSIS_V1:大多数情况下V1就够用了
CMSIS_V2:V2比V1其实就是内核版本更高,功能更多了而已
TimeB ...
嵌入式操作系统
未读下面为最基础的用法,其余用法请:看文档学习
RTOS 基础知识 - FreeRTOS™
FreeRTOS介绍基本概念实时操作系统 (RTOS) 是一种体积小巧、确定性强的计算机操作系统。RTOS 通常用于需要在严格时间限制内对外部事件做出反应的嵌入式系统。
RTOS 通常比通用操作系统体积更小、重量更轻,因此 RTOS 非常适用于 内存、计算和功率受限的设备
裸机开发与操作系统裸机开发:一般由一个main函数中的while死循环和各种中断服务程序组成,平时CPU执行while循环中的代码,出现其他事件时,跳转到中断服务程序进行处理,没有多任务、线程的概念。
操作系统(FreeRTOS等):引入操作系统后,程序执行时可以把一个应用程序分割为多个任务,每个任务完成一部分工作,并且每个任务都可以写成死循环。操作系统根据任务的优先级,通过调度器在不同任务见快速切换, 使所有任务看起来像是同时在执行。这就是我们的分时复用
内核内核是操作系统中最底层、最基础的部分
它负责管理硬件资源(比如CPU、内存、外设)和提供系统服务(比如多任务调度、内存分配、进程通信等)。所有应用程序都需要通过内核才能访问 ...
CMSIS什么是CMSISCMSIS全称是 Cortex Microcontroller Software Interface Standard,由ARM公司推出,是专门为ARM Cortex-M、Cortex-A、Cortex-R 微控制器系列设计的一套软件接口标准。
CMSIS 是 ARM Cortex 系列 MCU 软件开发的标准基石,让软件更易移植、更高效、更易用。
我们使用的各种MCU:STM32、GD32、NXP等 Cortex-M 芯片,实际工程中总会用到 CMSIS 的头文件、API 或库。
核心作用
标准化底层驱动和外设访问接口让不同芯片厂家(ST、NXP、GD、兆易创新等)的底层驱动代码更加统一,便于移植和复用。
提供统一的外设寄存器定义和访问方式通过结构体/宏定义等方式描述 Cortex-M 内核和外设寄存器,让开发者用标准方式操作硬件,无需查找手册每个寄存器地址。
支持RTOS和DSP库接口标准化包含CMSIS-RTOS(RTOS抽象标准)、CMSIS-DSP(数字信号处理库)、CMSIS-NN(神经网络库)等。
主要内容
CMSIS-CoreCor ...
嵌入式系统中的内存分布在嵌入式系统中,内存的管理和组织对于系统的性能和稳定性至关重要。内存主要分为 Flash 和 RAM 两大部分,它们各自存储着不同类型的数据,并且系统中还存在着代码区、全局区、堆区和栈区这四个重要的内存区域。
Flash和RAM的数据存储这个只是主要的部分,可能还有一些没算进去
Flash:Flash 存储器用于存储程序代码和一些只读数据,其存储内容可以表示为:Flash = Code + RO-data + RW-data
.text(code):即编译后的二进制文件,是程序执行的指令集合。
.rodata(RO-data):Read Only data,只读数据,例如只读常量、字面量(字符串)等。
.data初值镜像(RW-data):Read Write data,可读写数据,这些数据在程序启动时需要从 Flash 搬运到 RAM的.data段中。
RAM:随机存取存储器,用于程序运行时的数据存储,其存储内容为:RAM = RW-data + ZI-data。
.data段(RW-data):已初始化的可读写数据,如静态变 ...
嵌入式常识
未读STM32三种启动方式STM32有三种启动模式,用户可以通过设置BOOT0和BOOT1的引脚电平状态,来选择复位后的启动模式:
需要注意的是STM32上电复位以后,代码区都是从0x00000000开始的,三种启动模式只是将各自存储空间的地址映射到0x00000000中。
1.Flash启动:将Flash地址0x08000000映射到0x00000000,这样启动以后就相当于从0x08000000开始的,这是我们最常用的模式;
2.SRAM启动:将SRAM地址0x20000000映射到0x00000000,这样启动以后就相当于从0x20000000开始的,用于调试,笔者基本没用过;
3.系统存储器启动:将系统存储器地址0x1FFFF000映射到0x00000000,这样启动以后就相当于从0x1FFFF000开始执行的,值得注意的是这个系统存储器里面存储的其实是STM32自带的Bootloader代码,这其实是一个官方的IAP,它提供了可以通过UART1接口将用户的代码下载到Flash中的功能,下载完以后再切换到从Flash中启动就可以正常运行了。
STM32启动文件startup_st ...
BROM(一级引导加载程序)基本概念MCU的BROM(Boot ROM,启动只读存储器)代码,是指芯片制造过程中被烧录的,固化在MCU芯片内部的ROM中(独立于Flash)的一段代码,无法被用户更改。
MCU最先运行的就是这段代码,它负责设备上电后最底层的初始化工作,判断启动模式、并加载后续的引导程序Bootloader
BROM作用1. 外设初始配置:BROM通常会做一些最基本的硬件初始化,比如时钟设置、存储器控制器配置等。
2. 启动引导(Boot strapping):MCU上电或复位时,BROM会被第一个执行,判断用来决定MCU的启动方式(比如从外部Flash、内部ROM、或者通过串口、USB等下载程序)。
判断条件:通常是检测Strapping pin管脚,决定启动模式
Strapping pin:用于在上电或复位时配置芯片启动行为或工作模式的引脚
例如:
ESP32的Strapping pin引脚是GPIO0、GPIO2
STM32的相关引脚就是BOOT0、BOOT1
通过检测这两个引脚的电平,来判断如何启动
3. 安全机制:BROM可以集成安全启动(Secure ...