STM8端口映射并不像STM32那样有个AFR寄存器来配置,而是配置Option bytes字节,对应映射如下:
配置方式有三种,软件配置,STVP进行配置,IAR的IDE实现
1.通过软件配置方式
#define FLASH_EOP 0X04 //标志位
#define FLASH_DUL 0X08 //标志位
void FLASH_Init(void) //端口重映射初始化函数,在此将PC5映射为TIM2_CH1
{
unsigned char *flash_OPT2;
unsigned char *flash_NOPT2;
flash_OPT2=(unsigned char*)0x4803; //OPT2寄存器的ADDR
flash_NOPT2=(unsigned char*)0x4804; //NOPT2寄存器的ADDR,此寄存器的值是OPT2的取反值
//-------------------------------------------------------------
//第一步 初始化FLASH
while( (FLASH_IAPSR & FLASH_DUL) == 0X00 )
{
FLASH_DUKR = 0XAE;
FLASH_DUKR = 0X56;
} //一旦配置失败,此处将陷入死循环。实际使用请加入超时机制,在此省略
//-------------------------------------------------------------
//第二步 对OPT进行编程,首先需要如下操作:开启opt编程
FLASH_CR2 |= 0X80; //OPT = 1
FLASH_NCR2 &= 0X7F; //NOPT = 0
//-------------------------------------------------------------
//第三步 修改内存
1.修改参数,启用复用功能
2.OPT2 和 NOPT2要相反
//修改OPT2
*flash_OPT2 = 0X01; // 0000 0001 AFR0=1,PC5复用为TIM2_CH1其它默认清0
while( (FLASH_IAPSR & FLASH_EOP) == 0 ); //等待操作完成
//修改NOPT2
*flash_NOPT2 = ~*flash_OPT2;
while( (FLASH_IAPSR & FLASH_EOP) == 0 ); //等待操作完成
//一旦配置失败,此处将陷入死循环。实际使用请加入超时机制,在此省略
//-------------------------------------------------------------
//第四步 对OPT进行编程,最后需要如下操作:禁用opt编程
FLASH_CR2 &= ~0X80; //OPT = 1
FLASH_NCR2 |= 0X80; //NOPT = 0
}
2.通过STVP进行配置
3.通过IAR的IDE实现
A、在工程Options...选项Debugger中选择你的调试工具,选择好后会在IAR的菜单栏中出现对应的调试工具菜单。如下图所示,我这里选择的是ST_LINK。
B、选择上图所示ST_LINK菜单中的Option Bytes选项,进入下图所示的设置界面。
C、通过右键修改需设置的选项,保存并记住保存的路径。
D、如下图所示再次打开工程Options...对话框,选择你是用的调试工具选项。我使用的的是ST-LINK。勾选Use option byte configuratio并添加刚才保存的Option Bytes设置文件。添加设置文件时可以使用绝对路径也可以使用相对路径。图中所示为绝对路径,建议使用相对路径如$PROJ_DIR$\settings\obcf.obc。