单片机如何从入门到放弃! 从零基础到精通,收藏这篇就够了!
第一步,做出实体芯片。
单片机一般理解为MCU(Microcontroller Unit,微控制单元),包含定时器、ALU(Arithmetic Logic Unit,算术逻辑单元)、内存、寄存器、总线等部分。而普通的意义的单片机还包含GPIO、串口(UART)、DMA、协处理器、AD\DA等等。
看懂如下图
前置:计算机组成原理,微机原理。
流水线
前置:数字逻辑电路,集成电路设计及其EDA技术,verilog把各个模块细分为寄存器级,比如移位运算器、节拍器、译码器、存储器等。
`module minicpu(clk, reset, run, in, cs, pcout, irout, qtop, abus, dbus, out);`` ` `input clk,reset,run;` `input [15:0] in;` `output [1:0] cs;` `output [15:0] irout, qtop, dbus, out;` `output [11:0] pcout, abus;` `wire [15:0] qnext, ramout, aluout;` `reg [11:0] abus;` `reg halt, jump, pcinc, push, pop, thru, qthru, dbus2qtop, dbus2ram, dbus2obuf, ir2dbus, qtop2dbus, alu2dbus, ram2dbus, in2dbus;` `reg pop2, ir2abus, qtop2abus, qnext2abus;` `reg [11:0] pcout, pcnext;` `reg [15:0] out;`` ` `statef statef0(.clk(clk),.reset(reset),.run(run),.halt(halt),.cs(cs));` `stackm stackm0(.clk(clk),.reset(reset),.load(dbus2qtop),.push(push),.pop(pop),.pop2(pop2),.thru(qthru),.d(dbus),.dthru(ramout),.qtop(qtop),.qnext(qnext));` `alu alu0(.a(qtop),.b(qnext),.f(irout[4:0]),.s(aluout));` `dpram #(16,10,1024) dpram0(.clk(clk),.load1(dbus2ram),.addr1(abus),.addr2(pcnext),.d1(dbus),.q1(ramout),.q2(irout));`` `
物理上是这样的
然后会调试BUG,看时序。
前置:时序用MODELSIM,综合用QUARTUS II 等等
然后此时才刚刚开始。
继续生成电路网表,时序收敛,如果不对继续返回上述流程继续调试。
前置:Synopsys
回顾一下
此时应该生成版图文件,然后根据制造厂商提供的物理器件库进行最后的各种设计规则检查。
前置:集成电路版图设计,软件有Cadence:Virtuoso Layout Editor
送到代工厂,还要懂元器件
前置:半导体物理,半导体器件物理,固体物理,电介质物理,量子力学,热力学与数理统计。
根据得到的图表设计版图和工艺流程,大概是这样
前置:集成电路制造
然后进行电气测试,电磁测试,最后封装。
前置:集成电路封装技术
最后不能忘记出片的时候
焚香沐浴更衣,朝南拜三拜,祈祷不会有大问题。
第二步,设计系统驱动。
终于得到了物理上的片子
我们开始写汇编器,编译器。
本质上烧写进ROM的是这样的机器码。
汇编器(把汇编语言变成机器码)
前置:perl
`#!/usr/bin/perl -W``//********``*********//``print "*** LABEL LIST ***\n";``foreach $l (sort(keys(%label))){` `printf "%-8s%03X\n",$l,$label{$l};``}`` ``$addr=0;``print "\n*** MACHINE PROGRAM ***\n";``foreach (@source){` `$line = $_;` `s/\w+://;` `if(/PUSHI\s+(-?\d+)/){` `printf "%03X:%04X\t$line",$addr++,$MCODE{PUSHI}+($1&0xfff);` `} elsif(/(PUSH|POP|JMP|JZ|JNZ)\s+(\w+)/){` `printf "%03X:%04X\t$line",$addr++,$MCODE{$1}+$label{$2};` `}elsif(/(-?\d+)/){` `printf "%03X:%04X\t$line",$addr++,$1&0xffff;` `} elsif(/([A-Z]+)/){` `printf "%03X:%04X\t$line",$addr++,$MCODE{$1};` `} else {` `print "\t\t$line";` `}``}`
编译器 BISON和FLEX(把高级语言转换成汇编语言)
前置:编译原理
`%{``#include <stdio.h>``%}``%union {char *s; int n;}``%token <s> NAME NUMBER``%destructor { free($$); } NAME NUMBER``%token <n> IF WHILE DO``%type <n> if0``%token GOTO ELSE INT IN OUT HALT``...``...``%%``int yyerror(char *s){ printf("%s\n",s); }``int main(){ yyparse(); }``%{` `#include <string.h>` `#include "y.tab.h"` `int n=0;``%}``...``...``while {yylval.n=++n;return(WHILE);}``[0-9]+ {yylval.s=strdup(yytext);return(NUMBER);}``[a-zA-Z][a-zA-Z0-9]* {yylval.s=strdup(yytext);return(NAME);}``. {return(yytext[0]);}``%%``int yywrap(){ return(1);}`` `
终于可以固化进ROM可以跑程序了,你还需要一段小型的开启代码(bootloader)
前置:汇编语言
`%{``#include <stdio.h>``%}``%union {char *s; int n;}``%token <s> NAME NUMBER``%destructor { free($$); } NAME NUMBER``%token <n> IF WHILE DO``%type <n> if0``%token GOTO ELSE INT IN OUT HALT``...``...``%%``int yyerror(char *s){ printf("%s\n",s); }``int main(){ yyparse(); }``%{``#include <string.h>``#include "y.tab.h"``int n=0;``%}``...``...``while {yylval.n=++n;return(WHILE);}``[0-9]+ {yylval.s=strdup(yytext);return(NUMBER);}``[a-zA-Z][a-zA-Z0-9]* {yylval.s=strdup(yytext);return(NAME);}``. {return(yytext[0]);}``%%``int yywrap(){ return(1);}`
然后开始写操作系统
前置:ucos(嵌入式操作系统)
系统宏定义,系统功能配置,系统头文件,初始化文件,调度文件,任务管理文件
系统时间管理文件,信号量文件,邮箱文件,消息队列文件,内存管理文件,系统服务文件,MAIN文件。
写操作系统中的任务
前置:C语言,数据结构,算法导论。
`start: JK start``nop``sdal 32``sdah 0``datp``loop: ting``inl``ting``inh``jend cxcute``nop``jmp loop``inc``excute: call 32``nop``jmp start``nop`
拿着含辛茹苦的板子还需要配置最小系统以及外围器件
前置:PCB设计和制造,电焊等技艺,模电、高频电子线路,信号与系统
如果有信号传输
通讯协议
前置:SPI,I2C,CAN,TCP/IP、wifi等等
`uint SPI_RW(uint uchar)``{``uint bit_ctr;``for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit` `{` `MOSI = (uchar & 0x80); // output 'uchar', MSB to MOSI` `uchar = (uchar << 1); // shift next bit into MSB..` `SCK = 1; // Set SCK high..` `uchar |= MISO; // capture current MISO bit` `SCK = 0; // ..then set SCK low again` `}``return(uchar); // return read uchar``}`
RF天线
前置:微波技术,电磁场与电磁波,HFSS,天线技术等等。
以上回答来源:知乎,作者:彭谟威
链接:https://www.zhihu.com/question/28580074/answer/93515413
看完这位同学的回答,网友纷纷评论表示:
化学,光学,半导体物理,等等就光刻胶涂胶的方式就够你研究一辈子了
这是一个人的活吗?
没有一定水平干不了这些的,微电子专业,呵呵
然后再制造出通量电容,回到过去,干死自己
最后一张图是PCB layout还是IC的?
。。。看完我已经不想学单片机了。。手动再见
好吧,短短几分钟,经历了一遍《从入门到放弃》
︿( ̄︶ ̄)︿不能更详细。。。
其实,21ic论坛的一位道友曾经尝试过制作51单片机,接下来欣赏网友一路向北lm的制作过程:
设计的电路原理图如下(PDF文件及相关详细资料见点击下方“阅读原文”查看原帖):
PCB设计如下,双面板,10*10以内(打印比较便宜),3D图效果图如下:
板卡功能:
1. 板载8个LED 可做流水灯实验。
2. 板载4位一体数码管 可做数码管静态 动态显示实验。
3. 板载CH340下载芯片,可以通过USB实现一键下载。
4. 板载MAX232串口芯片,现在串口下载,串口通讯。
5. 板载继电器模块,可实现对大电流大电压的控制。
6. 板载蜂鸣器模块,可以作为相关应用的提示。
7. 板载1602液晶接口,可以实时显示相关字符数据。
8. 板载12864液晶接口,可以实时显示汉子字符数据。
9. 板载四颗独立按键,可以实现对一些功能的触发。
10. 板载NRF24L01 无线接口,实现无线传输。
11.所有IO口引出,方便调试。
几天后,拿到打印后的板子,红色很是喜庆哈。
马不停蹄的焊接,很累啊,这么多贴片测试的过程必然艰辛。
大功告成,一块板子横空出世,赶紧试试, 板子焊接完成正面图,还算可以。
LED、数码管、蜂鸣器、继电器一切OK,USB CH340 下载电路也OK,使用Max232 DB9串口下载也OK,液晶接口1602 12864 也可以正常显示,基本功能都一切正常这次打板还是比较成功的。趁着这股劲,一鼓作气,多焊机了几块板子,摆一排,成就感爆棚。
下面是测试功能的一些图,包括1602、12864与oled显示。
▲1602显示
▲12864显示
AI大模型学习福利
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享
四、AI大模型商业化落地方案
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。
作者:Python_chichi