stm8 io口重映射

发布者:blq0681最新更新时间:2020-02-15 来源: eefocus关键字:stm8  io口  重映射 手机看文章 扫描二维码
随时随地手机看文章

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口  重映射 引用地址:stm8 io口重映射

上一篇:STM8S外设的端口映射问题
下一篇:Stm8 串口重定向及问题解决

推荐阅读最新更新时间:2024-11-07 17:17

几种常用51单片机的I/O口驱动能力分析
在控制系统中,经常用单片机的I/O口驱动其他电路。几种常用单片机I/O口驱动能力在相关的资料中的说法是:GMS97C2051、AT89C2051的P1、P3的口线分别具有 10mA、20mA的输出驱动能力,AT89C51的P0、P1、P2、P3的口线具有10mA的输出驱动能力。在实际应用中,仅有这些资料是远远不够的。笔者通过实验测出了上述几种单片机的I/O口线的伏安特性(图1、图2),从中可以得到这些I/O口的实际驱动能力。 说明:1、测试方法:所测试的口线输出的信号是周期为4秒的方波。当测试口线为低电平时的驱动能力时,该口线通过电阻箱接+5V电源,测出该口线对地的电压,从而计算出通过电阻的电流,即灌电流;测出这样的一组数据
[单片机]
几种常用51单片机的I/O口驱动能力分析
STM8 I2C与PCF8574通讯程序
系统功能 使用STM8的I2C与PCF8574通讯,并使用LED作出简单指示!(PCF8574是I2C与并口互转芯片) 硬件设计 本设计基于内部RC振荡器2M时钟作STM8定时器TIM4的时钟源进行I2C通讯 LED控制电路原理图 PCF8974原理图 软件设计 /********************************************************************* 目标系统: 基于STM8单片机 应用软件: Cosmic CxSTM8 ****************************************************************
[单片机]
<font color='red'>STM8</font> I2C与PCF8574通讯程序
STM8单片机ADC单次扫描模式
  当STM8单片机使用ADC功能读取多个通道的值时,可以使用单次模式,采样完一个通道之后,重新初始化另一个通道,然后采样,采样完成后继续重新初始化切换下一个通道。但是这样采样起来太麻烦。STM8单片机提供了一个扫描模式,可以依次按照顺序采样多个通道的值,多个通道全部采样完成后,会置位标志位,这样就可以一次性将多个通道的值全部读出来。   其中官方文档介绍如下:   从文档中可以看出,采样都是从0通道开始的,比如想采样3个通道值,那么采样的通道号就为0—3。如果想采样3、4通道,那么也得从0通道开始,也就是说要从0通道开始扫描到4通道,就算0、1、2通道不用,它也会扫描,就这一点不好。   单次采样的时候,ADC_CS
[单片机]
<font color='red'>STM8</font>单片机ADC单次扫描模式
STM8学习笔记---Modbus通信协议简单移植
Modbus是一种串行通信协议,在工业中应用是比较广泛的。关于Modbus的介绍网上资料很多,这里就不细说了。刚开始接触的时候看Modbus的介绍,光是协议的介绍有几百页,还有各种命令,各种链路层的应用,看了几天,越看越糊涂,越看越不会用。 最后在单片机上移植成功后才感觉Modbus协议没那么复杂,如果刚开始学的时候,没必要把Modbus协议中每个功能都去了解。就把它当做简单的串口协议,只使用最简单的几个命令就行了。熟悉之后再慢慢了解其他功能。 下面就从单片机串口通信角度去理解Modbus协议,及如何将协议移植到单片机上。 先看看Modbus的协议 从大的方面来讲,协议总共由4部分组成: 地址、功能、数据、校验。
[单片机]
<font color='red'>STM8</font>学习笔记---Modbus通信协议简单移植
STM8S独立按键IO口设置及按下事件问题
GPIO设置 按键检测 1 连续按键检测短按 关键代码 1 GPIO设置 STM8 I/O 口引脚配置表 Px_DDR Px_CR1 Px_CR2 I/O 方式 引脚状态 0 0 0 输入 悬浮输入 0 0 1 输入 上拉输入 0 1 0 输入 中断悬浮输入 0 1 1 输入 中断上拉输入 1 0 0 输出 开漏输出 1 1 0 输出 推挽输出 1 x 1
[单片机]
51单片机的IO口驱动能力、灌电流、拉电流、上拉电阻的选择
单片机的引脚,可以用程序来控制,输出高、低电平,这些可算是单片机的输出电压。但是程序控制不了单片机的输出电流。单片机的输出电流,很大程度上是取决于引脚上的外接器件。 单片机输出低电平时,将允许外部器件,向单片机引脚内灌入电流,这个电流,称为 灌电流 ,外部电路称为 灌电流负载 ,如下图1所示;单片机输出高电平时,则允许外部器件,从单片机的引脚拉出电流,这个电流,称为 拉电流 ,外部电路称为 拉电流负载 ,如下图2所示。 这些电流一般是多少?最大限度是多少? 这就是常见的单片机输出驱动能力的问题。每个单个的引脚,输出低电平的时候,允许外部电路,向引脚灌入的最大电流为 10 mA;每个 8 位的接口(P1、P2 以及 P3),
[单片机]
51单片机的<font color='red'>IO口</font>驱动能力、灌电流、拉电流、上拉电阻的选择
at91rm9200的io口电平中断简单理解
对于PQFP封装的9200的PIOA、PIOB和PIOC三组32*3=64个io口,他们的io中断有这样的特性PIO的中断AT91C_AIC_SRCTYPE_EXT_HIGH_LEVEL和AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE都是电平中断,对于PIO来说没有区别,在PIO中断处理函数里边通过检测发生io中断的相应io引脚输入值为0还是为1,来判断是高电平中断还是低电平中断,PIO的PIO_IER使能的相应io口线上输入变化中断--注意是变化中断,所以对于io电平中断也必须存在电平变化之后才能被9200捕获到,也才能引发中断,执行中断处理函数,io口线上无电平变化也就无电平中断会被触法,这和51单片
[单片机]
8031单片机I/O口使用
一、实验目的 1、掌握P3口、P1口简单使用。 2、学习延时程序的编写和使用。 二、实验内容 1、实验原理图: 2、实验内容 (1)P3.3口做输入口,外接一脉冲,每输入一个脉冲,P1口按十六进制加1。 (2)P1口做输出口,编写程序,使P1口接的8个发光二极管L1—L8按16进制加1方式点亮发光二极管。 3、实验说明 (1)P1口是准双向口,它作为输出口时与一般的双向口使用方法相同,由准双向口结构可知:当P1口作为输入口时,必须先对它置高电平,使内部MOS管截止,因内部上拉电阻是20KΩ—40KΩ,故不会对外部输入产生影响。若不先对它置高,且原来是低电平,则MOS管导通,读入的数据是不正确的。 (2)延时子程序的
[单片机]
8031单片机I/O口使用
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved