一.STM8内部存储器结构
二.端口及外设存储区
从0X005050开始到0X0057FF结束的区间内存储的是外设的寄存器。包括:flash、ITC终端资源、RST复位、CLK时钟、WWDG窗口看门狗、IWDG独立看门狗、AWU自动唤醒单元、BEEP蜂鸣器、SPI、I2C、UART、TIM定时器、ADC、beCAN等。
三.32级中断向量
第二部分 对内部存储器编程
对存储器编程就是对存储器对应的功能寄存器的操作,
主要是为了操作flash rom、EEPROM、选线字节等存储器资源。
存储器对应的功能寄存器分为以下3各大类:
这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;
}