写在前面
最近项目中涉及到一些实时性要求很高的底层驱动设计,在IAR下用C语言写完后总是感觉响应不是足够快,平时在网上会看到很多嵌入式大牛直接通过汇编来写,效果超级明显。之前在学校里接触过51的汇编,感觉又low又难懂。随着时间的推移,越来越有一种潜意识,觉得高级程序虽然有着开发效率高的特点,但有一些地方的局限还是很多大的,如果想要继续深入地了解和运用一些单片机底层的资源,能且只能通过汇编来实现。现在工作中接触的MCU主要是STM8系列,所以就从他开始吧!
STM8 简介
意法半导体的这款8位单片机一直知名度不高,在上学时,一般耳熟能详的八位机都有PIC、51、AIR之类,STM系列也只听说过STM32,工作后接触到STM8,觉得这款芯片还是挺强大的,虽然是CISC架构,但大部分指令都能单周期内进行,更主要的是他丰富的外设,如果要求不高的话实用性完全超过了低价位的STM32芯片。
常用外设
从官网上了解到,STM8 系列有三个大类:S(mainstream MCUs,主流MCU),L(ultra-low-power MCUs,低功耗MCU),和AF/AL(automotive MCUs,车载嵌入式系统)。S系列以其价格优势占领了不少市场,但相比于后两者而言,功能较少,适用于一些功能简单的应用场合。A系列没接触过,L系列虽然号称低功耗,但它具有丰富的外设,并且具有1个多通道DMA,你可以灵活利用他们以节约系统资源去做更多的事情。比如利用SPI和595通讯以及AD采样,只需要合理设置,然后直接向定义的全局变量赋值或者读取数据就可以了,非常方便了可以说是。
STM8资料地址
你可以在这里下载两个重要的东西:参考手册(RM0031 Reference manual)和编程手册(PM0044 Programming manual)。其中编程手册一定要把右上角的加号点开,看准文件编号,上面那个讲Flash存储器性能的,没什么卵用。
DS6948_STM8L151x8,STM8L152x8,STM8L151R6,STM8L152R6单片机数据手册
DS6372_STM8L151x4,STM8L151x6,STM8L152x4,STM8L152x6单片机数据手册
32KB和64KB产品的不同块之间的起始地址都是相同的,但大容量产品Flash,RAM和EEPROM要大一倍。
指令流水线
三级流水线标配,大部分指令(长转移指令和16位运算以及乘除法运算指令执行时间较长)可以在单周期内执行完成。
具体内容请参考:
PM0044_STM8单片机编程手册
寻址方式
大部分MCU寻址可以概括为三种基本寻址方式:直接寻址,间接寻址和寄存器寻址。而STM8在此基础上衍生出了8种:
寻址方式 | 例子 |
---|---|
固有寻址(Inherent) | NOP |
立即寻址(Immediate) | LD A,#$55 |
直接寻址(Derect) | LD A,$55 |
索引寻址(Indexed) | LD A,($55,X) |
堆栈索引寻址(SP Indexed) | LD A,($55,SP) |
间接寻址 | LD A,([$55],X) |
就近寻址(Relative) | JRNE loop |
位寻址(Bit operation) | BSET byte,#5 |
具体内容请参考上述文档(PM0044_STM8单片机编程手册).
指令集
同样,文档中解释的很详细。然后有几个地方需要注意下,这里简单说说。
1. 成对的指令
(a) 调用指令:
CALL label; 和RET; 是一对,CALLF label; 和RETF是一对。在C编程时调用汇编函数一定要看一下C语言的编译结果,在调用汇编的时候用的是CALL还是CALLF,他们的区别是:CALL执行时,PC的低位PCL和高位PCH被压入堆栈,同样RET将PC值的高位和低位出栈;而CALLF是将三字节数据压入堆栈: PC的低位PCL,PC位的高位PCH和PC的额外位PCE,同样RETF是将以上三字节数据出栈。如果没有搭配好,程序在返回调用位置时当然会出错了。如果有幸PC值的额外位没有用到,堆栈的顺序已经乱掉了,程序基本就没法运行了。对了,STM8没有中断返回指令RETI。
(b) 堆栈指令:
PUSH和POP是一对,PUSHW和POPW是一对,而且两者在同一段程序中顺序也要注意,先进后出。
2. 除法指令
除法指令能不用尽量不用,据我所知这个家伙是所有指令执行周期最长的了。用汇编的目的就是为了缩短指令执行时间,这玩意儿一加等于是一纳秒一纳秒抠出来的时间全扔了。
3. 位操作指令
BSET和BRES可以对一个字节的数据的某个位进行操作,非常好用。但只能是RAM中的数据,CPU寄存器一个也不支持。不过这都无所谓,毕竟直接操作内存数据更方便。
STM8内核的介绍就写这么多吧,具体的内容去看官方的参考手册,不仅内容详细,而且内容详细。。。
ps:新版CSDN文本编辑器真坑,图片调不了大小,排版丑的。。。哎凑合写写吧,还要众筹出书咋地。。。
上一篇:STVD+Cosmic搭建STM8开发环境
下一篇:找STM8固件库的方法
推荐阅读最新更新时间:2024-11-06 11:10
设计资源 培训 开发板 精华推荐
- 下载有礼:2017年泰克亚太专家大讲堂第二期: 100G/200G/400G通讯标准发展趋势及解决方案
- 借助 Microchip 生态系统中的 PIC® 和 AVR® 单片机开启嵌入式到云端之旅 系列在线研讨会
- 【团购】EE_FPGA V2.0配套器件
- 罗彻斯特有奖调查:元器件日期代码限制是否仍然适用?70+份奖品先到先得!
- 【备战国赛】干货文集限时免积分下载,别错过哦~
- 有奖直播|TI 使用 DLP® 微型投影技术设计增强现实智能眼镜
- TI 培训推荐有礼活动
- ADI有奖下载活动之4 压力变送器解决方案
- 有奖直播预报名|与英飞凌一同探寻网络摄像机的黑科技
- 有奖直播|ADI 惯性MEMS应用那些事