低成本使用MCU播放提示音方式
1、音频产生原理物体的振动产生声音,下图是一段音频波形,可以从这张图片中了解一下声音的关键参数采样率:一秒钟有多少个采样点,常见的有8K,16K、32K、44.1K等,可以说采样率越高,音质越高采样位深:一个采样点的音频深度,常见的有8bit或者16bit,震动引起声音,同样是3.3V的电平变化,8bit位深的变化范围是0~255,16bit位深的变化范围是0~65535,位深越高,能表达的音频变
1、音频产生原理物体的振动产生声音,下图是一段音频波形,可以从这张图片中了解一下声音的关键参数采样率:一秒钟有多少个采样点,常见的有8K,16K、32K、44.1K等,可以说采样率越高,音质越高采样位深:一个采样点的音频深度,常见的有8bit或者16bit,震动引起声音,同样是3.3V的电平变化,8bit位深的变化范围是0~255,16bit位深的变化范围是0~65535,位深越高,能表达的音频变
问题描述:最近在使用STM32G0的bootloader下载时,发现拉高boot0后,空片只能烧录一次,然后无论如何拉boot0,再也无法线刷固件了,通过查看文档解决了此问题1、STM32G0系列与旧款STM32启动的不同之处旧款STM32 boot启动方式:STM32G0 boot启动方式:不同之处:简单来说,G0系列多了个选项标志位,也就是nBOOT_SEL,如果nBOOT_SEL为0,则外部
在lvgl中,当两个页面之间互相切换时,先将第一个页面的控件全部删除,在创建新页面的控件,但是有时执行后会发现会出现内存泄漏:两个页面来回切换,内存占用不断提高,直到卡死。1、情况复现使用最简单的方式复现问题,模拟器新建两个页面,每个页面在创建时新建一个style对控件进行修饰,不断切换页面后,内存占用会不断升高现象截图:测试代码:static lv_style_t style ; static
前段时间写了一篇文章描述FSM(有限状态机),但是在有些情况下业务比较复杂,就会使用到HFSM(层次状态机),使用层次状态机,将复杂的业务分解为几个大状态,每个大状态再维护自身内部的小状态,可以使代码更加条理,增加代码的可读性与可维护性1、层次状态机思想类似于FSM,层次状态机也具有这几个部分:状态、事件、转换、运行。状态(State):系统或程序可能处于的不同状态,例如"待机"、"运行"、"暂停
1. 前言在lvgl中经常需要显示大量图片,但是MCU的内部flash不足以保存大量的图片,因此需要将图片保存在外部flash上,通过SPI或者QSPI方式读取。适用于嵌入式的文件系统较多,例如fatfs,但是较为占用资源,并且在文件较多的情况下,读取文件需要查目录,导致速度慢,fatfs的增删改功能我们也用不上,因此想到写一个精简版的静态文件系统。2.实现过程lvgl静态文件系统就是将文件保存在
1、LVGL单缓冲区刷屏流程任务启动之后,lvgl按需往屏幕上刷数据,阻塞等待刷屏完成,继续运行lvgl任务,重复此流程2、LVGL双缓冲区刷屏流程启动之后,lvgl按需往屏幕上刷数据,在触发SPI DMA发送后,前台继续处理LVGL任务,并且渲染在另一个缓冲区中,SPI传输则在后台发送,不占用CPU时间,等到后台的SPI传输完成,向上告知LVGL可以继续刷屏了,lvgl再将另一个缓冲区的数据推到
1、前言先写一个简单的测试程序并且运行:#include <stdio.h> #include <stdlib.h> #include <time.h> int array[1024][1024] = {0}; int main() { int begintime,endtime; printf("start\r\n");
1、模块简介按键检测模块用于嵌入式系统上实现按键的扫描,实现按键的触发检测,并对短按、长按等状态进行识别检测。2、需求分析按键检测需要可以识别多个按键的多种事件触发,并且需要对事件做出响应处理。功能性需求可以实现多个按键检测实现按键扫描事件检测和事件回调触发非功能性需求方便移植方便添加按键代码实现简洁易读本文实现的按键模块主要有以下事件:按下事件释放事件短按事件双击事件长按X秒事件长按保持事件(比
你是否对C语言命令行黑框感到厌倦,今天来为你的C编程增加一些可视化窗口吧!1、windows下安装C编译器这对于一个开发者来说简直是太业余了,如果你是一个开发者,你的电脑上怎么会没有gcc呢,如果你是一个新手,可以转到这个链接:https://zhuanlan.zhihu.com/p/355510947。我们可以通过在命令行输入gcc来验证是否安装成功PS C:\Users\13588\Deskt
1、什么是IPC在做一个比较简单的项目时,我们可以使用全局变量等作为标志位进行逻辑判断,但是在功能较多的项目上时,使用全局变量作为程序间的标志位当然是不可行的,代码将会混乱且复杂,不利于解耦,因此需要使用到IPC(Interprocess communication),IPC是模块间的通信组件,主要实现的是任务之间的消息转发,广播等功能,模块功能和实现都较为简单。2、需求分析模块间的消息传递主要是