历史上的今天
返回首页

历史上的今天

今天是:2024年10月26日(星期六)

2021年10月26日 | STM8学习笔记1:CPU简介

2021-10-26 来源:eefocus

写在前面

  最近项目中涉及到一些实时性要求很高的底层驱动设计,在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文本编辑器真坑,图片调不了大小,排版丑的。。。哎凑合写写吧,还要众筹出书咋地。。。


推荐阅读

史海拾趣

EOZ S.A.S公司的发展小趣事

随着5G技术的普及,EOZ S.A.S公司意识到这将为电子行业带来革命性的变化。公司迅速调整战略,将研发重心转向5G相关技术和产品。通过与运营商合作,EOZ S.A.S成功推出了一系列基于5G技术的智能家居和物联网产品,如智能音箱、智能门锁等。这些产品凭借高速、低延迟的特点,满足了消费者对智能家居的多样化需求,进一步巩固了公司在市场中的地位。

Electronic Transistors Corp公司的发展小趣事

在电子行业的早期,ETC公司以其独特的技术创新能力在晶体管市场上崭露头角。公司创始人带领研发团队,通过不断的实验和改进,成功研发出一种新型的MOSFET晶体管,具有更高的性能和更低的功耗。这一创新成果迅速在市场上引起轰动,ETC公司的知名度也随之提升。随着产品销量的不断增长,ETC逐渐在电子行业中确立了其领导地位。

富满电子(FM)公司的发展小趣事

作为一家领先的电子企业,ETC公司深知自身肩负的社会责任。公司积极履行社会责任,关注环境保护和资源节约。ETC通过引进先进的生产工艺和设备,减少生产过程中的能源消耗和废弃物排放。同时,公司还积极参与公益事业和社会活动,为社会做出了积极贡献。这些举措不仅提升了ETC的企业形象,也为公司的可持续发展奠定了坚实的基础。

Feller US公司的发展小趣事

在经历了多年的发展后,菲斯克逐渐意识到品牌的重要性。为了进一步提升品牌价值和市场影响力,公司决定进行品牌重塑。通过重新设计品牌形象、加强品牌宣传以及推出更具吸引力的产品和服务,菲斯克成功吸引了更多消费者的关注和喜爱。同时,公司还积极拓展市场渠道和合作伙伴网络,通过多元化的营销策略和灵活的渠道策略,成功打开了多个新的市场领域。这些努力不仅提升了公司的市场份额和盈利能力,还为公司的长期发展奠定了坚实的基础。

请注意,以上故事均基于虚构的情境和假设,旨在解释和描述菲斯克(FSR.US)公司可能的发展情况。实际的发展过程可能因各种因素而有所不同。

风华(FH)公司的发展小趣事

为了进一步扩大市场覆盖和品牌影响力,福斯特半导体积极寻求战略合作。2023年2月,福斯特半导体与世强先进(深圳)科技股份有限公司签署授权代理协议,借助世强先进在技术分销和互联网推广方面的丰富经验,布局线上和线下功率器件渠道市场。这一合作不仅拓宽了福斯特半导体的产品应用领域,还提升了公司在新能源汽车、储能、照明等市场的知名度。通过世强硬创平台,福斯特半导体的功率MOS和二极管等产品得以快速覆盖目标市场,进一步降低了客户供应链成本。

Altech公司的发展小趣事

凭借在铝合金导体领域的卓越成就和持续创新,Altech公司成功获得了国家级高新技术企业的认定。这一荣誉不仅是对公司技术实力和创新能力的肯定,也为公司未来的发展提供了有力的支持。作为国家级高新技术企业,Altech公司将继续加大研发投入,推动技术创新,为电子行业的发展做出更大的贡献。

问答坊 | AI 解惑

充分利用计算机内部资源的虚拟示波器(checked)

本帖最后由 辛昕 于 2018-5-3 16:35 编辑 其实从后来的经历来看。 此内容由EEWORLD论坛网友辛昕原创,如需转载或用于商业用途需征得作者同意并注明出处 这件事,除非是自己去做,否则没多大意义。 当然了,花几百块买一台100Mhz以上带宽的 ...…

查看全部问答>

求《一种大电压落差DC-DC高频链开关电源的设计》的电路图具体数据

求《一种大电压落差DC-DC高频链开关电源的设计》的电路图具体数据…

查看全部问答>

lm3s811到底要怎么写程序啊!!要什么.h文件,怎么初始化!我真心蛋疼了

lm3s811到底要怎么写程序啊!!要什么.h文件,怎么初始化!我真心蛋疼了 整了一晚上加一天,一个程序都没运行成功! 求指教! 求批评! 求鞭策!…

查看全部问答>

寻求一片稳压芯片LDO,压差最好能控制在0.3V一下,推荐一款

寻求一片稳压芯片LDO,压差最好能控制在0.3V一下,推荐一款!现在用的AMS1117-3.3,锂电池的电压在3.6V~4.2V,1117-3.3不能稳到3.3V,1117要求压差大于1.25V才能稳压到3.3V,1.25V+3.3V=4.55V,求推荐那款TI的LDO芯片能实现压差在0.3V之内的?…

查看全部问答>

如何进行途中的波形变换

途中的上面的波形电压V范围是1.5伏特-5伏特,中间的那个电平U始终比最高的那个电平低1.5伏特,当V=1.5伏特时U=0伏特; 怎么才能转成下面的那个电平,我用比较器试验可以但是那个门槛电平需要浮动。有没有更简单的方法。…

查看全部问答>

通讯读取MSP430F135 FLASH 0x1090--0x109F 读取不了

比如:发送80 14 04 04 90 10 10 00   MSP430F135 读取不了 ?为什么 BSL通讯读取MSP430F1101、MSP430F1232  FLASH 0x1090--0x109F 可以直接读取                 &n ...…

查看全部问答>

msp430单片机 外设模块使用手记

ADC内核完成将模拟信号转换成12位数据并存入转换存储寄存器中,输入模拟电压的最终结果满足公式:         本论文要求有pH值信号和温度信号两路模拟信号进行A/D转换,为了减少误差,可采用多次取值然后取平均值的方 ...…

查看全部问答>

异形pcb制版时面积怎么算

求助坛友,我想问下像上图这样的异形PCB的面积应该怎么算啊? …

查看全部问答>

求助:通过PWM波控制蜂鸣器输出声音如何消除噪音

本帖最后由 497759272 于 2016-3-25 19:02 编辑 小弟最近正在做一个电子节拍器的项目,通过MSP430的定时器控制PWM波进而产生中断效果同时产生 ‘嗒’ 的音,但是输出之后的声音除了嗒之外有明显的噪音。小弟就想知道这种噪音是能够程序的改进避免 ...…

查看全部问答>