自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (2)
  • 收藏
  • 关注

原创 卡塔尔世界杯:带“芯片”的智能足球亮相!背后藏着哪些技术原理?

2022年卡塔尔世界杯比赛用球命名为“旅程”(阿拉伯语:AL RIHLA)。为何称其为“最快速”的足球,原因是它与往届世界杯用球相比重量更轻,可以在空中保持更快的飞行速度。这样的好处在于,一方面能够让足球飞得更快,守门员难以防守情况下,进球率能够得到提升,也可以大幅提高比赛的观赏性。

2022-11-28 10:06:56 906 1

转载 printf()是如何与UART外设驱动函数“勾搭”起来的?

今天给大家分享的是。在嵌入式世界里,输出打印信息是一种非常常用的辅助调试手段,借助打印信息,我们可以比较容易地定位和分析程序问题。在嵌入式应用设计里实现打印信息输出的方式有很多,本系列将以 IAR 环境为例逐一介绍 ARM Cortex-M 内核 MCU 下打印信息输出方法。本篇是第一篇,我们先介绍最常见的输出打印信息方式,即利用 MCU 芯片内的硬件 UART 外设。

2022-10-11 15:21:03 550

转载 一文弄懂GPIO不同模式之间的区别与实现原理

今天主要介绍了GPIO的定义,以及GPIO不同模式之间的区别与实现方式。相信看完本文,你会对GPIO有一个更深的理解。如果是做软件的小伙伴,可以不用太关注于GPIO是如何实现的,但是需要知道每个模式下GPIO的特点和应用场合。只有这样,我们在实际应用中才能更好的配置出最合适的那个。

2022-10-11 15:13:26 3195

转载 C语言从1打印到100再打印到1,该如何编写?

这个是一个知乎留言提到的,很多人也对这个有疑惑

2022-10-11 14:47:03 908

原创 网卡由哪些部分组成

媒体访问控制(MAC,Media Access Control),平时所说的MAC地址(局域网地址)指的是MAC芯片的地址。存储设备指的是EEPROM存储设备,我没用过,绝大多芯片手册里介绍MAC链接一个几K的EEPROM,内部存储MAC地址,其实没有这个EEPROM网卡也能工作,MAC地址可以待CPU启动后由CPU写入。其实,没有变压器两网卡之间也可以通信,只是这个距离会很短,距离越远衰减越大,加上变压器提高信号幅度通信距离得以提高,同样远端传递的信号幅度太低,经过变压器后得以放大,实现波形修复功能。

2022-09-22 11:31:31 352

转载 单片机跑操作系统的几种选择

单片机跑操作系统的几种选择

2022-09-22 11:18:17 1557

原创 条件编译#if、#elif、#ifdef的妙用

般情况下,C语言源程序中的每一行代码.都要参加编译。但有时候出于对程序代码优化的考虑,希望只对其中一部分内容进行编译,此时就需要在程序中加上条件,让编译器只对满足条件的代码进行编译,将不满足条件的代码舍弃,这就是条件编译。相关的预编译指令如下:

2022-09-22 11:08:45 1540

原创 hex文件、bin文件、axf文件的区别

在STM32开发中,经常会碰到hex文件、bin文件、axf文件,这些都是可以烧写到板子里运行的文件。那么,你知道这三个文件有什么区别吗?在回答这个问题之前,我们先来回顾一下C语言编译的过程。...

2022-07-21 09:12:44 649

原创 单片机三种烧录方式ICP、IAP和ISP

1)ICP使用SWD接口进行烧录程序。常用的烧录工具为J-Link、ST-Link、Nu-Link;与之配套的烧录软件为J-Flash、NuMicro_ICP_Programming_Tool、st-linkutility。(2)ISP是使用引导程序通过USB/UART等接口进行烧录的,首先就是需要有BoodLoad程序。最常见的烧录方式就是学习8051单片机时使用的STC-ISP烧录工具了。(3)IAP就是通过软件实现在线电擦除和编程的方法,没有使用任何工具,仅仅是通过软件的方法来更新Flash。...

2022-07-19 14:23:25 1125

转载 手把手教你搭建一个轻量级电子实验室

最近有不少朋友问道,搭建一个电子实验室是不是要很多钱?其实如果只是业余爱好的话,搭建一个轻量级的实验室,费用不是很贵,咱们普通人也是可以尝试的。. 下面具体分类说一下都需要准备哪些设备:仪器类:首先是电源,首选双路可调稳压电源,一般几百块钱就能拿下,能符合大部分的板机设计要求;万用表必不可少,福禄克,胜利牌的就行,一般几十块或几百不等;示波器是工程师必备神器,泰克,选个普源RIGOL其实就够用了,预算充足可以买好点,预算紧张的话,其实1000多也能拿下普源了,一般调试其实也够用的。焊接工具:焊台必不可少,0

2022-07-11 10:24:08 511

转载 TCP常用应用接口的使用封装

一个TCP通信的框图如下: 这个图中也列出了常用的几个接口函数,其中,有几个函数调用时传参比较繁琐。为了提高我们的编码效率,有必要对这些接口的使用进一步地封装,使得函数调用更简单些。下面给大家整理一份:tcp_socket.h:tcp_socket.c:tcp_server.c:tcp_client.c:测试结果:...

2022-07-11 10:18:40 737

原创 串口丢数据的几个常见原因

串口是工程师最常用的串行外设之一,但在实际应用中,还是会经常遇到各种问题,比如丢失一字节数据。今天,我们就结合STM32来讲讲UART相关内容,以及容易丢失一字节数据的问题。这里重点说一下UART状态寄存器中的几个标志位:TXE、 TC、 RXNE、 ORE。 这几个标志位在编程中经常使用,直接用函数库的同学可能没有关心过这几个标志位,数据丢失有可能就是对它们操作不当而导致出错。TXE:发送数据寄存器为空 (Transmit data register empty)0:数据未传输到移位寄存器1:数据传输到

2022-07-11 10:13:39 3003

转载 手把手教你写链表,小学生看了都说好~

摘要:明明我们在之前已经接触了数组,感到数组已经是万能的数据存储位置了。但是,如果我们一直在使用比较复杂的数据(也就是比较多的数据时),肯定会感到很反感。因为对于数组这种数据结构,在你自己使用之前,一定要对其大小进行一番定义。这样一来,它的存储空间在数据处理过程中便显得极为不方便。因为谁也不想对将要处理的数据做一个空间的预算,这几乎是所有程序员都很忌讳的,并且还要让其空间足够大,这样才能满足我们的要求(但如果分配的太多,难免会浪费内存)。 所以,这就是为啥你要用链表、学链表。链表是一种数据结构,它弥补了数组

2022-07-11 10:08:52 761

原创 排查串口通信问题

串口通信问题排查

2022-06-07 15:24:06 1174

原创 C语言 / C++基础面试知识大集合

相对而言,C语言和C++相关的面试题比较少见,没有Java方向写的人那么多,这是一篇 C 语言与 C++面试知识点总结的文章,个人感觉非常难得,希望能对大家有所帮助。const作用 修饰变量,说明该变量不可以被改变; 修饰指针,分为指向常量的指针(pointer to const)和自身是常量的指针(常量指针,const pointer); 修饰引用,指向常量的引用(reference to const),用于形参类型,即避免了拷贝,又避免了函数对值的修改;

2022-05-31 10:36:21 851

转载 手把手教你写出令人窒息的烂代码

在 GitHub 上有一个项目,它描述了「最佳垃圾代码」的十九条关键准则。从变量命名到注释编写,这些准则将指导你写出最亮眼的烂代码。为了保持与原 GitHub 项目一致的风格,下文没有进行转换。读者们可以以相反的角度来理解所有观点,这样就能完美避免写出垃圾代码。项目地址:https://github.com/trekhleb/state-of-the-art-shitcode当然,以下十九条垃圾代码书写准则并没有面面俱到,如果读者们发现有一些难以忍受的烂代码习惯,也可以发表你的看法。💩

2022-05-31 09:44:12 213

原创 如何获取单片机程序的运行时间?

单片机编程者需要知道自己的程序需要花费多长时间、while周期是多少、delay延时是否真如函数功能描述那样精确延时。测试代码的运行时间的两种方法1.使用单片机内部定时器在待测程序段的开始启动定时器,在待测程序段的结尾关闭定时器。为了测量的准确性,要进行多次测量,并进行平均取值。2.借助示波器的方法在待测程序段的开始阶段使单片机的一个GPIO输出高电平,在待测程序段的结尾阶段再令这个GPIO输出低电平。用示波器通过检查高电平的时间长度,就知道了这段代码的运行时间。显然,借助于示波器的

2022-05-31 09:21:59 619

原创 C语言中的关键字应用技巧(volatile、const、struct/union、_ _预定义_ _、#/##、void/void*、weak)

嵌入式C开发关键字的应用技巧1、volatilevolatile修饰表示变量是易变的,编译器中的优化器在用到这个变量时必须每次都小心地从内存中重新读取这个变量的值,而不是使用保存在寄存器里的备份,有效的防止编译器自动优化,从而与软件设计相符合。中断服务与主程序共享变量://volatile uint8_t flag=1;uint8_t flag=1;void test(void){ while(flag) { //do something }

2022-05-30 14:23:45 535 1

原创 计算机中的速率、带宽、时延、利用率解读

计算机网络的性能一般是指它的几个重要的性能指标。但除了这些重要的性能指标外,还有一些非性能特征(nonperformance characteristics)也对计算机网络的性能有很大的影响。那么,计算机网络的性能指标分别是哪几个?1、速率计算机发送出的信号都是数字形式的。比特(bit)是计算机中数据量的单位,也是信息论中使用的信息量的单位。英文单词bit来源于binary digit,意思是一个“二进制数字”,因此一个比特就是二进制数字中的一个1或0.计算机网络中的速率指的是连接在计算机网

2022-05-30 14:10:05 6153 2

转载 SPI—读写串行FLASH

参考转载《stm32f103库函数开发》

2022-03-25 16:57:08 2431 1

转载 I2C—读写EEPROM

转载stm32f103库函数开发指南中的IIC部分

2022-03-23 17:34:04 9230 2

转载 STM32中断:NVIC与EXTI

STM32中断,NVIC和EXTI的含义,及NVIC和EXTI对应的结构体与初始化函数,最后再用一个实验来体会中断在软件编程中的用法

2022-03-18 11:59:00 2071

转载 STM32启动过程(汇编文件)解读

stm32启动汇编文件解读

2022-03-17 14:51:57 919

转载 数据类型、变量、堆、栈、静态、常量

1、数据类型本质分析1.1 数据类型的概念●“类型”是对数据的抽象●类型相同的数据有相同的表示形式、存储格式以及相关的操作●程序中使用的所有数据都必定属于某一种数据类型1.2 数据类型的本质●数据类型可理解为创建变量的模具:是固定内存大小的别名。●数据类型的作用:编译器预算对象(变量)分配的内存空间大小。●注意:数据类型只是模具,编译器并没有分配空间,只有根据类型(模具)创建变量(实物),编译器才会分配空间。2、变量的本质分析2.1 变量的概念概念:既能读又能写的

2022-03-16 13:50:48 287

转载 工程师笔记 | 嵌入式工程师常用软件

今天分享一份嵌入式软件工具清单,希望能对大家有所帮助。1、BowPad我们常常需要一些轻量级的文本编辑器,用来编写少许代码或者看log等。BowPad就是一个超级好用的、小巧的文本编辑器。BowPad源码/安装包下载地址:https://github.com/stefankueng/BowPad2、keilkeil大家都熟悉,单片机开发IDE,我们学习单片机装的第一个软件应该就是keil吧~3、VSCodeVSCode(全称:Visual Studio Code.

2022-03-16 11:55:10 1703

转载 工程师笔记 | 结构体

1、结构体的申明与定义1.1申明结构体的声明使用struct关键字,如果我们想要把我们的学籍信息组织一下的话,可以这样表示:这样,我们就相当于描绘好了一个框架,以后要用的话直接定义一个这种类型的变量就好了。1.2定义我们刚刚申请了一个名叫Info的结构体类型,那么理论上我们可以像声明其他变量的操作一样,去声明我们的结构体操作,但是C语言中规定,声明结构体变量的时候,struct关键字是不可少的,也就是:struct 结构体类型名 结构体变量名不过,你可以在某个函数里面...

2022-03-04 16:13:20 463

转载 LCD屏与FSMC外设

LCD、LED屏的原理与区别,STM32中的FSMC控制LCD屏的原理

2022-03-02 11:58:23 2325

转载 常用存储器介绍(RAM、ROM、FLSAH)

存储器种类存储器是计算机结构的重要组成部分。存储器是用来存储程序代码和数据的部件,有了存储器计算机才具有记忆功能。基本的存储器种类见图基本存储器种类。存储器按其存储介质特性主要分为“易失性存储器”和“非易失性存储器”两大类。其中的“易失/非易失”是指存储器断电后,它存储的数据内容是否会丢失的特性。由于一般易失性存储器存取速度快,而非易失性存储器可长期保存数据,它们都在计算机中占据着重要角色。在计算机中易失性存储器最典型的代表是内存,非易失性存储器的代表则是硬盘。1.RAM存储器RAM是“

2022-03-01 16:35:51 3512

转载 单片机工程师如何跨步到嵌入式Linux

嵌入式Linux

2022-02-24 10:56:24 564

转载 PCB Layout的10个细节

PCB layout板子需要注意的点!

2022-02-24 10:29:38 623

转载 51单片机与STM32的区别(为何51单片机IO引脚的驱动能力弱)

1、51单片机的特性51单片机之所以成为经典,成为易上手的单片机主要有以下特点:从内部的硬件到软件有一套完整的按位操作系统,称作位处理器,处理对象不是字或字节而是位。不但能对片内某些特殊功能寄存器的某位进行处理,如传送、置位、清零、测试等,还能进行位的逻辑运算,其功能十分完备,使用起来得心应手。同时在片内RAM区间还特别开辟了一个双重功能的地址区间,使用极为灵活,这一功能无疑给使用者提供了极大的方便。乘法和除法指令,这给编程也带来了便利。很多的八位单片机都不具备乘法功能,做乘法时还得编上一段子程.

2022-02-23 15:31:11 4819

转载 RTOS是如何进行任务划分的?

一、任务的定义在嵌入式开发中,面对的都是单个 CPU 的情况,而在这个开发过程中,我们会涉及到裸机开发或者是跑操作系统的开发,在裸机开发的过程中,整个系统是以模块的角度来看的,也就是系统在运行完了这个模块之后,再去运行另外一个模块。但是,在有操作系统的情况下,我们是把系统处理的一件一件事情以任务的角度来进行划分的,这任务与任务之间是并发执行的。每个任务的运行看起来是独立的,从宏观的角度看是多个任务同时在占据着 CPU 的执行,就像是多 CPU 一样,在真正的多 CPU 系统中,每个 CPU 都有一套自己

2022-02-22 16:54:37 794

转载 3年的MCU工程师就写出这样的代码?

今天分享的文章,主要给那些没有软件设计思想的MCU软件工程师看的。随着目前MCU的各方面性能显著提升,一些以MCU为控制中心的嵌入式系统也是越来越复杂,毫无软件设计理念的代码真的是拖累单片机,所以对每个MCU软件工程师在软件设计等方面的要求也将越来越高。今天利用一个实际发生的例子,对入行的初级软件工程师提一些软件设计上的建议,并分享了一些经常走的弯路,希望可以帮到大家。这篇文章我没有谈编程的规范性的东西,如果你想让自己的程序文件代码更加直观、看起来美观、可读性强,推荐学习一下全面的编程规范,比如网络上

2022-02-22 14:23:04 109

转载 固件、驱动、软件的区别

不管我们使用什么操作系统,无论是 Windows、macOS,还是 Linux ,里面都安装了许多软件、驱动程序和固件。但是,这三者概念有什么区别?【转载微信公众号:良许Linux 这是一位励志的大神,转行自学IT进入大厂,至少是我的偶像】文字描述太抽象了,我们直接来看漫画吧!好了,看完漫画,我们再来看正规的解释是怎样的。简单来讲,固件、驱动程序和软件之间的根本区别在于它们的设计目的。1. 固件固件(Firmware)就是写入 ROM (只读存储器)中的程序,固件担任着一个系统最基

2022-02-22 14:11:10 982 1

转载 推挽输出与开漏输出

推挽输出要理解推挽输出,首先要理解好三极管(晶体管)的原理。下面这种三极管有三个端口,分别是基极(Base)、集电极(Collector)和发射极(Emitter)。下图是NPN型晶体管。这种三极管是电流控制型元器件,注意关键词电流控制。意思就是说,只要基极B有输入(或输出)电流就可以对这个晶体管进行控制了。下面请允许我换一下概念,把基极B视为控制端,集电极C视为输入端,发射极E视为输出端。这里输入输出是指电流流动的方向。当控制端有电流输入的时候,就会有电流从输入端进入并从输出端流出。而PNP

2022-02-18 15:24:20 8245 1

转载 嵌入式C语言编码规范

首先,借助本文的原作者–正点原子团队的左忠凯大神的一句话来开始:之所以会写这份文档是要下定决心修改自己那写的跟一坨屎一样的垃圾代码规范!相信正在阅读本文档的读者出发点也是如此(可能你的代码规范还没有像一坨屎那么严重)第一章 规范说明因为作者工作内容的原因(做单片机开发板的),此前没有代码规范化的思维,变量,函数的命名随心所欲,大小写混用;代码注释“//”和“/* */”混用等等很多陋习,这样的陋习写出的例程供阅读者学习也会带坏人家哒,所以痛定思痛,一定要改掉这些陋习。在这个看脸的时代,优美的代码风格让

2022-02-11 17:02:30 516

转载 嵌入式代码是如何在芯片(SOC)上跑起来的?

SOC是啥?System on Chip。一个芯片,但是片上有好多东西的意思。市面上的AI芯片、包括你知道的麒麟xxx,骁龙xxx等等一系列手机芯片都是SOC。对于SOC设计者来讲,显然要知道码农们码出来的一行行代码是如何在SOC上跑起来的。来自清华大学工学博士桔里猫用科普的方式为介绍SOC代码的重要步骤,其中省略了大量细节,尽量用非专业的词汇讲清楚。当然,如果要真的研究这些东西,还需要大量阅读文档。一段C代码要在SOC上跑起来,一般需要6个步骤。这是一个总图,包括了最简单的编译流程以及一个SO

2022-01-22 15:16:37 1659

转载 工程师笔记|常见的嵌入式软件工程师面试题

Q:什么是ISR?A:ISR 是指中断服务程序。 这些是存储在特定内存地址的函数,当发生某种类型的中断时会调用这些函数。 Cortex-M 处理器系列具有管理中断执行的 NVICQ:我们可以给ISP传递参数或从ISR返回一个值吗?为什么?A:ISR 不返回任何内容并且不允许传递任何参数。当硬件或软件中断发生时会调用 ISR,它不会被任何代码调用,所以这就是没有参数传递到 ISR 的原因。因为它不会被任何代码调用,所以它不会有返回值。Q:什么是 volatile 关键字?A:volatile

2022-01-05 17:18:34 5031

转载 工程师笔记|在CMD窗口运行C语言

cmd窗口大家可能都比较熟悉,那如何在cmd窗口编译运行C语言程序呢?其实很简单的,只需要下载一个C/C++编译器,添加一下环境变量,之后就能在cmd窗口中编译运行C语言程序了,下面我简单介绍一下实现过程:下载C/C++编译器,这里可以下载MinGW,包含常见的gcc,g++等编译器,下载的话,直接到官网上下载就行,选择适合自己系统的版本:下载完成后,直接双击就能安装,安装后的目录文件如下,包括我们常用的gcc,g++,gdb等编译调试器,编译c语言程序的话,直接使用gcc就行,如下:为了在c

2022-01-05 11:48:59 5675

转载 工程师笔记|C语言的进阶使用

关于C语言的进阶使用,讲三点壹:#include"xxx.c"贰:void弎:逗号表达式壹 #include"xxx.c"1、操作一波咱们先体验一波#include"xxx.c"文件能不能用:参考demo: 1//FileName :main 2#include <stdio.h> 3#include <stdlib.h> 4 5/*************************** 6 * .c文件声明区域 7 **************

2022-01-05 11:34:42 511

等保2.0历年真题题库

单选题、多选题、判断题、简答题 含答案 部分题目带解析

2023-10-23

stm32cubemx

stm32cubemx

2022-03-31

5G物联网及NB-IoT技术详解(pdf).zip

5G物联网及NB-IoT技术详解(pdf).zip

2021-12-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除