STM8内部存储器结构及编程

一.STM8内部存储器结构

STM8内部存储器结构及编程_第1张图片

二.端口及外设存储区

STM8内部存储器结构及编程_第2张图片

STM8内部存储器结构及编程_第3张图片

从0X005050开始到0X0057FF结束的区间内存储的是外设的寄存器。包括:flash、ITC终端资源、RST复位、CLK时钟、WWDG窗口看门狗、IWDG独立看门狗、AWU自动唤醒单元、BEEP蜂鸣器、SPI、I2C、UART、TIM定时器、ADC、beCAN等。

三.32级中断向量

STM8内部存储器结构及编程_第4张图片

STM8内部存储器结构及编程_第5张图片

第二部分 对内部存储器编程

对存储器编程就是对存储器对应的功能寄存器的操作,

主要是为了操作flash rom、EEPROM、选线字节等存储器资源。

存储器对应的功能寄存器分为以下3各大类:

STM8内部存储器结构及编程_第6张图片

这8个寄存器每个都在stm8XXXXX.h中定义好了。我们只需读懂其每一位的意义。

(此处内容待添加)


附:对EEPROM读写小实验

        //------------head----------------------
#include "iostm8s208mb.h"
//------------common-----------------------
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned long uint32_t;
#define u8 uint8_t
#define u16 uint16_t
#define u32 uint32_t
//------------maroc------------------------
#define LED PC_ODR
//------------func------------------------
void delay(u16 count);
void GPIO_init(void);
u8 unlock_EEPROM(void);
//------------global----------------------
u8 table[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
u8 disnum_EEPROM @0X4000;
//------------main------------------------
void main( void )
{
  GPIO_init();
  u8 i=0;
  while (unlock_EEPROM());
  if (disnum_EEPROM!=0)
  {
    LED=table[disnum_EEPROM];
    i=disnum_EEPROM;
    delay(500);
  }
  else
  {
    LED=table[i];
  }  
  while (1)
  {
    i=(i+1)%10;
    LED=table[i];
    disnum_EEPROM=i;
    while ((FLASH_IAPSR & 0X40)==0);
    delay(500);
  }
}
//------------funcs------------------------
void delay(u16 count)
{
  u8 i,j;
  while (count--)
  {
    for(i=0;i<50;i++)
      for(j=0;j<20;j++);
  }
}
void GPIO_init(void)
{
  PC_DDR =0XFF;
  PC_CR1 =0XFF;
  PC_CR2 =0X00;
  PC_ODR =0X00;
}
//-------------------------------------
u8 unlock_EEPROM(void)
{
  FLASH_DUKR=0XAE;
  FLASH_DUKR=0X56;
  if(FLASH_IAPSR & 0X08) return 0;
  return 1;
}
      

你可能感兴趣的:(STM8内部存储器结构及编程)