STM8L101xx
- 格式:pdf
- 大小:1.69 MB
- 文档页数:83
主题:STM8L——引领8位MCU产品向超低功耗扩展---精彩问答[1问:]STM8L总线数据传输速度可达多高?[答:]CPU的时钟频率为16MHz[1900-1-1][2问]如何实现ARM内核的低功耗设计[答:]STM8L不是ARM内核的[2009-11-1810:14:01][3问:]STM8L的产品的工作主频能有多大?可以在待机时改变频率以节省电能吗? [答:]最高16MHz,16MIPS,待机前可以降频[2009-11-1810:14:57][4问:]STM8加密除了在下载的时候禁止读写以外,还有什么好办法呢?[答:]每个芯片有唯一的ID,可以在程序中做加密处理[2009-11-1810:15:34][5问:]STM8很多寄存器需要在某种状态下才允许修改的,能否详细说明一下?[答:]这个问题能够提的具体一点吗?[2009-11-1810:15:35][6问:]8位微控制器STM8L的外设接口是怎样设置的?[答:]你指什么外设?[2009-11-1810:20:30][7问:]STM8L单片机和TI的msp430系列MCU有什么不同,与TI的功耗比相比有什么优势?谢谢[答:]STM8L是8位机,因此比16位机便宜。
STM8L可达16MIPS,与MSP430速度相当。
STM8L的许多工作模式,功耗比TI还低[2009-11-1810:22:51][8问:]STM8L是几级流水的?工作频率是多少?指令周期是多少?有多少单指令周期指令和双指令周期的指令?[答:]3级16MHz Max指令集与STM8S相同STM8L的内核是CISC内核,指令周期从一个周期至最长10几个周期(除法指令)都有。
[2009-11-1810:24:03][9问:]调试方式有几种?FLASH和RAM?可以选择吗?[答:]可以选择Flash或RAM运行程序。
[2009-11-1810:24:05][10问:]支持几种IDE?请简单介绍,谢谢[答:]ST推荐STVD还有Raisonance的IDE也可以。
手动开关手动开关没有自动切换为直接的但它提供给用户的切换事件时间的精确控制。
参照图20中的流程图。
1。
写使用系统时钟开关选择目标时钟源的8位值寄存器(clk_swr)。
然后swbsy位是由硬件,和目标源振荡器开始。
古老的时钟源继续驱动CPU和外设。
2。
该软件具有等到目标时钟源准备(稳定的)。
这是在clk_swcr寄存器和快捷旗由中断如果swien位设置显示。
3。
最终软件的作用是设置,在所选择的时间,在clk_swcr的赛文点寄存器来执行开关。
在手动和自动切换模式,旧的系统时钟源不会自动关闭的情况下是由其他模块(LSI混凝土可用于例如独立的看门狗驱动)。
时钟源可以关机使用在内部时钟寄存器的位(clk_ickcr)和外部时钟寄存器(clk_eckcr)。
如果时钟开关不因任何原因的工作,软件可以通过清除swbsy标志复位电流开关操作。
这将恢复clk_swr注册到其以前的内容(旧的系统时钟)。
注意:在清理swbsy标志具有复位时钟主开关的程序,应用程序必须等到后产生新的主时钟切换请求之前有一段至少两个时钟周期。
9.7周门控时钟(PCG)外周时钟门控(PCG)模式选择性地启用或禁用系统时钟(SYSCLK)连接到外围设备在运行或慢速模式的任何时间来优化功耗。
设备复位后,所有的外设时钟被禁用。
唯一的一点是在复位状态是默认启用pcken27因为它用于启动。
软件已被正确地写入关掉ROM Bootloader执行后的时钟。
您可以启用时钟的任何外围设置在clk_pckenrx周围门控时钟寄存器的相应pcken点。
●使周围,首先使在clk_pckenr相应的pcken点寄存器然后设置使点周围的外围控制寄存器。
●禁用适当的外围,先禁用在周边的适当位控制寄存器,然后停止相应的时钟。
注:蜂鸣器,RTC和液晶显示器是由不同的SYSCLK特定的时钟,使他们继续运行,即使时钟门控的外设寄存器是断言。
9.8时钟安全系统(CSS)9.8.1时钟安全系统对HSE时钟安全系统(CSS)监控HSE晶体时钟源故障时安全作为系统时钟。
本参考手册的目标应用程序开发人员。
它提供了完整的信息如何使用stm8l05xx,stm8l15xx 和stm8l16xx微控制器的存储器和外围设备。
该stm8l05xx / stm8l15xx / stm8l16xx是一个家庭的不同存储密度的微控制器和外围设备。
这些产品是专为超低功耗应用。
可用的外设的完整列表,请参阅产品数据表。
订购信息,引脚说明,机械和电气设备的特点,请参阅产品数据表。
关于STM8 SWIM通信协议信息和调试模块,请参阅用户手册(um0470)。
在STM8的核心信息,请参阅STM8的CPU编程手册(pm0044)。
关于编程,擦除和保护的内部快闪记忆体,请参阅STM8L闪存编程手册(pm0054)。
1 中央处理单元(CPU)。
30。
1.1 引言301.2 CPU的寄存器。
30。
1.2.1 描述CPU寄存器。
..。
301.2.2 STM8 CPU寄存器图。
..。
341.3 全球配置寄存器(cfg_gcr)。
34。
1.3.1 激活水平。
..。
341.3.2 游泳禁用。
..。
351.3.3 描述全局配置寄存器(cfg_gcr)。
..。
35 1.3.4 全局配置寄存器图及复位值。
..。
352 启动ROM . . . 363程序存储器和数据存储器。
37。
3.1引言373.2术语。
37。
3.3个主要的快闪存储器的特点。
38。
3.4记忆的组织。
39。
3.4.1低密度设备的存储器组织。
393.4.2介质密度的装置记忆的组织。
..。
403.4.3介质+密度装置记忆的组织。
..。
413.4.4高密度存储器组织。
..。
423.4.5专有代码区(译)。
433.4.6用户区(UBC)。
433.4.7数据的EEPROM(数据)。
..。
463.4.8主程序区。
463.4.9选项字节。
..。
463.5内存保护。
47。
3.5.1读出保护。
473.5.2内存访问安全系统(质量)。
473.5.3使写访问选项字节。
493.6内存编程493.6.1同时读写(读写网)。
29通用同步/异步接收器发射机(USART)本节适用于低密度stm8l05xx / stm8l15xx设备,介质密度stm8l05xx / stm8l15xx设备,介质+密度stm8l05xx / stm8l15xx设备高密度stm8l05xx / stm8l15xx / stm8l16xx设备,除非另有规定。
29.1是介绍USART(通用异步接收发送器)提供了一个灵活的需要一个行业标准的NRZ码的异步串行数据格式的外部设备的全双工数据交换装置。
它提供了一个非常广泛的波特率。
USART支持同步单向通信、半双工单线通信。
智能卡协议和IrDA(红外数据协会)先生ENDEC规格也支持。
USART也可以用于多处理器通信。
高速数据通信是可能的,使用DMA多缓冲区结构。
29.2是主要特点●全双工异步通信,●NRZ格式(标记/空间)●高精度波特率发生器系统常见的可编程发送和接收波特率可达fsysclk / 16●可编程数据字长(8或9位)●配置的停止位为1或2个停止位的支持●发射机时钟输出同步通信●单线半双工通信●IrDA SIR的编码器,解码器-正常模式3 / 16位元时间支持●智能卡仿真能力-智能卡接口支持异步协议的智能卡在ISO 7816-3标准定义1.5停止位的智能卡操作●配置多缓冲区通信使用的DMA(直接存储器存取)-接收/保留的内存使用DMA传输字节缓冲集中●单独使发射机和接收机的位●转移检测标志:接收缓冲区满传输缓冲区空-传输结束标志●奇偶控制:-将奇偶校验位–检查接收数据字节的奇偶性●4误差检测的旗帜:-溢出错误噪声误差帧错误奇偶校验错误●8个中断源的旗帜:发送的数据寄存器空传输完成接收数据寄存器满空闲线接收奇偶校验错误-溢出错误-帧错误噪声误差●2中断向量:发送中断接收中断●降低功耗模式●多处理器通信进入静音模式如果地址不匹配发生●唤醒从静音模式(空闲线检测或地址标记检测)●2接收器唤醒模式:地址位(MSB)空闲线29.3串口功能描述接口是外部连接到另一个设备通过三个引脚(见图152)。
STM8 选型意法半导体的8位微控制器平台基于高性能8位内核和先进外设集。
该平台采用意法半导体专有的130 nm 嵌入式非易失性存储器技术制造而成。
STM8的增强型堆栈指针操作、高级寻址模式和新指令让用户能够实现快速、安全的开发。
STM8平台支持4个产品系列:∙STM8S - 主流MCU∙STM8L - 超低功耗MCU∙STM8AF和STM8AL - 汽车用MCUSTM8S选型意法半导体的STM8S系列主流8位微控制器适于工业、消费类和计算机市场的多种应用,特别是要实现大批量的情况。
基于STM8专有内核,STM8S系列采用ST的130纳米工艺技术和先进内核架构,主频达到24 MHz,处理能力高达20MIPS。
嵌入式EEPROM、RC振荡器和全套标准外设为设计者提供了稳定且可靠的解决方案。
相关工具链,从经济型探索套件到更复杂的评估套件和第三方工具,为利用STM8S微控制器进行开发提供了极大方便。
STM8S系列包括四个产品线,具有不同特性,但是保持了全面兼容性和可升级性,从而减少了未来产品设计变更。
∙STM8S003/005/007超值型是入门级产品,具有基本功能。
∙STM8S103/105基本型提供了更多特性和封装选项。
∙STM8S20增强型配有全套外设,满足中、高端应用的性能要求。
∙STM8S专用型提供了更多模拟特性和专用固件解决方案。
STM8S903STM8S103/105基本型属于标准多功能8位微控制器。
作为低成本超值型产品升级的第一步,STM8S103/105基本型提供了更多的封装、存储容量、特性和工厂编程服务选项。
它基于专有16 MHz内核,具有全套定时器、接口(UART、SPI、I2C)、10位ADC、内部和外部时钟控制系统、看门狗、自动唤醒单元和集成式单线调试模块。
该产品系列具有高达32 KB的Flash程序存储器、高达1 KB的数据EEPROM和高达2 KB的RAM。
它提供三种封装选项:32、44和48引脚封装。
本程序选用的芯片为STM8L101F3P6共分为如下几个文件Main.c文件内容#include "stm8l10x_diy_time.h"#include "stm8l10x_diy_port.h"#include "STM8L101F3P.h"#include "NRF24L01.h"#include "STM8l10x.h"char lock_key;void main(void){clk_init ();//时钟初始化gpio_init();time_init();LED01=0;LED02=0;IRQ_OUT;//IRQ设置为输出模式IRQ_O=1;//赋值ifnnrf_rx_mode();while (1){if(But01==0){ IRQ_OUT;IRQ_O=1;SPI_RW_Reg(WRITE_REG+STATUS,0xff);tx_buf[0]=2;ifnnrf_tx_mode();IRQ_IN;while(IRQ_I);sta=SPI_Read(STATUS);SPI_RW_Reg(WRITE_REG+STA TUS,0xff);if(sta& STA_MARK_TX){LED02=1;Delay(0xfffFf);LED02=0;Delay(0xffFff);}else{ifnnrf_CLERN_ALL();LED02=1;Delay(0xffFf);LED02=0;Delay(0xffFf);}ifnnrf_rx_mode();IRQ_OUT;IRQ_O=1;IRQ_IN;Delay(0x0f);while(IRQ_I==0);Delay(0xffff);}IRQ_OUT;IRQ_O=1;IRQ_IN;if(IRQ_I==0){sta=SPI_Read(STATUS);SPI_RW_Reg(WRITE_REG+STATUS,0xff);if(sta&STA_MARK_RX){SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);if (rx_buf[0] == 2){LED01=1;Delay(0xffFff);LED01=0;Delay(0xfFfff);rx_buf[0] = 0;}}else{ifnnrf_CLERN_ALL();ifnnrf_rx_mode();IRQ_OUT;IRQ_O=1;IRQ_IN;Delay(0x0f);while(IRQ_I==0);}}}}@far @interrupt void TIM4_interrupt(void){static unsigned int TIM_Work;static unsigned char TIM_Time;if(But01==0){if(TIM_Work++>2500){// LED01 =~LED01;TIM_Work=0;}}else{TIM_Work =0;// LED01 =0;}TIM4_SR1 = 0x00;return;}stm8_interrupt_vector.c内容/* BASIC INTERRUPT VECTOR TABLE FOR STM8 devices* Copyright (c) 2007 STMicroelectronics*/typedef void @far (*interrupt_handler_t)(void);struct interrupt_vector {unsigned char interrupt_instruction;interrupt_handler_t interrupt_handler;};@far @interrupt void NonHandledInterrupt(void){/* in order to detect unexpected events during development, it is recommended to set a breakpoint on the following instruction */return;}extern void _stext(); /* startup routine */extern @far @interrupt void TIM4_interrupt(void);struct interrupt_vector const _vectab[] = {{0x82, (interrupt_handler_t)_stext}, /* reset */{0x82, NonHandledInterrupt}, /* trap */{0x82, NonHandledInterrupt}, /* irq0 */{0x82, NonHandledInterrupt}, /* irq1 */{0x82, NonHandledInterrupt}, /* irq2 */{0x82, NonHandledInterrupt}, /* irq3 */{0x82, NonHandledInterrupt}, /* irq4 */{0x82, NonHandledInterrupt}, /* irq5 */{0x82, NonHandledInterrupt}, /* irq6 */{0x82, NonHandledInterrupt}, /* irq7 */{0x82, NonHandledInterrupt}, /* irq8 */{0x82, NonHandledInterrupt}, /* irq9 */{0x82, NonHandledInterrupt}, /* irq10 */{0x82, NonHandledInterrupt}, /* irq11 */{0x82, NonHandledInterrupt}, /* irq12 */{0x82, NonHandledInterrupt}, /* irq13 */{0x82, NonHandledInterrupt}, /* irq14 */{0x82, NonHandledInterrupt}, /* irq15 */{0x82, NonHandledInterrupt}, /* irq16 */{0x82, NonHandledInterrupt}, /* irq17 */{0x82, NonHandledInterrupt}, /* irq18 */{0x82, NonHandledInterrupt}, /* irq19 */{0x82, NonHandledInterrupt}, /* irq20 */{0x82, NonHandledInterrupt}, /* irq21 */{0x82, NonHandledInterrupt}, /* irq22 */{0x82, NonHandledInterrupt}, /* irq23 */{0x82, NonHandledInterrupt}, /* irq24 */{0x82, TIM4_interrupt}, /* irq25 */{0x82, NonHandledInterrupt}, /* irq26 */{0x82, NonHandledInterrupt}, /* irq27 */{0x82, NonHandledInterrupt}, /* irq28 */{0x82, NonHandledInterrupt}, /* irq29 */};stm8l10x_diy_port.c内容#include "stm8l10x_diy_port.h"#include "STM8L101F3P.h"#include "stm8l10x_gpio.h"/************************************************************** 功能:配置IO口配置IO输入输出说明输出:配置PC_DDR,PC_CR1寄存器,把相应位拉高即可输入:只配置PD_CR1寄存器,拉高即可/*************************************************************/ void gpio_init(void){GPIO_DeInit(GPIOB);//恢复寄存器到默认值GPIO_DeInit(GPIOC);GPIO_DeInit(GPIOD);/*配置输出****************************************************/ PC_DDR|= 0x04;//LEDPC_CR1|= 0x04;//LEDPD_DDR|= 0x01;//LEDPD_CR1|= 0x01;//LEDPC_DDR|= 0x01;//CEPC_CR1|= 0x01;//CEPB_DDR|= 0x10;//CSNPB_CR1|= 0x10;//CSNPB_DDR|= 0x20;//SCKPB_CR1|= 0x20;//SCKPB_DDR|= 0x80;//MISOPB_CR1|= 0x80;//MISO/*配置输入****************************************************/ PC_CR1|= 0x08;//buttomPB_CR1|= 0x01;//buttomPB_CR1|= 0x40;//mOSIPB_CR1|= 0x02;//IRQLED01=1;LED02=1;IRQ_OUT;//IRQ作为输出IRQ_O=1;CE=0; // chip enableCSN=1; // Spi disableSCK=0; // Spi clock line init high}/************************************************************** 功能:配置时钟/*************************************************************/ void clk_init(void){CLK_CKDIVR = 0x00;CLK_PCKENR|= 0x04;//开启定时器4中断(必修有)/*TIM2:0x01TIM3:0x02TIM4:0x04************************************************************/}/************************************************************** 延迟函数/*************************************************************/ void Delay(unsigned int nCount){while (nCount != 0){nCount--;}}/************************************************************** 按键防抖动及按键锁/*************************************************************/ char Key_Scanf(char Buttom){static char Key_Lock;char ButtomStatus;ButtomStatus=But_OFF ;if(Buttom==But_ON){Delay(0x3ff);/* 消抖*/if((Buttom==But_ON)&&(Key_Lock==1)){ButtomStatus=But_ON;}}else Key_Lock= 1;return ButtomStatus;}stm8l10x_diy_port.h内容#ifndef __stm8l10x_diy_port_H#define __stm8l10x_diy_port_H#include "STM8L101F3P.h"#define L 0#define H 1#define But_ON 0 //按下时为低#define But_OFF 1#define IRQ_OUT PB_DDR|= 0x02 //配置输出#define IRQ_IN PB_DDR&= 0xFD //配置输入_Bool IRQ_O @PB_ODR:1;//IRQ输出。