一、工程简介   MultiButton是一个小巧简单易用的事件驱动型按键驱动模块。   Github地址:https://github.com/0x1abin/MultiButton   这个项目非常精简,只有两个文件:   (1)可无限扩展按键;   (2)按键事件的回调异步处理方式可以简化程序结构,去除冗余的按键处理硬编码,让按键业务逻辑更清晰。   通过此工程可以学习到以下知识点:   (1)按键各种类型事件;   (2)状态机的思想;   (3)单向链表语法。   工程支持如下的按键事件:    MultiButton的按键状态及软件流程图:  二...

  7w6IANSbAp3r   24天前   18   0   0 嵌入式

 一、前言         万物皆有源头,大家学习单片机的源头操作就是通过GPIO口点灯,GPIO作为STM32最基础的外设,也是大家最先接触的外设。当然,看似基础的GPIO,不仅仅是简单的设置好IO口,让灯亮起就一了百了,了解清楚GPIO的使用特性,根本原理、运行机制对我们在涉及到GPIO的相关设计操作上会应用的更加自如。         GPIO就是通用输入/输出接口(General-PurposeIOports),可以...

  7w6IANSbAp3r   2023年11月13日   14   0   0 嵌入式单片机驱动GPIOstm32

一般来说,单片机的时钟电路是使用外部的无源晶振和负载电容组合实现连接到单片机的Xin和Xout引脚上,无源晶振自身无法振荡,因此需要匹配外部谐振电路才可以输出振动信号。 但是在实际电路设计中,也会在晶振两端并联一个电阻。这个电阻叫做反馈电阻。 那么并联的这个反馈电阻有什么作用呢? 首先来看下时钟电路的基本原理。一般来说,时钟电路又称作皮尔斯振荡器电路,因为它电路简单,工作有效而稳定,优于其它型态的石英晶体振荡电路。皮尔斯振荡器所需零件很少:一个反相器、一个电阻、一个石英晶体、两个小电容。 对于单片机来说,芯片内部一般都包含了反相器,有的也在内部并联了反馈电阻,这个需要查阅具体的芯片手册...

  7w6IANSbAp3r   2023年11月12日   17   0   0 硬件单片机晶振电路设计stm32

 一、前言         在之前的STM32的GPIO理论基础知识中,分别对基本结构和工作模式进行了详细的介绍。GPIO基本结构中主要对GPIO内部的各个功能电路逐一的进行的分析;GPIO工作模式中主要介绍GPIO应用在不同的使用场景下,GPIO端口的静态特征配置和动态的工作模式,同时对信号的工作流进行了分析。         这一篇主要对GPIO模块使用到的寄存器进行详细的分析介绍,适当了解GPIO寄存器的相关知识,可以对...

  7w6IANSbAp3r   2023年11月02日   42   0   0 STM32单片机GPIO硬件嵌入式

0、引言         重载,顾名思义从字面上理解就是重复装载,打一个不恰当的比方,你可以用一个篮子装蔬菜,也可以装水果或者其它,使用的是同一个篮子,但是可以用篮子重复装载的东西不一样。         正如在之前的文章《重载的奥义之函数重载》中介绍的类似,函数的重载是指利用相同的函数名设计一系列功能相近,但是功能细节不一样的函数接口;因此运算符重载也是指对于同一个运算符来说,它可以用于实现不同的功能。下面就一起来理解下运算符重载的应...

  7w6IANSbAp3r   2023年11月02日   32   0   0 C语言数据结构单片机c++算法

 一、前言 本篇开始对STM32的GPIO在实际开发设计中的使用配置和技巧进行探讨,可以先去回顾下之前介绍的GPIO的相关理论基础知识包括基本结构,工作模式和寄存器原理。 了解过STM32的GPIO相关的理论知识,这样在应用GPIO开发过程中,能更好的理解GPIO的特点,应用起来会更加的得心应手。 后续将从以下图1中所示的几个方面对GPIO应用设计中的步骤展开介绍。本篇先介绍GPIO的基本API函数定义,配置初始化的流程,以及使用技巧;针对将GPIO的引脚用于外部中断的功能将作为单独的一篇进行详细的讨论介绍。 图1GPIO应用设计 二、API函数 STM32有多种类型的库,本节所...

  7w6IANSbAp3r   2023年11月02日   22   0   0 驱动开发ArmSTM32单片机嵌入式

C/C编译器的缺省字节对齐方式为自然对界。即在缺省情况下,编译器为每一个变量或是数据单元按其自然对界条件分配空间。 在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储(成员之间可能有插入的空字节),第一个成员的地址和整个结构的地址相同。 编译器缺省的结构成员自然对界条件为“N字节对齐”,N即该成员数据类型的长度。如int型成员的自然对界条件为4字节对齐,而double类型的结构成员的自然对界条件为8字节对齐。若该成员的起始偏移不位于该成员的“默认自然对界条件”上,则在前一个节面后面添加适当个数的空字节。 编译器缺省的结构...

  7w6IANSbAp3r   2023年11月02日   25   0   0 C语言数据结构STM32单片机c++

1、前言         在STM32之前,都是老大头51,带着它的“小弟们”MSP430、AVR、PIC在单片机界呼风唤雨。那个时候,市场上遍布8位机,大学教材用51入门,个人、企业学单片机基本上也都在用51。         虽然AVR也有一些8位机市场,但与stc带领下的51单片机是完全不能相比的。当然,这个时候也有16位机的msp430,其他厂家单片机还有pic,高端嵌入式处理器等市场有arm7、arm9等。这个时期的单片机市场...

  7w6IANSbAp3r   2023年11月02日   53   0   0 ArmSTM32单片机物联网嵌入式

一、前言         在之前针对STM32的GPIO相关API函数及配置使用进行了详细的介绍,GPIO作为输入引脚时,调用相关读信号引脚函数接口就可以在程序的循环中,轮询的对输入信号进行读取检测操作,除了轮询的方式访问输入引脚,还可以通过另外一种叫做外部中断的方式来对引脚的输入信号进行检测,本篇首先介绍下EXTI的结构,接着介绍外部中断的相关概念,对STM32的IO外部中断EXTI有个初步的了解,在此基础上重点围绕IO外部中断EXTI的使用展开分析。 图1外部中断设计 二、EXTI结构  &nbs...

一、前言         本篇介绍STM32芯片的存储结构,ARM公司负责提供设计内核,而其他外设则为芯片商设计并使用,ARM收取其专利费用而不参与其他经济活动,半导体芯片厂商拿到内核授权后,根据产品需求,添加各类组件,生产芯片售卖。图1为STM32的组成示意图,其中Cortex-M3内核、调试系统都是ARM公司设计,内部总线、外设、存储、时钟复位等都由ST公司开发。可以明显看出总线是cpu、内存、外设传递信息的公用通道,芯片上的各个部件通过总线相连接。 图1STM32芯片简要结构图   &...

前言         犹记得之前观感世界杯的方式有许多,在电视上看比赛,在移动端观看,又或者是通过图文直播的方式,今年这届世界杯在看球时尝试了一种全新的体验,这种新潮的方式就是通过VR设备进行沉浸式的观赛。 1、设备的选择         目前市面上的VR设备种类还是比较多的,如何选择一款较为合适的设备是保证观赛的前提,在经过一系列比较,我认为目前市面上新款的Pico4无论从设备功能参数上,还是从价格上是一个比较好的选择。 &nbsp...

  7w6IANSbAp3r   2023年11月02日   27   0   0

0、引言              我们在嵌入式开发的过程中,经常可以碰到在一些宏定义或者是代码段中使用了do{...}while(0)的语句,从语义上理解,do{...}while(0)内的逻辑就只执行一次,并没有循环执行,粗略看来,似乎画蛇添足了,那么为什么还需要在只执行一次的逻辑外面加上一层do{...}while(0)语句呢?实际上,在这些逻辑中使用do{...}while(0)的作用远大于美化你的代码,下面就来看看实际的使用场景。 1、用于定义一个作用域...

  7w6IANSbAp3r   2023年11月02日   67   0   0 C语言

​   C/C编译器的缺省字节对齐方式为自然对界。即在缺省情况下,编译器为每一个变量或是数据单元按其自然对界条件分配空间。   在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储(成员之间可能有插入的空字节),第一个成员的地址和整个结构的地址相同。   编译器缺省的结构成员自然对界条件为“N字节对齐”,N即该成员数据类型的长度。如int型成员的自然对界条件为4字节对齐,而double类型的结构成员的自然对界条件为8字节对齐。若该成员的起始偏移不位于该成员的“默认自然对界条件”上,则在前一个节面后面添加适当个数的空字节。 ...

  7w6IANSbAp3r   2023年11月02日   49   0   0 C语言

1、定义区别       类模板和模板类主要关注点是后一个单词。   类模板:主要描述的是模板,这个模板是类的模板。可以理解为一个通用的类,这个类中的数据成员,成员函数的形参类型以及成员函数的返回值类型不用具体的指定,这些类型都是虚拟的。在使用类模板进行对象定义的时候,才会根据对象的实际参数类型来替代类模板中的虚拟类型。通俗一点来说,可以看作是做蛋糕的模具。类模板标准定义格式如下: 1template<typename类型参数> 2class类名 3{ 4类成员声明 5};   或者: 1template<class类型参数&gt...

  7w6IANSbAp3r   2023年11月02日   28   0   0 C++

   在C中为了操作简洁引入了函数模板。所谓的函数模板实际上是建立一个通用函数,其函数类型或形参类型不具体指定,用一个虚拟的类型来表达,这个通用函数就称为函数模板。 1、通用的写法         函数模板不是一个具体的函数,编译器不能为其生成可执行代码。定义函数模板后只是一个对函数功能框架的描述,当它具体执行时,将根据传递的实际参数决定其功能。为了容易使用,一般通用的写法都是在头文件中直接定义函数模板,定义的同时也是声明该函数,供给其它文件包含调用。 1//------fun.h或fun.hpp---...

  7w6IANSbAp3r   2023年11月02日   34   0   0 C++

一、基本定义              重载,顾名思义从字面上理解就是重复装载,打一个不恰当的比方,你可以用一个篮子装蔬菜,也可以装水果或者其它,使用的是同一个篮子,但是可以用篮子重复装载的东西不一样。         函数重载是C多态(静态多态)的特征体现,它可以允许重复使用同一个函数名(篮子)的函数,但是函数的参数列表(篮子装的东西)是可以不一样的。这样就可以利用函数的重载功能设计一...

  7w6IANSbAp3r   2023年11月02日   49   0   0 C++

0、引言         重载,顾名思义从字面上理解就是重复装载,打一个不恰当的比方,你可以用一个篮子装蔬菜,也可以装水果或者其它,使用的是同一个篮子,但是可以用篮子重复装载的东西不一样。         正如在之前的文章《重载的奥义之函数重载》中介绍的类似,函数的重载是指利用相同的函数名设计一系列功能相近,但是功能细节不一样的函数接口;因此运算符重载也是指对于同一个运算符来说,它可以用于实现不同的功能。下面就一起来理解下运算符重载的应...

  7w6IANSbAp3r   2023年11月02日   59   0   0 C++

前言   在嵌入式开发程序中涉及数据采样如传感器采样,AD采样等如果直接读取信号后,将信号值直接参与后续逻辑处理,若程序无软件滤波,会导致静态或者动态采样时:         1、信号曲线相对没有那么平滑。         2、同时可能存在脉冲干扰导致逻辑判断错误。         在信号处理系统中,输入信号通常含有各种噪声和干扰。为对信号进行准确的测量和控...

  7w6IANSbAp3r   2023年11月01日   25   0   0 算法与数据结构

 摘要:蓝牙模块,是一种集成蓝牙功能的PCBA板,用于短距离无线通讯,蓝牙模块将芯片和外围硬件电路集成到一个PCB上,开发出所需的内置程序实现蓝牙功能的设备。可以通过相关接口和MCU控制设备进行数据传输、可实现蓝牙标准通信和组网。本文从蓝牙模块的不同的分类方式上去梳理蓝牙模块的类型,尽量的从分类方式的角度去了解蓝牙模块所具备一些特性和功能。 一、按照协议类型分 (1)经典蓝牙模块         经典蓝牙模块(BT)泛指支持蓝牙协议4.0以下的模块,可以细分为:传统蓝牙模块和高速蓝牙模块。  &...

  7w6IANSbAp3r   2023年11月01日   63   0   0 嵌入式

一、引子         我们都知道对指针(Pointer)的操作,实际上是对计算机内存地址的操作,通过访问内存地址实现间接访问该地址中保存的数据。其实就是CPU的寻址方式中的间接寻址。简单概括正常使用指针时的3个步骤为: 定义指针变量 绑定指针即给指针变量赋值 解引用即间接访问目标变量通过一个简单的例子来看这3个步骤的实现: 1inta=5; 2//定义指针变量p 3intp;4//绑定指针,就是给指针变量赋值,指向另一个变量a(指针的用途就是指向别的变量)5p=&a;6//将6放入p所指向的那个变...

  7w6IANSbAp3r   2023年11月01日   112   0   0 嵌入式
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~