嵌入式系统与单片机|技术阅读
登录|注册

您现在的位置是:嵌入式系统与单片机 > 技术阅读

技术阅读

  • 基于HAL库的stm32呼吸灯实验

    2024-07-08

    本文目标:基于HAL库的stm32呼吸灯实验按照本文的描述,应该可以在你所处的硬件上调通代码。先决条件:装有编译和集成的开发环境,比如:Keil uVision5。板子硬件要求:设计了LED在定时器的接口上呼吸灯是一种常见的电子制作实验项目,其通过控制 LED 灯的亮度变化,实现了一种模拟人类呼吸的效果。作为一种常见的数字调光技术,呼吸灯广泛应用于工业控制、智能家居等领域。而在此过程中,使用微控制器如 STM32 ,则可以更加便捷、灵活地实现呼吸灯的控制。因此,本文将介绍基于 STM32 的呼吸灯实验,通过代码编写、编译下载和调试运行,实现了一个...

  • unity在stm32上的使用

    2024-07-08

    unity在stm32上的使用本文目标:unity在stm32上的使用。按照本文的描述,应该可以在你所处的硬件上跑通代码。先决条件:装有编译和集成的开发环境,比如:Keil uVision5。板子硬件要求:无,芯片自带的串口功能即可完成。源码获取Unity 是一个轻量级的 C 语言单元测试框架,它的设计理念是简单易用。Unity 支持测试套件和测试用例,同时提供了丰富的断言函数,包括比较、异常和日志等。源码入口:GitHub - ThrowTheSwitch/Unity: Simple Unit Testing for Chttps://github.com/ThrowTheSwitch/Unity/源码里面结构,接下来准备一个stm32的基础工程,...

  • 基于RT-Thread Studio学习

    2024-07-08

    1. 新建工程1.1 创建基于芯片的工程1.1.1 选择创建的rtt版本前期准备:从官网下载 RT-Thread Studio,弄个账号登陆,开启rt-thread学习之旅。rt-thread有标准版和nano版两种版本,标准版支持丰富的软件包和各种组件,而nano版本仅支持msh shell功能,这次就创建标准版本的rtt工程,以便后面更方便的使用软件包,选择rtt版本如图所示:也可以使用图标来新建,如图所示:1.1.2. 配置工程基本属性    在上一步点击“RT-Thread项目”后,就进入了工程基本属性的配置界面,如图所示:图中各项的作用描述如下表:序号名称描述①工程名指定新建工程的名...

  • RT-Tread入门学习-新建工程

    2024-07-08

    一、实验目的:新建一个可以跑rtthread的工程。步骤1:需要准备1个裸机工程,这里使用cubemax创建的工程。简单的配置一下串口,配置一下时钟,配置一下硬件下载接口。添加rtthread内核代码其他的不管,可以在生成的代码里面进行修改。简单配置一下要生成的工程生成代码,使用mdk打开工程,添加头文件,和在main中简单添加代码。在main函数中简单添加代码编译下载到板子上,看看串口有没有跑起来。编译成功后,下载软件没跑起来。然后问题定位:board.c的硬件接口与板子配置不一致,修改board.c中的串口参数,成功跑起来代码已经正常跑起来了,第一个...

  • 先立项目后选人

    2024-07-08

    术者,因任而授官,循名而责实,操生杀之柄,课群臣之能者也,此人主之所执也。那就是因任授官,循名责实,赏罚分明。现在的说法就是,帝王是老板,先成立项目,选用一个最适合这个项目的员工来做项目经理。然后再制订项目管理规则和任务目标,根据整个项目的进度和绩效,完成效果,对项目经理进行绩效评估,根据绩效评估定他的奖金。如果完不成的,则扣发工资。以项目为导向,以应事为宗旨。在法家的眼里,没有解决不了的项目,只有不能胜任的庸才。 这种思想很前卫,放眼到现在依旧也是这样办事的,要做某件事,现在找人,找到合适的人在制定规则...

  • 基于ROM和RAM的运行方式的异同

    2024-07-08

    关注+星标 不错过任何一次推送!在数字电子设备中,存储器是至关重要的部分。它负责存储和检索数据,以支持各种计算和数据处理任务。在存储器市场中,有两种主要的类型:随机访问存储器 (RAM) 和只读存储器 (ROM)。尽管都是存储器,但它们之间存在一些关键区别。RAMRAM:Random Access Memory,随机访问存储器。以手机为例,RAM在手机上相当于运行内存,是用来存储和保存数据的。RAM可以通过指令随机的、个别的对各个存储单元进行访问,一般访问时间基本固定,而与存储单元地址无关。RAM的速度比较快,但是其保存的信息需要电力支持,一旦丢失供电即...

  • 数据结构:删除有序链表的重复节点

    2024-07-08

    关注+星标 不错过任何一次推送!给定一个有序单链表(从小到大有序)的头结点head(该结点有值),删除链表中的重复元素,使链表中的所有元素都只出现一次。如当输入 {1,1,2} 时,经删除后,原链表变为 {1,2},对应的输出为 {1,2}。代码实现C语言代码:struct ListNode* deleteDuplicates(struct ListNode* head ) {    if(head == NULL)        return head;    struct ListNode *p;    p = head;    while(p->next != NULL)    {        if(p->val == p->next->val)           ...

  • 什么是交叉编译?为什么需要交叉编译?

    2024-07-08

    关注+星标 不错过任何一次推送!在嵌入式开发中,经常会遇到目标平台资源贫乏,无法运行需要的编译器。亦或是目标平台上不允许或不能够安装需要的编译器。这时候就需要使用交叉编译了。交叉编译本地编译:在当前目标平台下,编译出来的程序,放到当前平台下,就可以运行的交叉编译:在一种平台上编译,编译出来的程序,放到别的平台上运行(编译和运行环境不一样,属于交叉的)这里所谓的平台,实际上包含两个概念:体系结构和操作系统。同一体系结构可以运行不同的操作系统,同一操作系统也可以在不同的体系结构上运行。比如x86 Linux平台,实际上...

  • NAND Flash和NOR Flash的异同

    2024-07-08

    关注+星标 不错过任何一次推送!NAND Flash和NOR Flash是两种常见的闪存类型。NOR Flash是Intel于1988年首先开发出来的存储技术,改变了原先由EPROM和EEPROM一统天下的局面。NAND Flash是东芝公司于1989年发布的存储结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。 图: NAND=NOT AND(与非门), NOR=NOT OR(或非门)相同点两者都是非易失性存储器,可以在断电后保持存储的数据。两者都可以进行擦写和再编程。两者在写之前都要先擦除,擦除是将所有位变为1,而写操作只能使1变成0不同点NOR Flash和NAND Flash各有其优...

  • 不同数据结构的定义代码

    2024-07-08

    关注+星标 不错过任何一次推送!数据结构是相互之间存在一种或多种特定关系的数据元素的集合。线性表线性表:List,零个或多个数据元素的有限序列。⏩ 顺序表:一段地址连续的存储单元依次存储线性表的数据元素。#define MAXSIZE 100        //表的最大长度typedef int data_t;typedef struct{    data_t data[MAXSIZE];  //表的存储空间    int last;             //表的当前长度} *seqlist_t⏩ 单链表:结点存储了数据元素和后继元素的存储地址,链接成表。typedef int data_t;typedef struct node{ ...

  • CPU、MPU、MCU、SOC、SOPC、MCM都是什么?

    2024-07-08

    关注+星标 不错过任何一次推送!在嵌入式开发中,我们经常会接触到一些专业术语,例如CPU、MCU、MPU、SOC和MCM等,这些缩写代表了不同类型的电子处理单元,它们在消费电子、计算机硬件、自动化和工业系统中扮演着重要角色。下面将介绍每个术语的基本含义和它们在实际使用中的区别:CPUCPU (Central Processing Unit) - 中央处理单元:由运算器、控制器和寄存器及相应的总线构成。它可以是一个独立的处理器芯片或一个内含多核处理器的大型集成电路。众所周知的三级流水线:取址、译码、执行的对象就是CPU,CPU从存储器或高速缓冲存储器中取出指令,...

  • TouchGFX界面开发 | 添加触摸屏驱动

    2024-07-08

    关注+星标 不错过任何一次推送! 一文中介绍了如何用TouchGFX点亮屏幕,但是此时屏幕还没有触摸的功能。下面将介绍如何添加触摸屏驱动到TouchGFX中1. STM32CubeMX配置在文中的STM32CubeMX配置基础上,再激活一个定时器,用来给IIC通信提供微秒(us)延时。本文通过软件来模拟IIC通信,因此不使用STM32CubeMX来进行IIC配置2. KEIL中添加触摸芯片驱动本文中的RGB (800 * 480)屏触摸驱动IC为FT5206芯片,该驱动芯片通过 4 根线与外部连接:CT_RST(PI8), CT_INT(PH7), CT_SDA(PI3), CT_SCL(PH6)。由于通过软件来模拟IIC通信,因此不使用STM32CubeMX来...

  • 单片机是如何处理中断的

    2024-07-08

    关注+星标 不错过任何一次推送!1. 什么是中断中断是指CPU在执行当前程序时系统出现了某种状况,使得CPU必须停止当前程序,而去执行另一段程序来处理的出现的紧急事务,处理结束后CPU再返回到原先暂停的程序继续执行,这个过程就称为中断。使得计算机系统具备应对对处理突发事件的能力,使其能及时响应紧急事件。提高处理器效率,如果没有中断系统,CPU就只能按照原来的程序编写的先后顺序,对各个外设进行查询和处理,即轮询工作方式,轮询方法貌似公平,但实际工作效率却很低。以下图片为中断现象在现实日常生活的类比实例:2. 单片机中断处理过...

  • 「编辑器之神Vim」之父去世,网友:他改变了很多人的一生

    2024-07-08

    西风 金磊 发自 凹非寺量子位 | 公众号 QbitAI编辑器之神Vim之父,Bram Moolenaar逝世,享年62岁。(程序员圈子内广为流传的一句话:世界上只有三种程序员,用Vim的,用Emacs,和用其他的。)在Bram家人发布的讣告中写到:我们必须怀着沉重的心情通知您,由于在过去几周里病情迅速恶化,Bram Moolenaar于8月3日去世。Bram的一生将大部分时间都奉献给了Vim,甚至在一个月前,他还在对Vim做着更新、修改工作。Vim凭借它的高效、可扩展、完全免费开源等特性,在程序员群体的影响力可以说是不言而喻的,毫不夸张地评价是:一个程序员,只要用熟了Vim,没...

  • 不用手动编程!AI帮你轻松实现单片机按键输入功能

    2024-07-07

    关注+星标 不错过任何一次推送!从今年年初,OpenAI发布的ChatGPT以摧古拉朽之势席卷全球,短短两个月注册用户数就超过1亿人,是全世界增长速度最快的应用。很多人都说今年是AI元年,其实也是有一定道理的,之前的AI门槛相对较高,很多人没有机会参与其中,现在门槛几乎降到了零,普通人也可以参与到AI的浪潮中,作为一名嵌入式er,当然也要来试用一下,看看AI有多神奇,到底能不能解放我们的双手呢!我准备了一块STM32F429IGT6的开发板,尝试让AI帮我实现按键输入功能,通过按键来控制不同的LED灯。话不多说,下面就开始让AI来帮我们编程吧。1. 向A...

  • 嵌入式技术解析:页、扇区、块的区别

    2024-07-07

    关注+星标 不错过任何一次推送!在嵌入式系统开发中,我们经常会涉及到存储器的概念,其中页、扇区和块是常见的术语。虽然它们都与存储器有关,但它们具有不同的定义和用途。本文将深入探讨页、扇区和块之间的区别,以帮助开发者更好地理解这些概念。1. 页(Page)页是存储器中的最小可擦除单元,也称为擦除页或擦除单位。常见于闪存和EEPROM等非易失性存储器中。页适用于需要频繁读写且存储小量数据的场景,如缓存、寄存器、配置信息等。页具有以下特点:一般具有固定的大小,如2KB或4KB可以独立擦除,不影响其他页的数据用于存储数据,可以读取、...

  • STM32芯片如何同时运行多个任务

    2024-07-07

    点击下方名片关注公众号在嵌入式系统中,需要同时处理多个任务的需求非常普遍。本文将介绍如何在STM32芯片上实现多任务处理,通过合理的任务调度和管理,充分发挥芯片的性能,提高系统的灵活性和效率。下面介绍两种多任务处理的实现方法1. 时间片轮转调度机制时间片轮转调度机制是利用定时器中断来实现的。设置一个定时器,当定时器中断发生时,切换到下一个任务的执行。下面是一个简单的时间片轮转调度机制的示例代码⏩ 定义不同的任务:定义任务的优先级、堆栈大小、维护一个任务列表,通过编写调度器代码,在合适的时机选择下一个任务来执行。#i...

  • 使用STM32CubeMX移植TouchGFX

    2024-07-07

    点击下方名片关注公众号本文基于STM32F429IGT6+RGB(800*480)硬件平台,详细记录了如何利用STM32CubeMX将TouchGFX移植到STM32F429IGT6,并驱动RGB屏幕。相关软件的安装,可参考一文TouchGFX的应用框架如下图所示:1. STM32CubeMX配置STM32CubeMX主要用来配置上面所示的应用框架图中的硬件抽象层和中间件层⏩ RCC系统时钟:高速外部时钟(HSE)配置为外部晶振⏩ 由于要使用FreeRTOS操作系统,因此建议将HAL库的Timebase Source从SysTick改为其他定时器,选好定时器后,系统会自动配置TIM,此处设置为TIM7⏩ FMC设置:配置外部SDRAM来作为RGBLCD的显存...

  • STM32CubeMX系列学习笔记,高效开发的秘籍

    2024-07-07

    点击下方名片关注公众号STM32CubeMX学习笔记STM32CubeMX是ST意法半导体推出的STM32芯片图形化配置工具, 允许用户使用图形化向导生成C 初始化代码,可以大大减轻开发工作,时间和费用。STM32CubeMX几乎覆盖了STM32 全系列芯片。本系列通过28个STM32F1的实例,手把手教你如何使用STM32CubeMX配置STM32的各种外设,带你玩转STM32系列单片机,秒变STM32高手!0x010x020x030x040x050x060x070x080x090x0A0x0B0x0C0x0D0x0E0x0F0x100x110x120x130x140x150x160x170x180x190x1A0x1B0x1C每篇文章末尾,都有相应的工程源码下载方式☆原创不易,请多多支持,多多...

  • TouchGFX界面开发 | TouchGFX软件安装

    2024-07-07

    点击下方名片关注公众号TouchGFX软件安装TouchGFX和STemWin类似,都是一个GUI框架,可以方便的在STM32 Cortex-M4 以及更高级别的STM32芯片上创建GUI应用程序。本文中的TouchGFX软件安装,是基于已经安装有STM32CubeMX + Keil MDK-ARM开发环境的情况下进行的,此开发环境的搭建可参考一文介绍。下面将详细介绍TouchGFX软件的安装步骤:0x01在STM32CubeMX中安装TouchGFX打开STM32CubeMX软件,按如下步骤安装TouchGFX软件包⏩ 进入安装界面⏩ 找到TouchGFX Generater软件包,点击安装即可0x02在PC端安装TouchGFX Designer软件在STM32CubeMX中安装好Touc...

  • TouchGFX界面开发 | C++基础

    2024-07-07

    点击下方名片关注公众号TouchGFX是一个基于STM32硬件,由C++写成的软件框架,所以有必要对C++基础有一定的了解一. C++新特性C语言里,变量初始化必须在程序的前面,而C++则可以随用随定义。C++也可以直接初始化,比如 int x(100),这样就直接赋值 x=100C++的输入输出方式:以cin和cout代替了C语言里的scanf和printf⏩ cout语法形式:cout << x << endl;// x 可以是任意数据类型(或表达式)// endl 是换行符,与C里的"\n"效果一样cout << x << y << endl;  //多个变量的输出⏩ cin 语法形式:cin >> x;  //x可以是任意数据类型c...

  • 什么是Linux软件包,如何管理它们

    2024-07-07

    点击下方名片关注公众号什么是Linux软件包现代类 Unix 操作系统都提供了一个集中的软件包管理机制,以帮助用户搜索、安装和管理软件。而软件通常以包的形式存储在仓库中,对软件包的使用和管理被称为包管理。Linux 软件包的基本组成部分通常有:共享库、应用程序、服务和文档0x01软件包格式⏩ deb软件包:由 Debian Linux 提出,Debian、Ubuntu等系统采用的软件包管理机制,将应用程序的二进制文件、配置文档、man/info帮助页面等文件合并打包在一个文件中,用户使用软件包管理器直接操作软件包,完成获取、安装、卸载、查询等操作⏩ rpm软件包:由 ...

  • CAN总线学习笔记 | STM32的CAN环回测试

    2024-07-07

    点击下方名片关注公众号文中介绍了CAN协议的基础知识,以及STM32F4芯片的CAN控制器相关知识,下面将通过实例,利用STM32CubeMX图形化配置工具,来实现CAN通讯的环回测试1. STM32CubeMX配置⏩ CAN是挂载在APB1总线上,设置PCLK1时钟频率到最大45MHz⏩ 激活CAN1,配置位时序参数,其他基本参数以及工作模式(此处设置为Loopback环回模式)CAN波特率的计算公式:只需要知道BS1和BS2的设置,以及APB1的时钟频率,就可以方便的计算出波特率。比如设置TS1=8、TS2=6和BRP=6,在APB1频率为45Mhz的条件下,即可得到CAN通信的波特率=45000/6/(8+6+1)=500Kbps⏩...

  • CAN总线学习笔记 | CAN基础知识介绍

    2024-07-07

    点击下方名片关注公众号1. CAN协议1.1 CAN协议简介CAN是控制器局域网络 (Controller Area Network) 的简称,它是由研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO11519以及ISO11898), 是国际上应用最广泛的现场总线之一。差异点如下:1.2 CAN物理层CAN通讯不是以时钟信号来进行同步的,它是一种异步通讯,只具有CAN_High和 CAN_Low两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。CAN 物理层的形式主要有两种:遵循ISO11898标准的高速、短距离闭环网络,总线最大长度为40m,通信速度最高为 1Mbps,总线...

  • 浅析 Linux RTC 实时时钟

    2024-07-07

    点击下方名片关注公众号实时时钟是个常用的外设,可以用来获取年、月、日和时间等信息。目前大多数的芯片内部都自带了实时时钟外设模块。例如本实验所使用的I.MX6ULL芯片内部SNVS就提供了RTC(实时计数器)功能。SNVS(安全的非易性存储)里面主要是一些低功耗的外设,其可以在芯片掉电后由电池供电继续运行。RTC需要外接晶振来提供时钟,本实验中I.MX6ULL芯片外接了一个32.768KHz的晶振,原理图如下1. Linux内核RTC驱动简介RTC 设备驱动是一个标准的字符设备驱动,应用程序通过open、release、read、write和ioctl等函数完成对 RTC 设备的操作内核将...

  • Linux开发板中配置Qt运行环境

    2024-07-07

    点击下方名片关注公众号本文基于I.MX6ULL芯片的Linux开发板,介绍如何在嵌入式Linux开发板上配置Qt运行环境,并运行Qt程序进行测试1. tslib编译要想Qt支持触摸就需要编译tslib,以生成触摸相关插件。tslib多用于嵌入式系统中,是基本的触摸插件⏩ Ubuntu工具安装:防止编译tslib过程中出错sudo apt-get install autoconfsudo apt-get install automakesudo apt-get install libtool⏩ 获取tslib源码:源码下载完成后,将压缩包拷贝到Ubuntu中解压下载地址:https://github.com/libts/tslib/tagstar -vxjf tslib-1.21.tar.bz2⏩ 编译tsli...

  • Qt开发中的信号与槽机制

    2024-07-07

    点击下方名片关注公众号1. 信号与槽机制信号与槽(Signal & Slot)是Qt编程的基础,因为信号与槽的编程机制,在Qt中处理界面各个组件的交互操作时变得更加直观和简单。信号是在特定情况下被发射的事件,槽就是对信号响应的函数。信号与槽关联是用QObject::connect()函数实现的,其基本格式是:QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));connect()是QObject类的一个静态函数,而QObject是所有Qt类的基类,在实际调用时可以忽略前面的限定符,所以可以直接写为:connect(sender, SIGNAL(signal()), receiver, SLOT(slot())...

  • Linux LCD 屏幕驱动调参实操

    2024-07-07

    点击下方名片关注公众号文中提到过,eLCDIF接口驱动程序已经由半导体厂家编写好,且不同分辨率LCD屏的eLCDIF接口驱动代码都是一样的,因此LCD驱动部分无需修改。只需要根据所使用的LCD来调整设备树参数即可,本文使用的是正点原子的IMX6ULL开发板,其LCD的接口IO如下图示:由上图可知,LCD使用了如下三类IO连接:24 根RGB LCD数据线4 根控制线,PCLK、DE、VSYNC和HSYNC1 根LCD背光PWM引脚线1. 设备树修改设备树的修改,涉及下面三个方面:LCD所使用的IO配置LCD屏幕节点修改,修改相应的属性值,换成所使用的LCD屏幕参数LCD背光节点信息修改,根据实...

  • Linux 下的 input 子系统开发框架

    2024-07-07

    点击下方名片关注公众号一文中介绍了input子系统框架,以及input驱动的编写流程。本文将在此基础上以IMX6ULL开发板上的KEY0按键为例,介绍如何实现input输入驱动上图为input子系统驱动开发模板框架,下面将根据该框架进行编码1. 修改设备树⏩ 添加pinctrl节点:在iomuxc节点的imx6ul-evk子节点下创建pinctrl_key节点,复用UART1_CTS_Bpinctrl_key: keygrp { fsl,pins = <  MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0xF080 >;};//MX6UL_PAD_UART1_CTS_B__GPIO1_IO18用于设置pin的复用功能//0xF080 用于设置pin的电气特性⏩ 添加KEY设备节点:...

  • 浅析 Linux input 输入子系统

    2024-07-07

    点击下方名片关注公众号1. input输入子系统介绍input子系统就是管理输入的子系统,和pinctrl、gpio子系统一样,是Linux内核针对某一类设备而创建的框架。比如按键、键盘、鼠标、触摸屏等,都属于输入设备,不同的输入设备所代表的含义不同,按键和键盘就是代表按键信息,鼠标和触摸屏代表坐标信息,因此在应用层的处理就不同,对于驱动编写者而言不需要去关心应用层,只要按照要求上报这些输入事件即可input子系统分为input驱动层、input核心层、input事件处理层,最终给用户空间提供可访问的设备节点,其框架如下图示可见在Linux内核空间,分为驱...