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

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

技术阅读

  • 如何在Keil中打印日志找bug

    2024-06-27

    相信大多数嵌入式开发者都会碰到对程序进行调试或者查找BUG的情况,常见的两种方法都是仿真和通过日志进行的。有条件仿真的是更好,但是在编写嵌入式软件程序过程中,并不是所有的硬件都支持仿真或者方便仿真,这样大多数方法便是加打印信息进行找问题。打印的接口有很多种,比如串口,网络,显示等等。简单的硬件开发串口估计是最常用的。这里简单记录下一种日志打印方法。目的:1)方便查找打印日志2)日志格式规范3)可以查看用户添加信息,文件信息,函数接口,以及文件所在行号4)支持format格式5)可以支持实时时间基本知识:C语言中的__FILE_...

  • STM32的LCD驱动编写思路,附代码分析

    2024-06-27

        STM32开发板有很多配套LCD例程,如下图就是开发板上最常见的一种TFTLCD屏。商家会给封装好一些LCD函数,大家能学会如何点亮一个LCD。    在主函数中加入上述代码就可以轻松实现下面输出字符串、画矩形块、清屏等效果。    但是这些例程代码或许有下面的问题:分层不清晰,通俗讲就是模块化太差接口乱,只要接口不乱,分层就会好很多了可移植性差通用性差    为什么这样说呢?如果你已经了解了LCD的操作,请思考如下情景:代码空间不够,只能保留9341的驱动,其他LCD驱动全部删除。能一键(一个宏定义)删除吗?删除后要改多少地方...

  • 盘点优秀PCB工程师的好习惯

    2024-06-27

        在有些人看来,PCB layout工程师的工作会有些枯燥无聊,每天对着板子成千上万条走线,各种各样的封装,重复着拉线的工作...    事实上,并没有看上去的那么简单!    设计人员需要在各种设计规则之间做出取舍,兼顾性能、工艺、成本等各方面,同时还要注意板子布局的合理整齐。    作为一名优秀的PCB layout工程师,好的工作习惯会使你的设计更合理、性能更好、生产更容易。    下面罗列了PCB layout工程师的7个好习惯,来看看你都占了几个吧!学会会设计规则     其实现在不光高级的PCB设计软件需要设置布线规则,一些...

  • 波士顿机器人一直被欺负,最后忍无可忍

    2024-06-27

  • 总结Linux命令,多达 600 条

    2024-06-27

    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...

  • 为什么魂斗罗只有128KB却可以实现那么长的剧情?

    2024-06-27

        现代程序员A和1980年代游戏程序员B的对话:A:为什么你用128KB能实现这么多画面、音乐、动画?B:128KB还不够么?其实为了表现力已经相当奢侈了,加了很多不重要的细节。A:就说你们的音乐,这个音乐,我压到最低码率的mp3,也得至少1MB吧。B:你怎么压的?一首背景音乐怎么可能超过1KB。A:那你实现全屏卷轴,用了多少显存?B:一共就只有2KB显存,多了也放不下啊。A:……我们对“数据量”无法直观认识    除非是专家,一般人根本无法估算到底多大算大,多小算小。    一般人对“数据量”并没什么概念。一篇800字的作文有多少数据...

  • 45个Git经典操作场景,助力面试

    2024-06-27

    git对于大家应该都不太陌生,熟练使用git已经成为程序员的一项基本技能,在找工作面试和一些需彰显个人实力的场景,需要我们掌握足够的git命令。下边我们整理了45个日常用git代码的经典操作场景,基本覆盖了工作中的需求。提交我刚才提交了什么?如果你用 git commit -a 提交了一次变化(changes),而你又不确定到底这次提交了哪些内容。你就可以用下面的命令显示当前HEAD上的最近一次的提交(commit):(main)$ git show或者$ git log -n1 -p我的提交信息(commit message)写错了如果你的提交信息(commit message)写错了且这次提交(commit)还没有推(push)...

  • 单片机程序又跑飞?! 三种跑飞现象分析

    2024-06-26

        在编写单片机程序的时候,由于中断服务程序写的不好,导致单片机程序总是跑飞,最后费了好长时间,花了很大功夫才找到问题原因,由此总结了单片机程序跑飞的三种现象、原因及解决方法。1 数组越界/溢出现象:    单片机程序在函数中运行时,总是在运行到函数末尾,要跳出函数时,程序跑飞。原因:    数组越界(数组溢出),函数中定义的数组元素的个数小于程序中实际使用的数组元素的个数,例如在函数中定义了一个数组ucDataBuff[10],这个数组只有10个元素,但是在函数中却有这样的语句ucDataBuff[10]=0x1a,这个语句是给数组的第...

  • STM32的HAL库实现自定义延时函数delay_us(),文末附代码

    2024-06-26

        STM32程序从标准库移植到HAL库的时候,会发现HAL库中只有一个毫秒级延时函数HAL_Delay(),而没有微秒级延时delay_us(),本文就在HAL库中用定时器实现这个delay_us()。    如下图,找到HAL_Delay()函数定义的地方,发现这个函数有__weak标识,是一个弱化函数,可以被重写。    由于HAL库许多地方都使用了HAL_Delay()函数,为了避免惹麻烦建议不重写,可以用定时器自己写一个延时函数。    开发软件用的STM32CubeIDE,此Cube软件的使用方法可以参考这篇文章:    项目设置,勾选后每个外设的源文件.c、头文件.h分别成双出现。  ...

  • 深入了解MOSFET的工作原理

    2024-06-26

  • 单片机程序代码该如何优化?

    2024-06-26

        对单片机程序进行优化,通常是指优化程序代码或程序执行速度。    优化代码和优化速度实际上是一个予盾的统一。一般是优化了代码的尺寸,就会带来执行时间的增加;如果优化了程序的执行速度,通常会带来代码增加的副作用。很难鱼与熊掌兼得,只能在设计时掌握一个平衡点。程序结构的优化1 程序的书写结构    虽然书写格式并不会影响生成的代码质量,但是在实际编写程序时还是应该尊循一定的书写规则,一个书写清晰、明了的程序,有利于以后的维护。在书写程序时,特别是对于While、for、do…while、if…else、switch…case 等语句或...

  • 一种适合MCU的分层软件设计方法

    2024-06-26

    在实际的项目开发中,项目往往是并行开发的,也就是说硬件设计,底层软件设计,应用软件设计是同步进行的。比如说在开发板上调试模块驱动,在其他平台上调试应用再移植到目前这个平台等。这里又涉及到如何提高嵌入式应用软件的可移植性的问题,要想开发的应用程序在不同的嵌入式平台上具有高效率的可移植性,像Android sdk一样,统一的接口规范是必须的。本文所要提到的嵌入式,其实更偏向于单片机。因为经典的linux+arm配置属于资源比较丰富,高配的嵌入式系统,其操作系统本身就很强大,软件设计也变得水到渠成。单片机更多时候是没有系统软件设计...

  • 继电器应用细节

    2024-06-26

        继电器的应用,相信大家都知道,在电路中只要给它供电、断电也就可以工作了。本文讨论它的应用细节。现在流行的接法    图中,继电器的线圈经过Q1作为开关,使其导通与断开。D1作为续流,消耗线圈中的能量。继电器的特点吸合电流大于释放电流保持电流小于吸合电流、大于释放电流    以上两点均为继电器的“通病”,大家可以做一下实验,或看一看说明书。流行电路的优点及缺点    大家知道,继电器的线圈相当于电感,它的电流不能突变。在释放时,Q1截止瞬间,线圈将仍保持原来的电流大小,如果不接入D1这个二极管,产生的电压--...

  • 拆解二战时期军用万用表,看看70多年前的万用表长啥样?

    2024-06-26

    万用表,电子工程师必备的一款工具,但在70年前,这可是一般人都用不起的工具。这个就是我们今天的主角,一块跟随着飞虎队远渡重洋,来到反法西斯第一战场的万用表。挡位切换旋钮。当年所有设备全是电子管,部分管子阳极需要高达1500V的电压,因此设有1500V电压挡。挡位旋钮下面的字:signal corps U.S. Army,美国陆军通信部队Test Set 1-77-J,型号Serial No.1352 Order No.30126-Phila-43,序列号和供货号。供货号中的Phila为太平洋战区。Chicago Industrial Instrument CO. Chicago,芝加哥工业设备公司生产。拆下面板螺丝,取下后盖。后盖里面...

  • 用覆铜板雕一个女友吧

    2024-06-26

    熬了一个做出来的作品,把女朋友的照片刻到覆铜板上先用PS把照片处理成黑白的,存成bmp格式,在用protel dxp的插件把bmp图像转成Pcb文件,输出CAM文件,再用雕刻机刻到覆铜板上。 正面刻上照片,背面的铜全部刻掉,用灯一照,光线就能透过来。不加灯光的效果:   这个地方有点刻坏了,夹个小熊挡一下。    最后,要不,我们用腐蚀再试试?欢迎各位回去实验

  • 如何理解电容、电感产生的相位差

    2024-06-26

        对于正弦信号,流过一个元器件的电流和其两端的电压,它们的相位不一定是相同的。这种相位差是如何产生的呢?这种知识非常重要,因为不仅放大器、自激振荡器的反馈信号要考虑相位,而且在构造一个电路时也需要充分了解、利用或避免这种相位差。下面探讨这个问题。    首先,要了解一下一些元件是如何构建出来的;其次,要了解电路元器件的基本工作原理;第三,据此找到理解相位差产生的原因;第四,利用元件的相位差特性构造一些基本电路。 电阻、电感、电容的诞生过程    科学家经过长期的观察、试验,弄清楚了一些道理,也经常出...

  • 娃娃机总是抓不到?揭秘那块PCB

    2024-06-26

        娃娃机作为一项娱乐设施,走进了人们的业余生活,也开启了对一代又一代有闲青年钱包的减肥工作。    为什么抓娃娃这么难?自然是背后搓着手的商家为你设下了重重阻碍。那他们是怎样做到的?    我们找到了七八份国内外娃娃机的说明书和设计专利,为你揭秘娃娃机。1    这是一份专利中的娃娃机示意图,如图所示,它的基本组件包括印制电路板、电源、货币检测器、显示屏、操纵杆、线束、桥梁杆件和钢爪。    David R. Stubben, United States Patent No. 6,283,475.    最让你怨声载道的,首先就是这个钢爪了。抓的时候好...

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

    2024-06-26

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

  • Proteus仿真STM32,点亮LED

    2024-06-25

    Keil、Proteus工程文件 链接:https://pan.baidu.com/s/1VK6ntTY64LuOSjhdimayHw?pwd=3es3  提取码:3es3

  • STM32通过PWM控制电机速度

    2024-06-25

        做STM32智能小车的实验中会用到定时器PWM输出,来改变直流电机的转速。分享本文了解如何通过PWM实现对电机速度的控制。。   上图中的ARR是我们给定时器的一个预装载值,CCRx的上下变化是产生PWM波的关键。我们假设ARR大于CCRx的部分输出为高电平(即t1-t2、t3-t4、t5-t6),ARR小于CCRx的部分输出为低电平(即0-t1、t2-t3、t4-t5),则改变CCRx的值就能改变输出PWM的占空比。因此,想要控制PWM的输出波形,重要的就是如何设置ARR与CCRx这两个寄存器的值了。STM32定时器中断    为了便于理解接下来关于PWM应用的内容,先插一段定时器中...

  • 嵌入式硬件工程师的薪资虚高吗?

    2024-06-25

        嵌入式硬件工程师在一个项目中,处于节点位置,连接软件(BSP或系统组)、采购、工业设计、结构、安规,以及部分硬件内部岗位如layout、射频、测试、生产、中试、工艺等。    说起跨部分合作,可能是下图这样,捅了娄子各自跑路。    若项目有FPGA和DSP自然要外挂这些组,还要直接对标公司巨头CEO或CTO这些老板,然而地位并非合伙人级别。    经常成为3-20多人的switch,成为事实上的天然的项目经理或产品经理,什么都要知道,什么都要协调。试想下,跟那么多人对接,吵架场景可以预期:。以最主要的工作软硬调试为例:经常要以...

  • 纯手工打造!19岁天才少年自制1200个晶体管的CPU

    2024-06-25

    动手能力哪家强?在推特上看到一个19岁的博主,耗时整整3年,纯手工自制1200个晶体管的CPU。  这位叫做 Sam Zeloof 的美国大学生,最终打造出1200个晶体管的CPU!相关推荐: 在10微米的多晶硅栅极工艺上实现,命名为Z2。 重点是,与英特尔上世纪70年代闻名于世的处理器4004使用了相同技术。 PS排阵列,车库自制,超越「摩尔定律」这款Z2芯片由第一代升级而来。 18年,17岁的他曾制作了首个集成电路Z1,有6个晶体管。  和以前一样,整个过程在他的「车库工厂」进行,使用不纯的化学品,自制的设备,没有无尘室。 首先,Zeloof 在 Photoshop ...

  • 硬件工程师VS软件工程师

    2024-06-25

        都说在软件行业35岁就遇到中年危机了,很多都羡慕硬件工程师53岁正是辉煌时刻。        然而硬件工程师似乎不是表面上看起来那么光鲜,实际上可能很狼狈。01020304050607080910    当然,以上漫画纯属调侃,硬件门槛确实比软件高,相应地收入也会随着经验积累不断增长,而且硬件工程师基本不存在中年危机。熟知每一个项目和技术的细节,在成本、功能、性能和客户之间游刃有余,容易从全盘去考虑问题,后期转项目经理也相对容易,甚至有很多人工作几年后自己去创业。

  • 代码中大量的if/else堆成了一座山?

    2024-06-25

    前期迭代懒得优化,来一个需求,加一个if,久而久之,就堆成了一座山。当代码已经复杂到难以维护的程度之后,只能狠下心重构优化。那,有什么方案可以优雅的优化掉这些多余的if/else?观点一:消灭if/else1 提前 return这是判断条件取反的做法,代码在逻辑表达上会更清晰,看下面代码:if (condition) {// do something}else{return xxx;}其实,每次看到上面这种代码,我都心里抓痒。完全可以先判断!condition,干掉 else。if (!condition) {return xxx;} // do something2 策略模式有这么一种场景,根据不同的参数走不同的逻辑,其实这种场景很常见...

  • 如何成为高级硬件设计工程师?

    2024-06-25

    前言    ARM嵌入式和单片机学习有着密不可分的关系,在学习单片机的过程中积累必要的学习经验和知识是非常有必要的,如何在这一过程中逐渐成为高级嵌入式工程师呢?本文将为大家介绍如何在学习过程中,积累成为高级嵌入式系统硬件工程师要具备的技能。模拟    对于硬件来讲有几个方向,就单纯信号来说分为数字和模拟,模拟比较难搞,一般需要很长的经验积累,单单一个阻值或容值的精度不够就可能使信号偏差很大。因此年轻人搞的较少,随着技术的发展,出现了模拟电路数字化,比如手机的Modem射频模块,都采用成熟的套片,而当年国际上只有两...

  • Proteus仿真STM32在OLED显示字符串

    2024-06-25

    工程文件:链接:https://pan.baidu.com/s/1zboiOt5w1BOBqjHXvO0kkQ?pwd=pc0a提取码:pc0a

  • 用MOS管还是三极管?

    2024-06-25

        三极管,全称应为半导体三极管,也称双极型晶体管、晶体三极管,是一种控制电流的半导体器件,其作用是把微弱信号放大成幅度值较大的电信号, 也用作无触点开关。    晶体三极管,是半导体基本元器件之一,具有电流放大作用,是电子电路的核心元件。三极管是在一块半导体基片上制作两个相距很近的PN结,两个PN结把整块半导体分成三部分,中间部分是基区,两侧部分是发射区和集电区,可分为PNP和NPN两种。    场效应晶体管(Field Effect Transistor缩写(FET))简称场效应管。主要有两种类型:结型场效应管(junction FET—JFET)和金...

  • 用MOS管还是三极管?

    2024-06-25

        三极管,全称应为半导体三极管,也称双极型晶体管、晶体三极管,是一种控制电流的半导体器件,其作用是把微弱信号放大成幅度值较大的电信号, 也用作无触点开关。    晶体三极管,是半导体基本元器件之一,具有电流放大作用,是电子电路的核心元件。三极管是在一块半导体基片上制作两个相距很近的PN结,两个PN结把整块半导体分成三部分,中间部分是基区,两侧部分是发射区和集电区,可分为PNP和NPN两种。    场效应晶体管(Field Effect Transistor缩写(FET))简称场效应管。主要有两种类型:结型场效应管(junction FET—JFET)和金...

  • 嵌入式工程师,用好C语言这一利器的三要素

    2024-06-25

        作为嵌入式工程师,怎么写出效率高、思路清晰的C语言程序呢?要用C语言的思维方式来进行程序的构架构建要有良好的C语言算法基础,以此来实现程序的逻辑构架灵活运用C语言的指针操作    虽然看起来以上的说法很抽象,给人如坠雾里的感觉,其实就是用C语言进行遇到问题、分析问题和解决问题的过程。    嵌入式工程师在编写C语言程序的时候,要针对遇到的问题进行程序构架构建。    比如我们要处理“猴子选大王”的经典问题:一群猴子,手拉手排成一个圆,从任意一只猴子开始从1开始报数,当遇到要排除的数(预先设定)时该猴子退出该...

  • 分享两种单片机编程思想

    2024-06-25

    分层思想    分层的思想,并不是什么神秘的东西,事实上很多做项目的工程师本身自己也会在用。看了不少帖子都发现没有提及这个东西,然而分层结构确是很有用的东西,参透后会有一种恍然大悟的感觉。如果说我不懂LCD怎么驱动,那好办,看一下datasheet,参考一下别人的程序,很快就可以做出来。但是如果不懂程序设计的思想的话,会给你做项目的过程中带来很多很多的困惑。    参考了市面上各种各样的嵌入式书籍,MCS-51,AVR ,ARM 等都有看过,但是没有发现有哪本是介绍设计思想的,就算有也是凤毛麟角。写程序不难,但是程序怎么样才能写的...