STM8S003F3端口可以设置重映射,如pin16的PC6管脚,默认复用功能是SPI_MOSI功能,可以重映射为TIM1_CH1,也就是timer1的1通道。映射方式并不像STM32那样有个AFR寄存器来配置,而是配置Option bytes字节,如下图

也就是OPT2寄存器,注意是STM8S003F3系列的,其它的芯片配置字节是不一样的。

比如要配置PC6引脚为定时器1PWM输出比较通道TIM_CH1,   配置方法如下:

OPT2是个8位的寄存器,配置的方式比较特别,类似FLASH操作,有两种方法配置,一种是通过STVP进行配置,也就是通过ST的烧录软件界面那里配置(或者IAR软件里选项字节配置);

另一种是通过软件配置方式,说明下软件配置,共4步:

#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
}

  以上是配置函数,经过验证过可用,但使用过程中建议不要每次都进行配置,因为是对选项字节的操作,如果单片机上电不稳定会造成配置操作出现中断而导致单片机锁住问题。解决方法是第一次运行时,配置完毕后将配置状态写入FLASH某个地址,下次每次启动时读取该FLASH地址状态值,如果是已经配置过,则不需要再次配置。被锁住后通过烧录工具STVP进行复位刷默认配置即可。

stm8 io口重映射的更多相关文章

  1. STM32 UART 重映射

    在进行原理图设计的时候发现管脚的分配之间有冲突,需要对管脚进行重映射,在手册中了解到STM32 上有很多I/O口,也有很多的内置外设像:I2C,ADC,ISP,USART等 ,为了节省引出管脚,这些内 ...

  2. STM32 GPIO重映射(转)

    重映射就是将引脚功能重新定义到其他引脚, 例如PA9是USART1-TX默认的 管脚,但是现在PA9用做它用了,那可以将USART1-TX重新映射到PB6,当然这 种映射不是随意的想映射到哪个脚就哪个 ...

  3. (十)stm32 GPIO口复用,重映射 RCC_APB2Periph_AFIO

    什么时候需要用到RCC_APB2Periph_AFIO--复用IO时钟的使用 需要用到外设的重映射功能时才需要使能AFIO的时钟 外部中断(EXTI)中与AFIO有关的寄存器是AFIO-EXTICR1 ...

  4. STM32中IO口的8中工作模式

    该文摘自:http://blog.csdn.net/kevinhg/article/details/17490273 一.推挽输出:可以输出高.低电平,连接数字器件:推挽结构一般是指两个三极管分别受两 ...

  5. 嵌入式02 STM32 实验01 端口复用和重映射

    内设与外设: 端口复用和端口重映射都需要了解内设和外设,那么什么是内设?什么是外设? 内设:单片机内部集成的功能一般包括:串口模块.SPI模块(Serial Peripheral Interface  ...

  6. N32G4系列——复用功能重映射(USART为例)

    开发测试环境:SDK,N32G455x系列芯片 在国民MCU中G系列IO口有第二复用功能,这时需要用到重映射功能. 一.系列芯片手册定义 1.1.芯片IO口默认功能查看 如图,在该系列芯片的数据手册中 ...

  7. STM32管教复用与重映射关系

    摘自:http://blog.csdn.net/lincheng15/article/details/51789093 概括一下:复用就是一个引脚有几个功能,1.做普通IO输入输出 2.其他外设的输入 ...

  8. STM32F030如何正确配置IO口的复用功能

    本文所使用的单片机型号为STM32F030C8T6. 在030系列的单片机中,PA2引脚除了作为普通的IO引脚用作输入输出功能以外,还可以作为内部外设串口1,串口2,定时器15通道1这三个外设的功能引 ...

  9. 【STM32】IIC的基本原理(实例:普通IO口模拟IIC时序读取24C02)(转载)

     版权声明:本文为博主原创文章,允许转载,但希望标注转载来源. https://blog.csdn.net/qq_38410730/article/details/80312357 IIC的基本介绍 ...

随机推荐

  1. vsphere VAAI介绍

    VAAI:让特定的储存作业可以无需透过ESXi主机执行,而由储存设备来担纲 [TechTarget中国原创]目前,VAAI虽然已经成为虚拟化领域的标准语言之一,但是大多数人可能并不了解它还有隐藏的第四 ...

  2. NetCore中使用DynamicExpresso、Z.Expressions、LambdaParser进行安字符串求值

    例子如下: Z.Expressions从2.0开始支持了NetCore,但是收费的.其它两者免费.建议使用DynamicExpresso,免费而且速度快.LambdaParser目前支持太少. sta ...

  3. 算法笔记_223:打印回型嵌套(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 *********** * * * ******* * * * * * * * *** * * * * * * * * * * *** * * * ...

  4. Axure 验证码、进度条、分页条(翻页)、搜索框、选项卡

    百度网盘:http://pan.baidu.com/s/1jHP4qsm

  5. jQuery get selected text from SELECT (or DROPDOWN) list box

    Most of the time in JavaScript we want to do following things with Select (or dropdown) list box. – ...

  6. DLib库Base64编解码示例

    代码 #include <iostream> #include <fstream> #include <sstream> #include <string&g ...

  7. VS2015安装ASP.NET MVC4

    http://www.microsoft.com/zh-cn/download/details.aspx?id=44533 下载安装 AspNetMVC4.msi

  8. Replace和ReplaceAll的差别

    先澄清几个误区 1.CharSequence 不是 Char :有些小朋友依据參数的类型选择Replace或ReplaceAll方法 2.Replace 和 ReplaceAll :并非有些小朋友想象 ...

  9. 【转】 mysql反引号的使用(防冲突)

    转载地址:http://blog.itechol.com/space.php?uid=33&do=blog&id=6681 1.mysql语句中 反引号 [`]作用: 避免表明.字段名 ...

  10. javascript TODO

    1.需要深入学习DOM对象知识,very important! http://www.w3school.com.cn/htmldom/index.asp 2.深入学习javascript RegExp ...