单片机技术网|技术阅读
登录|注册

您现在的位置是:单片机技术网 > 技术阅读

技术阅读

  • C语言实现状态机的三种方法

    2024-07-13

    状态机的实现无非就是 3 个要素:状态、事件、响应。转换成具体的行为就 3 句话。发生了什么事?现在系统处在什么状态?在这样的状态下发生了这样的事,系统要干什么?用 C 语言实现状态机主要有 3 种方法:switch—case 法、表格驱动法、函数指针法。switch—case 法状态用 switch—case 组织起来, 将事件也用switch—case 组织起来, 然后让其中一个 switch—case 整体插入到另一个 switch—case 的每一个 case 项中  。「程序清单 List4  :」switch(StateVal){ case S0: switch(EvntID) { case E1: action_S0_E1(); /*S0 状态下 E1...

  • 初恋男人就像个简单的信号放大器

    2024-07-13

        初恋的男人的心就像个最简单的信号放大器,女人控制着输入端。你一个最微小的快乐信号都能给他带来极大的幸福感,同样,你不小心的小伤害也会被他单纯的放 大成无比伤痛。但是,男人不会一直这么蠢,当你和他越来越接近时,他慢慢就会给自己加上滤波器,当你们结婚后,他没准还会给你加上负反馈。    热恋中的女人的心就像被加了一个差动放大器,男朋友的一切优点都被当成差模信号被放大,而他的缺点都被选择为共模信号抑制掉了:。    男人的心就像是三极管放大器,恋爱时是共基极的,你的付出总可以在他那得到几百倍的回报,但是结...

  • C语言常用转换函数实现原理

    2024-07-13

        编程时,经常用到进制转换、字符转换。比如软件界面输入的数字字符串,如何将字符串处理成数字呢?今天就和大家分享一下。1 字符串转十六进制    代码实现:2 十六进制转字符串    代码实现:    或者:    效果:十六进制:0x13 0xAA 0x02转为字符串:”13AAA2”3 字符串转十进制    代码实现:    第一种,如果带负号 这个就是atoi函数的实现:    效果:字符串:”-123” 转为 -123    第二种,如果不带负号    效果:字符串:”123” 转为 123    第三种:包含转为浮点数//m^n函数//返回值:...

  • 梳理STM32芯片的内部架构

    2024-07-13

        STM32芯片主要由内核和片上外设组成,STM32F103采用的是Cortex-M3内核,内核由ARM公司设计。STM32的芯片生产厂商ST,负责在内核之外设计部件并生产整个芯片。这些内核之外的部件被称为核外外设或片上外设,如 GPIO、USART(串口)、I2C、SPI 等,相关文章推荐:。芯片内部架构示意图    芯片内核与外设之间通过各种总线连接,其中驱动单元有 4 个,被动单元也有 4 个,具体如上图所示。可以把驱动单元理解成是内核部分,被动单元都理解成外设。ICode 总线    ICode总线是专门用来取指令的,其中的I表示Instruction(指令),指令的意思...

  • 程序员调Bug的真实写照~

    2024-07-13

    在程序开发、测试、验收的过程中很难不会有bug的出现所以就出现了不断调试找bug的现象作为程序员的你不要说你不知道0、调试的定义1、一步步调试2、调试过多线程的看完都秒懂~3、调试:期望 VS 现实4、断点调试bug5、用户等你在生产中调试6、调试递归代码7、调试别人的代码就像....8、程序员修BUG9、6小时的调试可以节省5分钟的文档阅读时间10、刚开始软件开发 VS 花了一整天调试后11、生产中调试12、其他人调试代码 VS 我调试代码13、花了几小时调试一个Bug14、一上午都在调试15、调试的六个阶段16、我想睡觉,床:不,你还有bug没调试完

  • 拆解空气炸锅,分析电路

    2024-07-12

        随着健康饮食得兴起,宣称无需用油,简单一键就能够用来炸鸡块、炸薯条还能做烘焙的空气炸锅成为了吃货青睐的小电器。朋友几年前购的一台利仁(Liven)第二代空气炸锅(LR-KZ880型,光波发热管,10升大容积),据说平时使用次数很少,最近出现故障,按下控制面板按键不工作。维修人员告诉是电路板坏了,要花上百元费用。朋友不愿意送门店修理,丢了可惜,请我帮忙看一下,能不能死马当活马医,若修理难度大就扔掉。    一般来说烤箱就是利用电热元件所发出的辐射热来烘烤食品,我们可以据烘烤食品的不同需要,电烤箱的温度一般可在50-25...

  • 嵌入式开发中的程序架构

    2024-07-12

    前言    在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。    软件架构对于系统整体的稳定性和可靠性是非常重要的,一个合适的软件架构不仅结构清晰,并且便于开发。    我相信在嵌入式或单片机软件开发的初期大多数开发者采用的都是简单的前后台顺序执行架构(我就是这样的)。在嵌入式软件开发中,程序架构主要分为三种,本篇文章将对这三种程序架构做出详解。软件架构存在的意义    可以说一个好的程序架构,是一个有经验的工程师和一个初学者的分水岭。软件架构对于开发人员是友好的,你希望...

  • 简单的电路制作1000W220伏逆变器,停电了可以用来点灯

    2024-07-12

  • 单片机裸机与RTOS多线程

    2024-07-12

        很多初学者都是从裸机开始学起,不能明白裸机和操作系统的区别。甚至有不少人认为用中断就能代替多任务处理,你认同吗?裸机系统    裸机系统通常分成轮询系统和前后台系统。1 轮询系统    轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情,大概的伪代码具体如代码清单所示:int main(void){ /* 硬件相关初始化 */ HardWareInit(); /* 无限循环 */ for (;;) { /* 处理事情 1 */ DoSomething1(); /* 处理事情 2 */ DoSomethingg2(); /* 处理事情 3...

  • UDP实现可靠性传输,附项目链接

    2024-07-12

    一、udp与tcp的区别:TCP(TransmissionControl Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。UDP是User Datagram Protocol,一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。可靠性由上层应用实现,所以要实现udp可靠性传输,必须通过应用层来实现和控制。二、TCP如何实现可靠性传输:可靠性:应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据长度将保持不变。由TCP传递给IP的信息单位称为报文段或段(segment)。当TCP发出一个段后,它启动一个定时器,等待目...

  • PID算法原理介绍

    2024-07-12

    先来彻底搞懂PID到底是啥?    PID,就是“比例(proportional)、积分(integral)、微分(differential)”,是一种很常见的控制算法。在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。    PID已经有107年的历史了,它并不是什么很神圣的东西,大家一定都见过PID的实际应用。比如四轴飞行器,再比如平衡小车......还有汽车的定速巡航、3D打印机上的温度控制器....来看下通过PID实现机器人骑自行车的文章:。  ...

  • 温习:C语言三个重点知识

    2024-07-12

        C语言在嵌入式学习中是必备的知识,审核大部分操作都要围绕C语言进行,而其中有三块“难啃的硬骨头”几乎是公认级别的。1 指针    指针公认最难理解的概念,也是让很多初学者选择放弃的直接原因。    指针之所以难理解,因为指针本身就是一个变量,是一个非常特殊的变量,专门存放地址的变量,这个地址需要给申请空间才能装东西,而且因为是个变量可以中间赋值,这么一倒腾很多人就开始犯晕了,绕不开弯了。C语言之所以被很多高手所喜欢,就是指针的魅力,中间可以灵活的切换,执行效率超高,这点也是让小白晕菜的地方。    指针...

  • 看了让人脸红心跳的代码注释

    2024-07-12

        有一些注释非常友好。    俗话说好的代码不需要注释,写注释有时实属无奈之举。    于是,有些注释看了就让人脸红心跳。【1】#想了解递归,请参见文件末尾..(代码末尾…).#想了解递归,请参见文件开头【2】//仅以这些代码和我所有的工作献给我的妻子 Darlene,//因为一旦这些代码发布,她就不得不全力支持我、我们的三个孩子,还有狗狗。【3】//有时,我相信编译器会忽略我所有的注释。【4】/*你以为你知道下列代码在干什么。其实你并没有。相信我。与这段代码相爱相杀,你会度过无数个不眠之夜。你认为你聪明有余,足以“优化”下面...

  • UART、TTL、RS232、USB通信协议

    2024-07-12

    串行通信    串行通信技术(Serial Communication),是指通信双方按位bit进行,遵守时序的一种通信方式。串行通信中,将数据按位依次传输, 每位数据占据固定的时间长度,仅用一根接收线和一根发送线就可以完成系统间交换信息。    尽管串行通讯比按字节传输的并行通信慢,但是串行具有通信线路少,布线简便易行,施工方便,结构灵活,系统间协商协议,自由度及灵活度较高的特点。同步通信:    同步通信是一种连续串行传送数据的通信方式,一次通信传送一帧信息。这里的信息帧与异步通信中的字符帧不同,通常含有若干个数据字符。它们均...

  • 三极管滤波是个什么鬼?TA不止会放大哦~

    2024-07-12

    ????????

  • 在STM32中如何通过IO口模拟串口通信

    2024-07-12

        在项目中需要用到多路的串口使用,而自己的单片机目前来讲没法满足我们项目所需要的串口需求,因此要对普通的GPIO进行转换为UART进行使用。从而使得我们单片机能够得到多一路的串口。    既然我们要进行对串口的模拟,因此我们要先了解uart相关的通信协议:,这篇文章进行了详细介绍,此处不再赘述。    UART的通信方式是由1个起始位,8个数据位,包含一个奇偶校验位,和结束位构成。因此我们将使用单片机中的两个普通的IO口电平的高低进行对相应时序的模拟。    接下来,让我们一起学习如何实现IO模拟串口通信。添加头文件  ...

  • EEPROM和Flash这样讲,我早就懂了

    2024-07-12

        存储器分为两大类:ram和rom,ram就不讲了,主要讨论rom。    rom最初不能编程,出厂什么内容就永远什么内容,不灵活。    后来出现了prom,可以自己写入一次,要是写错了,只能换一片,自认倒霉。人类文明不断进步,终于出现了可多次擦除写入的EPROM,每次擦除要把芯片拿到紫外线上照一下,想一下你往单片机上下了一个程序之后发现有个地方需要加一句话,为此你要把单片机放紫外灯下照半小时,然后才能再下一次,这么折腾一天也改不了几次。    历史的车轮不断前进,伟大的EEPROM出现了,拯救了一大批程序员,终于可以随意的修...

  • 嵌入式C语言大神不常有

    2024-07-11

        C语言可以说是一种"古老"的编程语言,也是目前嵌入式中主流的编程语言,没有C语言就没有今天的各种嵌入式系统以及操作系统等等。    C语言虽然说是编程开发的基础,那到底你掌握到了什么程度呢?    下面我们一起看看C语言熟练到精通的几个层级:新手村    在大学学过<C语言程序设计>相关的书籍,掌握的不错的获得计算机二级等考证,应付个期末考试,顺便拿个毕业证啥的。    掌握的程度:掌握C语言的基本语法,会鸡兔同笼100条腿的编程,会冒泡排序等。初入此门    学会使用C语言编写程序、开发一些小项目项目,应该算...

  • QP状态机框架与常见状态机方法 | 长文收藏

    2024-07-11

    状态机基本术语    现态:是指当前所处的状态。条件:又称为“事件”,当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。    动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。传统有限状态机Fsm实现方法    如图,是一个定时计数器,计数器存在两种状态,一种为设置状态,一种为计时状态...

  • 总结Linux命令,多达 600 条

    2024-07-11

    1. 基本命令uname -m 显示机器的处理器架构uname -r 显示正在使用的内核版本dmidecode -q 显示硬件系统部件(SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性hdparm -tT /dev/sda 在磁盘上执行测试性读取操作系统信息arch 显示机器的处理器架构uname -m 显示机器的处理器架构uname -r 显示正在使用的内核版本dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI)hdparm -i /dev/hda 罗列一个磁盘的架构特性hdparm -tT /dev/sda 在磁盘上执行测试性读取操作cat /proc/cpuinfo 显示CPU info的信息cat /proc/interrupts 显示中断cat /proc/meminfo...

  • STM32串口通信简明知识

    2024-07-11

    1 什么是串口通讯?    串行通讯是指仅用一根接收线和一根发送线就能将数据以位进行传输的一种通讯方式。尽管串行通讯的比按字节传输的并行通信慢,但是串口可以在仅仅使用两根线的情况下就能实现数据的传输。    典型的串口通信使用3根线完成,分别是地线、发送、接收。由于串口通信是异步的,所以端口能够在一根线上发送数据同时在另一根线上接收数据。串口通信最重要的参数是波特率、数据位、停止位和奇偶的校验。对于两个需要进行串口通信的端口,这些参数必须匹配,这也是能够实现串口通讯的前提。如下是串行通讯示数据传输意图。2 串...

  • 牛人做的特斯拉线圈_人造闪电

    2024-07-11

  • 电子类大学生怎么找工作?

    2024-07-11

  • 代码是如何控制硬件的?

    2024-07-11

    先说代码:我们是用电脑的键盘来输入的指令,每一个指令都对应一个ASCII码,而这里的ASCII码就是有序的电压的高低(或电流的有无,下面只提电压的高低),即我们输入的是电压的高低,你所看到代码是这些电压的高低控制显示器所显示的图像,其实电脑也不知道它是什么,只知道这样显示。结论:代码其实就是存储在存储器(内存、硬盘或者闪存等等)中有序的电压的高低。再说编译:编译是一个有序的电压的高低向另一种有序的电压高低的一种转换过程,下面以52单片机为例,我们编译是从表示ASCII码的那种有序电压高低转换为52单片机能够识别的另一种规定...

  • 面试题:malloc(0)会发生什么?

    2024-07-10

    故事要从前两天交流群中一位同学提到的这个问题开始:这个问题看起来十分刁钻,不过稍有常识的人都知道,制定 C 标准的那帮语言律师也不是吃白饭的,对这种奇奇怪怪的问题一定会有定义。翻阅C17 标准 草案 N2176,在 7.22.3 节里,有如下说法:The order and contiguity of storage allocated by successive calls to the aligned_alloc, calloc, malloc, and realloc functions is unspecified. The pointer returned if the allocation succeeds is suitably aligned so that it may be assigned to a pointer to any type of object with a fund...

  • 数据结构面试中的二叉树操作

    2024-07-10

    在数据结构面试环节中,二叉树是必考的模块。本文主要讲二叉树操作的相关知识,梳理面试常考的内容。一起来复习吧。本篇针对面试中常见的二叉树操作作个总结:前序遍历,中序遍历,后序遍历;层次遍历;求树的结点数;求树的叶子数;求树的深度;求二叉树第k层的结点个数;判断两棵二叉树是否结构相同;求二叉树的镜像;求两个结点的最低公共祖先结点;求任意两结点距离;找出二叉树中某个结点的所有祖先结点;不使用递归和栈遍历二叉树;二叉树前序中序推后序;判断二叉树是不是完全二叉树;判断是否是二叉查找树的后序遍历结果;给定一个二叉查找...

  • 如何快速找到PCB中的GND?

    2024-07-10

        在维修电路板时,有时候需要测量板子上某一点的电位,来判断到底是哪里出了问题,而参考点的选取一般都是选择电源的负极,也就是GND地线。如何快速寻找出板子中的地线,就成了必须要掌握的知识了。    下面我总结了几种方法供大家参考一下。1 通过电解电容来查找GND    上图中是一个电磁炉主板,我们要找地线,首先要找到板子最大的那个电解电容。    一般情况下比较大的电解电容都是作为电源滤波的一种元件,它的负极就是GND了。上图中你看到的最大的电解电容就是一个电源滤波电容,它是从整流桥整流输出约300伏的脉动直流电,...

  • 总结STM32开发中常用的C语言知识

    2024-07-10

    1 位操作    位操作与位带操作并不相同,位操作就是对一个变量的每一位做运算,而逻辑位操作是对这个变量整体进行运算。    下面是六种常用的操作运算符:按位取反void test01(){ int num = 7; printf("~num = %d\n", ~num);//-8// 0111 按位取反 1000 机器中存放的都是补码 //补码转换原码需要分有符号数和无符号数两种}按位与void test02(){  int num = 128;//换算为八位,1换算就是00000001, 这样只要所给数字的二进制最后一位是1.那么就是奇数,否则就是偶数 if ( (num & 1) == 0) { printf("num为偶数\n"); ...

  • 工程师如何才能称得上优秀?

    2024-07-10

    陆奇出席百度内部 Engineering Leadership Talk。作为计算机科学博士及优秀的管理者,他提出的五点要求,对每一位百度工程师都适用。除了写得一手好代码,什么样的工作态度和方法才是一个优秀工程师的必备?1 Believe in 技术首先要相信技术,我刚才已经讲了,整个我们工业界,特别是像百度这样的公司,对技术坚定的、不动摇的信念特别重要。我也分享一下,盖茨提到微软公司的宗旨就是:写软件代表的是世界的将来。为什么?未来任何一个工业都会变成软件工业。盖茨是对的,因为任何工业任何行业自动化的程度会越来越高,最后你所处理的就是信息和知...

  • 学习STM32单片机,从菜鸟到牛人

    2024-07-10

        如何系统地入门学习STM32?    假如你会使用8051 , 会写C语言,那么STM32本身并不需要刻意的学习。    你要考虑的是, 我可以用STM32实现什么?    为什么使用STM32而不是8051?是因为51的频率太低,无法满足计算需求?是51的管脚太少,无法满足众多外设的IO?是51的功耗太大,电池挺不住?是51的功能太弱,而你要使用SPI、I2C、ADC、DMA?是51的内存太小而你要存储的东西太多?    当你需要使用STM32某些功能,而51实现不了的时候, 那STM32自然不需要学习,你会直接去寻找STM32某方面的使用方法:。比如要用SPI协议的网卡、要...