单片机学习指南
队长 路飞的电子设计宝藏 7月26日
鉴于原文只介绍了51单片机的学习路线(当时STM32刚兴起),与当前流行的STM32等高端单片机相比,显得有些落后,所以笔者更新了此文。
一、51和STM32的区别。
STM32比51主频高、RAM大、FLASH大,那么STM32能处理的事情就更多了。
STM32外设比51多,如:CAN、USB、FSMC等,能让你省点芯片。
STM32有固件库,不再需要看着手册,查寄存器来写代码,网上也有很多例程。
众多优势让STM32成为大众化、主流单片机,所以必须从51过渡到STM32的时代。
二、内核与外设。
外设就是外部的设备,如:GPIO、ADC、IIC、UART、SPI等。
内核就是内部的核心,如:ALU算术逻辑单元、流水线、指令集等。
51的内核仍然叫51。STM32的内核有Cortex M0、M0+、M3、M4、M7等。
因为ARM Cortex系列的芯片分为高端的A系列,中端的R系列、低端的M系列,所以STM32有好几种内核。
三、如何从51过渡到STM32?
尽管51有那么多的不好,但是低成本依然是它的优势。一片OTP(一次性编程)的51低至0.3毛,它适用于众多家电产品。
所以并不能以单纯的技术崇拜而把51贬得一无是处。只不过,我们需要掌握更多的技术,以适应不同的工作环境。
既然要从51过渡到STM32,那么停留在51的时间不宜太久,掌握基本的定时器、串口,就可以转到STM32上来了。
有的学校先教汇编,再教C,但我认为,先学C,再到汇编会比较好,因为汇编枯燥难学,导致单片机还没用起来,兴趣就消减一大半了。正如linus那句话,你得先学会使用它。
一、首先掌握C语言语法。
单片机用的C语言叫C51,C51除了标准C的语法之外,还特意为单片机增添了几个语法而已,没有很大区别,那么我们可以装个VS(别再用VC6.0那个老掉牙的IDE啦)然后,随便找本语法书抄代码,模仿写,不看书做出课后习题就可以了,其中流程控制(包括if,for,while,switch等)以及指针和结构体都是需要掌握的。推荐看视频《边用边学C语言》。
二、少量的实践。
接下来,你可以买一块单片机开发板来做一些小玩意了(只买一块开发板56元即可,不必浪费太多钱),譬如:摇摇棒,光立方,密码锁,超声波测距,红外摇控等等(很多新奇有趣的小玩意都可以在论坛找到)。当然,也不需要每个都做,我们可以选一些差异性较大的来做,这样升级会快一些。推荐视频《十天学会单片机》,也可以看开发板配套的视频,教材《单片机c语言程序设计实训100例——基于8051+proteus仿真》。适当的做几个就行,不要在这个阶段停留太久,重点掌握定时器和串口。
三、养成良好的编码习惯。
在《十天学会单片机》里会出现众多不怎么好的代码,但是我们不能一下子写出优秀的代码,必须有个过渡期,所以建议大家先看郭大侠的视频。那么如何写出高效而且可读性好的代码呢?这里只提到一点,不要用拼音来命名变量或者函数名,像int shi,fen,miao;这些都是不良的编码习惯,必须全部使用英文命名。推荐的做法就是多参考大神们写的代码,在百度文库或者各大电子论坛都可以看到很多优秀的代码。此外,推荐《从单片机初学者迈向单片机工程师》、《MISRA C标准工程师笔记》、《C语言编程规范》、《C51代码风格》。
四、了解汇编语言。
单片机工程师又叫固件工程师,因为他们写的代码都是跟寄存器打交道,而寄存器又可以直接控制硬件,处于最底层的软件而且不用经常改动,所以叫固件。这部分需要数电、模电的基础才好理解,所以在大学都是先教数电、模电再教单片机的。现在你要用汇编语言来玩单片机,你会发现汇编比较棘手,写出来的代码可读性差、可移植性差而且很难维护,但汇编即让你很清晰地感受到单片机是如何工作的,以及理解C语言指针的原理。不过,我们不需要钻研汇编语言,只需要有所了解,比如,精准的延时。
一、编译、编辑、版本控制器。
由于STM32的固件库中,函数名、变量名都是很长,我们不可能逐一输入,这就需要用到先进的工具。
1、编译器。仍然使用keil编译代码。
2、编辑器。编辑器就是写代码的工具,因为keil的代码补全、提示都很差,所以要用其它工具来写代码。这就得开两个软件,一个写代码,一个编译代码。虽然这样有点麻烦,但是相对于输入那一大串函数名来比,不算什么。推荐VS、Eclipse(C/C++版本)。不推荐使用source insight(功能不够强大)。
3、版本控制器。这个东西就是用来备份代码的,不要再用压缩包了。推荐git教程。
二、学会固件库。
有了上一步的准备工作之后,先买一块STM32开发板,带仿真器,248元。这里下载代码可不像51那些,用串口就能下载的了,得另外用一个仿真器。
这里的仿真器有ST link、Ulink等,不推荐使用J link。而仿真器的接口有JTAG和SWD,推荐使用SWD,接3根线就可以了。
推荐教材《STM32开发指南库函数教程》,也可以看开发板配套的视频。这里要掌握STM32的外设,如:ADC、RTC、CAN、IIC、SPI、UART、DMA、SDIO、IAP等。
三、自制PCB。
数电、模电基础差的,需要先补充点理论再来。然后下载一个Altium Designer6.9,看《Altium Designer视频教程》。根据自己感兴趣的小玩意来做一块PCB。画好之后先发到群里,让大家指导一下,然后再发到嘉立创打样,很便宜的,而其它材料则到淘宝上买。主要掌握焊接、维修、原理图、PCB等基本功,自己多动手就能掌握的。
四、单片机外面的世界。
就算你现在能玩转单片机,但也只是打开了一扇小小的窗户而已,下面你可以选一个方向,但是工作中可以会用到几个方向的知识,反正尽量多学点。
1、嵌入式操作系统。不推荐用51单片机跑系统。而STM32可以跑ucos II、ucos III、free RTOS、coos、RT-Thread、RTX等。推荐学ucos II,教材是任哲的《嵌入式实时操作系统ucosII原理及应用》,只要掌握一种嵌入式操作系统,其它都可以触类旁通。移植系统时,会用到汇编。推荐学习free RTOS或者RT-Thread。
2、ucgui/STemwin、Touch GFX。STM32可以通过FSMC接口来驱动TFT LCD屏,这里要用到图形界面库,可以学STemwin,STemwin其实就是ucgui,推荐《STemwin开发手册》,也可以学习Touch GFX。
3、上位机。使用单片机采集信号送到PC机上,而PC机需要一个上位机来控制单片机,这个上位机可以用Labview、C++、C、JAVA、甚至是HTML5来写。其中最常用的是单片机跟PC机的串口通信,上位机建议用C或者QT来写,尽管还有很多企业用MFC(C++库),但是上手比较难,不推荐学MFC。推荐的教材是《C#入门经典》、《QT简介》。
4、数据结构和算法。推荐的教材是周航慈的《嵌入式系统软件中的常用算法》、《数据结构课件》。
5、接口应用。单片机的内部资源比较少,很多时候需要外接一些芯片、传感器。这里需要到用模电、电子测量、计算机网络等知识。推荐的教材是陈尚松等著的《电子测量与仪器》和谢希仁的《计算机网络》。此外,还会用到一些通信模块,比如Zigbee、WIFI、蓝牙、NB-IOT、433模块、NRF24L01、RFID智能卡等,有兴趣可以弄一下,这些都是比较实用的技术。
五、其它问题。
1、单片机的代码是如何运行的?
推荐看《计算机组成原理》。
2、FPGA。
可以参考本博客的《如何学习FPGA》。
3、嵌入式。
很多电子专业的学生就感觉嵌入式很难,那是因为嵌入式涉及很多计算机领域的知识,而这些知识很多是电子专业不开课的,基本功没过关,学起来肯定吃力。具体的学习路线可以参考本博客的《如何学习嵌入式软件》。
4、硬件设计。
可以参考本博客的《如何学习硬件设计——理论篇》、《如何学习硬件设计——实践篇》。
5、开发板的选择。
这里推荐的开发板都是一整板(上面的链接并非广告,只是确实有人不会选开发板才给出来的),里面有很多芯片的。不推荐一个核心板留了很多接口,每个接口都要另外买一块小板,这种板叫子母板,一个母板不贵,但是子板很多,买多几块就花很多钱,而且子板很小,容易丢。
6、为什么学生很难定方案?
因为学生积累的东西并不多,考虑的不那么周全,很多知识似懂非懂,难以制订方案。这时要多接触新事物,只要积累的多,就自然而然的能出方案了,不用太急躁。
7、MDK。
Keil有51版本和ARM版本,其中ARM版本的Keil又称为MDK。
8、stm32 cubemx。
cubemx可以自动生成配置代码,虽然很方便,但不建议初学者使用,会让你懒得不想写代码。
9、为什么编译没问题,下载到单片机却不对?
编译没问题,说明语法没问题,但不能表明逻辑、功能是正确的。
10、为什么网上都有那么多代码可以复制粘贴,还要自己写代码?
因为网上能找到的代码很多,而网上找不到的代码却更多。
11、proteus及multisim仿真。
proteus很适合仿真单片机,但是仿真的效果不能替代实物,一切以实物为准。
multisim适合在学模电时,做一下仿真,以帮助理解电路。
12、为什么有的STM32开发板可以用串口下载代码,还需要仿真器吗?
STM32有个IAP的功能(又称为远程升级),可以用任意的接口来下载代码,但是这种方法是建立在芯片本身有IAP的代码,才可以使用。
在一个没有任何代码的芯片上,不能使用串口下载代码,这时,必须使用仿真器。
13、单片机不就是C语言嘛,还需要学单片机原理?
在工程上会遇到单片机内部资源的调度、IO口的电气特性、带宽等问题,你不懂单片机原理是解决不了这些问题的。
14、单片机的汇编和微机原理的汇编。
微机原理讲的是PC机中x86架构的汇编,和51单片机的汇编是有区别的。不要看错书。
而51单片机的汇编和STM32的汇编也是有区别的,51的是CISC架构,而STM32的是RISC架构。
15、除STM32以外的高端单片机品牌。
有NXP的LPC、新唐、GD32(高仿STM32)、英飞凌、TI的MSP430、Microchip的PIC、瑞萨、ADI、Maxim(美信)、三星。
16、其它单片机品牌。
合泰、辉芒、松瀚、海尔(东软)、STC、义隆、新茂、中颖、ABOV(现代)、Megawin(笙泉)、晟矽微、HOLTEK(盛扬)、九齐、佑华、灵动微。
————————————————
版权声明:本文为CSDN博主「队长-Leader」的原创文章,授权转载
单片机如何从上电复位执行到main函数?
单片机如何从上电复位执行到main函数?
\\\插播一条:文章末尾有惊喜哟~///
从事嵌入式开发的搭档可能会思考过一个问题,我们一般都是使用芯片厂商提供的驱动库和初始化文件,直接从main函数初始写程序,那么系统上电之后,程序怎么引导进main函数执行的呢?还有,系统上电之后RAM的数据是随机的,那么定义的全局变量的初始值又是怎么实现的呢?
下面我将带着这两个问题,以Cortex-M架构为例,采用IAR EWARM作为编译工具链,从系统上电之后执行的第一条代码初始,梳理系统的启动过程,了解编译器在此期间所做的工作。其他的工具链,如Keil和GCC在系统初始化过程所做的工作也是相似的,但详细的实现有所差异。
1、启动文件
芯片厂商提供的启动文件,一般是采用汇编语言编写,少数用C语言。在启动文件中一般至少存在下面两个局部内容:
1、向量表
2、默认的中断和异常处理程序
向量表实际上是一个数组,放置在存储器的零地址,每个元素存储的是各个中断或异常处理程序的入口地址。以STM32F107芯片基于IAR工具的启动文件为例:
文件的开头定义了一个名为__vector_table的全局符号,“DATA”的作用是在代码段中定义一个数据区,用作向量表。数据区的内容是使用DCD指令定义的32位宽度常量,除了第一个sfe(CSTACK)比较特殊以为,其他的常量都是异常和中断效劳程序的地址(在编译时函数名会被替换成函数的入口地址)。sfe(CSTACK)是IAR汇编器段操作,用于获取段(section)的完毕地址,在这里意欲何为呢?
实际上这是获取堆栈基地址的操作。IAR在链接器脚本(*.icf)文件中定义堆栈,实际是定义了一个名为“CSTACK”的空闲块(block),如下图的脚本命令所示。所谓的块就是保留一段不间断的地址空间,用来作为堆栈或者堆。当然,块也能够是用内容的,例如能够用来管理段,但不在今天的探讨范围。
我们知道Cortex-M架构的堆栈模型是满减栈,堆栈从高地址向低地址增长,因此堆栈的基地址是CSTACK的完毕地址。
向量表的第一个元素是栈基址这是由Cortex-M架构定义的。系统上电后硬件自动从向量表中获取,并设置主堆栈指针MSP,而不是像其他ARM架构,堆栈指针须要通过软件来设置。
向量表中第二个元素是复位异常(Reset_Handler)的入口地址。系统上电后,硬件自动从__vector_table + 4的位置读取,并从读取到的地址初始执行。系统上电后CPU执行的第一条是Reset_Handler函数的第一条语句。
上面的THUMB命令表示接下来的代码采用THUMB模式(Cortex-M只支持Thumb-2指令集);SECTION用于定义一个段,段名为“.ResetHandler”,段的类型是代码(CODE);REODER指示用给定的名称开启一个新的段;ROOT指示链接器,当段内的符号没有被引用,链接器也不能够丢弃这个段。
PUBWEAK是弱定义,假如用户在其他位置编写了中断处理函数,在连接时实际链接用户所编写的,启动文件中用汇编写的效劳函数会忽略。之所以要在启动文件中以弱定义的方式编写全部的异常和中断效劳函数,是为了防止用户在没有编写效劳函数的情况下开启并触发了中断,导致系统的不确定。
2、系统初始化过程
在EWARM的工程Options > Debugger > Setup中将“Run to”勾选取消,这样在进入调试之后就会停第一条要执行的代码的位置:
进入调试之后会停在启动文件Reset_Handler函数第一条汇编指令位置:
此时,通过寄存器观察窗口查看SP的值为0x20009820。通过链接时生成的map文件,查看CSTACK的地址范围,0x20009820正好是CSTACK的完毕地址。有了MSP,C代码就能运行了。
ystemInit函数是芯片厂商依据ARM的CMSIS规范提供的一个系统根底配置函数,配置根底的时钟系统和向量表重定位等。这里的LDR是伪指令,它将SystemInit函数的地址加载到寄存器R0,实际上是通过PC偏移寻址来获取SystemInit的地址。
从上面的图能够发现一个问题,在反汇编窗口能够观察到SystemInit的地址是0x20000150,但加载到R0寄存器后却是0x20000151。这是由于在使用跳转指令更新PC时,须要置PC的LSB为1,以表示THUMB模式,由于Cortex-M不支持ARM模式,因此LSB总是1。
执行完芯片厂商提供的SystemInit函数之后,跳转到__iar_program_start,这是IAR编译器提供的初始化代码的入口。
__iar_program_start首先会执行两个函数:__iar_init_core和__iar_init_vfp,能够完成一些CPU和FPU相关的初始化操作,在某些ARM架构打包好的运行时库会有这两个函数,用户也能够重写这两个函数来自己实现一些相关的操作。
之后,跳转到__cmain函数执行。在__cmain中调用了一个__low_level_init函数,该函数专门用于提供给用户编写一个初阶的初始化操作,它在全局变量初始化之前执行,例如可用在__low_level_init中初始化SDRAM,这样就能够将全局变量定义到SDRAM中使用。
__low_level_init能够在任意的C文件中编写,注意它的返回值,假如返回0,后续就会跳过变量初始化操作,正常一般都是返回1。
3、全局变量的初始化
此后进入到__iar_data_init3函数,在这里会完成所有具有初始值的全局/静态变量的赋值,以及零初始化全局/静态变量的清零操作,分别调用__iar_copy_init3和__iar_zero_init3,将保存在ROM区由链接器生成的变量初始值复制到变量的地址。注意,新的EWARM版本默认变量初始化操作可能会采用压缩算法,实际变量初始化调用的函数可能有区别。
在全局变量未初始化之前,通过watch窗口能够看到,变量的值都是随机数。
在__iar_data_init3执行完成后,全部变量的初值赋值已经完成。
在__cmain函数的最后,跳转到用户的main函数,最终初始用户的代码执行。
了解了编译器所提供的初始化过程和处理器架构,我们能够依据自己的需求定制系统的初始化。
例如,在进入__iar_program_start之前,就能够执行必要的硬件初始化操作,能够用汇编写,也能够用C写。还能够手动控制变量的初始化操作,自己实现变量的初始化。甚至,完全不采用IAR编译器提供的初始化操作,自己从复位序列引导至main函数那也是能够的。
硬件开发工具:
Altium Designer 17.1
编程开发工具:
KEIL 4
程序下载工具:
STC-ISP
串口驱动:
CH341SER
单片机最小系统介绍
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理才能的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,开展到此时的300M的高速单片机。本文的单片机特指51单片机,详细芯片型号是STC89C52RC。需注意STC89C51,STC89C52,AT89C51,AT89C52都是51单片机的一种详细芯片型号。
最小系统组成:
51单片机最小系统:单片机、复位电路、晶振(时钟)电路、电源
最小系统用到的引脚
1、主电源引脚(2根)
VCC:电源输写,接+5V电源
GND:接地线
2、外接晶振引脚(2根)
XTAL1:片内振荡电路的输写端
XTAL2:片内振荡电路的输出端
3、控制引脚(4根)
RST/VPP:复位引脚
电源
设计使用的电源接口是DC 5V。USB座能够查到手机充电口,电脑USB端取电。接好线路后,按下电源开关,单片机即可初始工作。
输写电源及启动按键
DC 5V连接线
复位电路
复位电路
在电路图中,电容的的大小是10uf,电阻的大小是10k。
在5V正常工作的51单片机中小于1.5V的电压信号为低电平信号,而大于1.5V的电压信号为高电平信号。能够算出电容充电到电源电压的0.7倍,即电容两端电压为3.5V、电阻两端电压为1.5V时,须要的时长约为T=RC=10K*10UF=0.1S。
也就是说在单片机上电启动的0.1S内,电容两端的电压从0-3.5V不断增加,这个时候10K电阻两端的电压为从5-1.5V不断减少(串联电路各处电压之和为总电压),所以RST引脚所接管到的电压是5V-1.5V的过程,也就是高电平到低电平的过程。
单片机RST引脚是高电平有效,即复位;低电平没效,即单片机正常工作。所以在开机0.1S内,单片机系统RST引脚接管到了时长为0.1S左右的高电平信号,所以实现了自动复位。
在单片机启动0.1S后,电容C两端的电压持续充电为5V,这是时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。当按键按下的时候,开关导通,这个时候电容两端构成了一个回路,电容被短路,所以在按键按下的这个过程中,电容初始释放之前充的电量。随着时长的推移,电容的电压在0.1S内,从5V释放到变为了1.5V,甚至更小。依据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接管到高电平。单片机系统自动复位。
晶振电路
晶振电路
晶振根本概念晶振全名叫晶体振荡器,每个单片机系统里都有晶振,晶振是由石英晶体经过加工并镀上电极而做成的,主要的特性就是通电后会产生机械震荡,能够给单片机提供稳定的时钟源,晶振提供时钟频次越高,单片机的运行速度也就越快。晶振用一种能把电能和机械能互相转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。
晶振起振后,产生的振动信号会通过XTAL1引脚,依次经过振荡器和时钟发生器的处理,得到机器周期信号,作为指令操作的依据。51单片机常用的晶振是12M和11.0592M
元器件清单及样机焊接
元器件清单
CommentDescriptionDesignatorFootprintLibRefQuantity
30P陶瓷电容C2, C3CAP-2.54Cap2
10uF/16V直插电解电容CE1CAP 1.5*4*8CE1
CON9直插排阻10KJ0R SIP9-2.54CON91
CON22 Pin排针J4HDR2.54-LI-2PCON21
HEADER 44 Pin排针JP3, P6HDR2.54-LI-4PHEADER 42
红色直插5mm LEDLED1, LED2LED 5MM-RLED-5MM2
CON84 Pin排针P0, P1, P2, P3HDR2.54-LI-8PCON84
KEY自锁按键POWER_BUTTONSW-8X8X8HEADER 3X21
DC 5V电源DC 5V插座PW_5VDC05HEADER 31
10K电阻R1AXIAL0.3RES21
2K电阻R2, R3AXIAL0.3RES22
SW-PB轻触按键S1SW-0606SW-PB1
STC89C52RC8-Bit Microcontroller with 4K Flash ROMU1DIP40AT89C511
11.0592M晶振Y1OSC HC-49SCRYSTAL1
假如不想直接焊芯片到板子,能够买个下图黑色的紧锁座。规格选DIP40
PCB板制作
方法1:学校实验室常用的DIY腐蚀电路板制作(略)
方法2:外发给专业的PCB工厂。举荐嘉立创https://www.jlc.com/#
可代发,须要请私信
空板正反面:
空板
焊接注意事项
直插电解电容,和LED灯是有正负极之分的。
电解电容正负极分辨:
1.看实物套管
2.看引脚长短:
电解电容正极引线比较长、负极稍短
LED灯正负极分辨:
1.引脚长短也能够看出来,发光二极管的正负极,引脚长的为正极,短的为负极。
2.万用表打到二极管档,分别短接LED灯引脚,假如亮,红表笔接的是正极。
最终实物:
焊接好的实物如图
程序烧录及测试
测试用的51单片机型号是STC89C52RC,是国产品牌宏晶科技STC量产的8051单片机。
测试代码
#include
#include
//数据类型定义
typedef unsigned char uchar;
typedef unsigned int uint;
uchar flag1s = 0;
uint one_sec_flag = 0;
sbit TEST_LED=P1^0;
void main()
{
EA=1;//开总中断
TMOD=0X01;//T0的工作模式为模式1
TH0=0X4C;
TL0=0X00;//11.0592M晶振 50ms定时初值
ET0=1; //允许定时器1中断
TR0=1;//启动定时器0
while(1)
{
if(flag1s)//一秒刷新一次
{
TEST_LED = 0;
}else{
TEST_LED = 1;
}
}
}
void Timer0() interrupt 1
{
TH0=0XBB;
TL0=0X00;
if(++one_sec_flag
return;//提前完毕函数
}
if(flag1s)
{
flag1s = 0;
}else{
flag1s = 1;
}
one_sec_flag=0;
}
编译之后产生test.hex烧录文件。
下载器及下载驱动
STC89C52单片机下载器实际上就是USB转TTL串口,如下图所示
某宝上的下载器
驱动:压缩包中的CH341SER.EXE
先安装驱动才能下载代码到单片机中。
程序下载
硬件准备:
下载器的RXD连接芯片的TXD(P30),下载器的TXD连接芯片的RXD(P31),本设计引出了芯片的RXD和TXD,如上图所示连接即可。
软件准备:
STC-ISP.exe双击翻开,下载步骤
1选择选择单片机型号
2.选择下载器的串口
3.翻开编译生成的HEX文件
4.点击下载
下载界面
等待
此时,按下电源开关给单片机上电,下载软件会识别出单片机,然后自动下载程序。下载成功后会有提醒。
烧写成功
测试效果:测试LED灯一秒间隔闪烁。
新一代烧写工具 - STM32CubeProgrammer
STM32CubeProgrammer(STM32CubeProg)是STM32微控制器的专用编程工具。 STM32用户都知道,当完成程序调试,须要对芯片进行程序代码烧录编程,一般会有三个选择:通过调试接口【JTAG/SWD】?
AI电堂发表于STM32...
进修STM32单片机,绕不开的串口
刚初始学单片机的你,是不是会因用程序把LED点亮而感到高兴,会因用程序把数码管点亮而感到高兴。这是好事,这也是想继续进修下去的动力。但是数据相关的实验是进修单片机和STM32的一道坎?
SugarlesS
MCS-51系列单片机串口通讯实验(2)
1.实验目标1)掌握51单片机串行通讯调试方法 2)会简略的串行通讯协议编写 2.实验器材1)Widows操作系统的电脑。 2)调试软件 keil仿真实验版keil外挂串口调试工具软件--sscom虚拟调试串口
彩蛋:最近有同学跟我要单片机的资料,我特意花几个月时间,总结了我10年产品研发经验,资料包几乎覆盖了C语言、单片机、模电数电、原理图和PCB设计、单片机高级编程等等,非常适合初学者入门和进阶。除此以外,再含泪分享我压箱底的22个热门开源项目,包含源码+原理图+PCB+说明文档,不是市面上打包卖的那种课程,我认为教程多未必是好事,10年前我自学快,除了自身执行力以外,还有就是教程少。不要害羞做伸手党,等你一个小红点。后期我也会组建一些纯技术交流的小圈子,让大家能认识更多的大佬,有个好的圈子,你对行业的认知一定是最前沿的。
相关问答
51 单片机 最多可以带动多少块8*8点阵屏?基本上每个8*8点阵要用到8字节内存,51的话最多有大概200字节的空余内存,大概也就25块,这就很困难了。如果可以通过特殊的算法压缩内存的话就要看个人水平了。...
图像采集是什么?指图像经过采样、量化以后转换为数字图像并输入、存储到帧存储器。图像处理是指,用计算机对图像进行分析,以达到所需结果的处理,又称影像处理,一般...图像处...
单片机 中两个字节存放的16位二进制怎么准确转换为BCD码?BINBCD:MOVB,#100(100作为除数送入B中)DIVAB(十六进制数除以100)MOVR3,A(百位数送r3,余数放入B中)...BINBCD:MOVB,...
什么是智能手机中的SoC,SoC的用途是什么?名词解释——SoCSoC的全称叫做:System-on-a-Chip,中文的的意思就是“片上系统”。高通SnapdragonSoC可以称为传统示例。这些的架构与PC处理器有很大的不同。...
DSP与 单片机 到底有什么区别啊?典型单片机最容易想到的是st的stm32f334系列,这系列是单核armm4核心,带高精度定时器,外设方面种类跟28335差不多。28335抗干扰性据说比stm32系列好一些。...
C语言为什么要定义short,int,long这么多整数类型?过去内存硬件资源紧张,容不得半点浪费,因为稍不注意就不够用了。比如目前的单片机,虽然比十几年前有了极大改进,但和pc的相比那就是天差地别的了。另外人们...
PSA制氮机-盖德问答-化工人互助问答社区现有0.8mpa压缩机可以用啊,压力和制氮psa比较匹配,但是出力是否匹配,要考虑下。气源8公斤足够了。前面要有缓冲罐,以免压力波动生产你这种设备大...
可不可以帮我编写用51 单片机 加四个按钮分别控制两个步进电机...压缩文件怎么发到微信或QQ里?1.1万浏览10回答电脑主板断电后开机显示设备需要修复这是为什么。3084浏览4回答ZOL问答问题详情电脑版首页资讯查报价...
最新最兼容的 单片机 是哪一款?现在常用的单片机还是以前那些型号的单片机,没出现什么功能很强大的新型单片机。不过要说最兼容的一款单片机,应该就是AVR系列的ATmega8515单片机了,该单片机...
LINUX零基础如何学习?我相信每一个刚开始学习LIUNX知识的学者都会感到迷茫,其中也包括我。同时也很荣幸能在这里和大家分享一下我的学习LIUNX经历,当然我是没有学习的很精通,因为我...