可以使用快捷键CTRL+ALT+SPACE
这种现象很正常,可能是每一个嵌入式从业者都可能遇到,因为嵌入式软件的难度不是线性增加,而是陡然提升的。对于接触过51单片机的开发者来说,在学习STM过程中掌握GPIO,串口,时钟,定时器等模块并不困难,虽然配置的寄存器更多,功能也更复杂,但其实思路是一脉相承的,有这个基础在,而且这些模块本身并不复杂,所以你掌握的很顺利。
至于你学习FSMC驱动LCD卡住,主要原因如下:
1.对FSMC模块执行流程和工作原理不理解
2.对设备的驱动实现没有清晰认知
在51单片机学习中虽然接触了串口,甚至SPI和I2C接口这些知识,但只是学会了用,没有系统理解背后关于串行数据接口和并行数据接口的知识,FSMC就是典型的并行数据接口(数据的各位同时进行传输),可以简单的理解写入流程如下:
1. 代码在写入指定bank地址的值后,FSMC模块控制并行的输出到DATA引脚上[15:0]。
2. FSMC模块根据当前配置,产生一定的时序(写入时序) -- 寄存器/RAM片选,读写使能,时钟信号。
3. LCD根据时序将DATA引脚上的电平转化为数据赋值到相应的寄存器或者数据RAM中,并显示结果。
理解了这些,在结合STM32的外设配置的基本知识,就能够理解GPIO初始化,FSMC模块配置,写数据/地址接口这部分代码的实现了。
这些接口理解了,剩下的难点其实就是LCD内部寄存器的配置那一串冗长的寄存器配置代码了,在不理解LCD内部原理和初始化流程的情况如何实现其实是很困难的(包括现在的我),但这部分其实在购买相应厂商的LCD屏幕时都会提供相应的寄存器初始化参数表,大概类似于如下寄存器列表:
REG, VALUE
0x00E3, 0x3008
0x00E7, 0x0012
....
0x00EF, 0x1231
如果已经理解上面封装的接口,直接按照顺序调用就可以了,如
LCD_WR_CMD(0x00E3, 0x3008);
不过学会查看LCD的驱动手册有时也是必要的,因为官方给的是标准配置,在某些情况下可能不满足需求,就需要自己查看寄存器去修改配置,成功驱动点亮了LCD屏幕,下面就可以在屏幕上显示文字图片了。到这一步基本完成了驱动,但对于单片机的图像显示和应用其实才刚刚开始,后续就是要了解学习StemWin,掌握单片机实现图形界面的功能,理解图像显示的编码,掌握中英文汉字字库的知识,这就是应用方面的问题了,不在详述。
其实对于大部分外设,如FLASH,LCD,PHY,EPPROM,CMOS等设备内部都有一系列用于访问状态和配置的寄存器,这部分知识零碎,一般也很难系统学习,不过在你多学习掌握几个外设芯片后,自然能够总结解决问题的经验。上面我讲解了FSMC驱动实现的思路和外设驱动配置的流程,对你理解FSMC模块,或者LCD驱动部分也许有用,但是如果后面用到以太网,需要配置PHY模块驱动和接口时,或者用到USB协议,需要掌握USB模块驱动时,这些涉及复杂时序和通讯协议接口时,还是会觉得不得入门,可能会卡的时间比FSMC更久。事实上,我在最初接触FSMC的时候,也看的很迷茫,上千行代码且缺少注释,根本不是那个水平的我能够掌握理解的,现在我能够理解这部分知识,也不过是熟能生巧而已。
在嵌入式入门时遇到复杂驱动设备时,如PHY,TFT-LCD,CMOS,USB时,网上或开发板提供的驱动代码直接用就可以,这在初期并没有任何问题,不要去深究内部的原理。事实上在初期去深究这些代码是很浪费时间的事,但遇到简单的驱动,如SPI-FLASH,传感器等时,就可以先总结积累经验,有一定基础后,在反过来去理解复杂的驱动代码。这种经验在完成实际项目时很重要,如遇到复杂模块BLE,ETH,USB等不理解,或者复杂如LWIP,USB协议不理解,千万不要直接拿着源码去深究,这是事倍功半的事,先仿照官方代码/开源方案配合其它模块把框架和功能实现,在后期调试时遇到模块相关问题,根据之前积累的经验,结合资料,在反过来单步调试和理解,这样可以抓住和应用相关的重点分析解决,避免了进度的拖延,而且随着项目积累的经验水平,也可以更有目的的针对理解解决。
另外嵌入式现在资料真的很多,不过如果学习stm32的话,比较推荐的就几个,中/英文版本的<STMxxx参考手册>
, <Cortex-M3权威指南>
, 以及你使用开发板的应用手册,<C Primer Plus>
和MDK中的关于汇编和编译选项的说明,如果用到某些外设芯片,在加上对应的芯片手册,尤其是STM的参考手册,没有比它更全面,准确,细致的讲解STM系列的芯片,很多时候看其它综合性的文档说明,真不如花时间去理解掌握参考手册。
编辑 menu
"DE" menu:"编辑-删除"
"MD" menu:"编辑-修改"
"SA" menu:"编辑-选择全部实例"
"MV" menu:"编辑-移动"
"CO" menu:"编辑-复制"
"CC" menu:"编辑-复制"
"RO" menu:"编辑-旋转"
"AR" menu:"编辑-阵列"
"MM" menu:"编辑-镜像"
"RE" menu:"编辑-调整大小"
"GP" menu:"编辑-成组-创建组"
"EG" menu:"编辑-成组-编辑"
"UG" menu:"编辑-成组-解组"
"LG" menu:"编辑-成组-链接组"
"EX" menu:"编辑-成组-排除构件"
"MP" menu:"编辑-成组-将构件移到项目"
"RB" menu:"编辑-成组-恢复已排除构件"
"RA" menu:"编辑-成组-全部恢复"
"AP" menu:"编辑-成组-添加到组"
"RG" menu:"编辑-成组-从组中删除"
"AD" menu:"编辑-成组-附着详图"
"PG" menu:"编辑-成组-组属性"
"FG" menu:"编辑-成组-完成组"
"CG" menu:"编辑-成组-取消组"
"PP" menu:"编辑-锁定位置"
"UP" menu:"编辑-解锁位置"
"CS" menu:"编辑-创建类似实例"
"PR" menu:"编辑-属性"
绘图 menu
"DI" menu:"绘图-尺寸标注"
"EL" menu:"绘图-高程点标注-高程点"
"TX" menu:"绘图-文字"
"GR" menu:"绘图-网格"
"LL" menu:"绘图-标高"
"TG" menu:"绘图-标记-按类别"
"RM" menu:"绘图-房间"
"RT" menu:"绘图-房间标记"
"DL" menu:"绘图-详图线"
工具 menu
"F7" menu:"工具-拼写检查"
"MA" menu:"工具-匹配"
"LW" menu:"工具-线处理"
"PT" menu:"工具-填色"
"SF" menu:"工具-拆分面"
"AL" menu:"工具-对齐"
"SL" menu:"工具-拆分墙和线"
"TR" menu:"工具-修剪/延伸"
"OF" menu:"工具-偏移"
设置 menu
"SU" menu:"设置-日光和阴影设置"
"UN" menu:"设置-项目单位"
窗口 menu
"WC" menu:"窗口-层叠"
"WT" menu:"窗口-平铺"
"SI" snapcode:"交点"
"SE" snapcode:"端点"
"SM" snapcode:"中点"
"SC" snapcode:"中心"
"SN" snapcode:"最近点"
"SP" snapcode:"垂足"
"ST" snapcode:"切点"
"SW" snapcode:"工作平面网格"
"SQ" snapcode:"象限点"
"SX" snapcode:"点"
"SR" snapcode:"捕捉远距离对象"
"SO" snapcode:"关闭捕捉"
"SS" snapcode:"关闭替换"
alternates with closer key spacing
"ZZ" menu:"视图-缩放-区域放大"
"ZX" menu:"视图-缩放-缩放匹配"
"ZC" menu:"视图-缩放-上次滚动/缩放"
"ZV" menu:"视图-缩放-缩小两倍"
"VV" menu:"视图-可见性/图形"
"CC" menu:"编辑-复制"
视图 menu
"ZR" menu:"视图-缩放-区域放大"
"ZZ" menu:"视图-缩放-区域放大"
"ZO" menu:"视图-缩放-缩小两倍"
"ZV" menu:"视图-缩放-缩小两倍"
"ZF" menu:"视图-缩放-缩放匹配"
"ZE" menu:"视图-缩放-缩放匹配"
"ZX" menu:"视图-缩放-缩放匹配"
"ZA" menu:"视图-缩放-缩放全部以匹配"
"ZS" menu:"视图-缩放-图纸大小"
"ZP" menu:"视图-缩放-上次滚动/缩放"
"ZC" menu:"视图-缩放-上次滚动/缩放"
"VP" menu:"视图-视图属性"
"F8" menu:"视图-动态修改视图"
"VG" menu:"视图-可见性/图形"
"VV" menu:"视图-可见性/图形"
"HH" menu:"视图-临时隐藏/隔离-隐藏图元"
"HI" menu:"视图-临时隐藏/隔离-隔离图元"
"HC" menu:"视图-临时隐藏/隔离-隐藏类别"
"IC" menu:"视图-临时隐藏/隔离-隔离类别"
"HR" menu:"视图-临时隐藏/隔离-重设临时隐藏/隔离"
"EH" menu:"视图-在视图中隐藏-图元"
"VH" menu:"视图-在视图中隐藏-类别"
"EU" menu:"视图-取消在视图中隐藏-图元"
"VU" menu:"视图-取消在视图中隐藏-类别"
"WF" menu:"视图-线框" "HL" menu:"视图-隐藏线"
"SD" menu:"视图-带边框着色"
"AG" menu:"视图-高级模型图形" "TL" menu:"视图-细线"
"RR" menu:"视图-渲染-光线追踪" F5 menu:"视图-刷新"
代码md是机械指令的意思
段落缩进没有快捷键,可以选中段落,在段落对话框中,有两个按钮,一个是增加缩进量,一个是减少缩进量,可以达到快速缩进段落
红警里面,部队的生产数量最高是30的,一下子点到30是快进键,点住要生产的部队,鼠标右键就好。
红警快捷键最常用的有Q,W,E,R,把左手,除了大拇指,其余四指放在这四个键上,就可以在普通建筑栏/特殊建筑栏/兵栏/装甲部队栏这4个栏之间快速切换了。
红警造兵时,左手无名指按E,鼠标点即可。
发售版本
非官方模组(Modification)即指玩家俗称的扩展版或MOD。使用XCC Mixer等软件可以将游戏中的一些隐藏的配置文件解压出来,通过修改这些配置文件,玩家可以更改游戏各方面的属性,从而制作自己的DIY版本。
例如通过修改一个叫“rules.ini ”(尤里复仇的可扩展ini后缀文件名为“rulesMD.ini”)的可扩展文件,玩家便可以修改所有单位的基本属性,例如攻击力、造价等等,玩家甚至可以创建自己的新单位,一般的各种优秀的MOD平衡性相当好,且修改应用了很多复杂的文件。
MOD的制作高手写出修改教程让新手参考,为制作MOD提供极大方便,更有人制作出专门为MODer准备的PD,NP等平台,可以利用这个平台实现早期MOD无法想象的功能,这些原因都促使了MOD的大量出现。
是keil应用于ARM开发的环境,比如STM32都可以用这个芯片进行开发