历史上的今天
今天是:2025年02月15日(星期六)
2020年02月15日 | stm8 io口重映射
2020-02-15 来源:eefocus
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进行复位刷默认配置即可。
上一篇:STM8S外设的端口映射问题
下一篇:Stm8 串口重定向及问题解决
史海拾趣
|
1. 定义地电流:在大地或在接地极中流过的电流。接地导体:指构成地的导体,该导体将设备、电气器件、布线系统、或其他导体(通常指中性线)与接地极连接。接地极:构成地的一种导体。接地连接:用来构成地的连接,系由接地导体、接地极和围绕接地 ...… 查看全部问答> |
|
整理后经济型袖珍示波器V1.1版材料清单及成本估算如下: 电路原理图PCB图请参阅之前在坛子里发的“经济型袖珍示波器V1.1版电路原理图”及“经济型袖珍示波器PCB图” 至于包含已经焊好零件并检测完成的电路板的全套套件,就在上面全套散件价格的 ...… 查看全部问答> |
|
在电子电路中,常可以看到VCC、VDD和VSS三种不同的符号,它们有什么区别呢? 一、解释 VCC:C=circuit 表示电路的意思, 即接入电路的电压; VDD:D=device 表示器件的意思, 即器件内部的工作电压; VSS:S=series 表示公共连接的意 ...… 查看全部问答> |
|
大虾们好,以下是我的UART1中断函数 void UART1 (void) interrupt 20 using 2 { unsigned char xdata tChar=0; EIE2 &= 0xBF; RI1Flag=(SCON1 & 0x01); ...… 查看全部问答> |
|
本帖最后由 dontium 于 2015-1-23 13:33 编辑 高效率LED驅動電源設計 作者: 德州儀器Robert Kollman 摘要 本文提供LED特性及驅動電源優缺點的概要說明。文中將介紹數種常見的電源供應應用電路,並且詳細說明其閉迴路設計。本文亦討論LED調 ...… 查看全部问答> |
|
我们公司以前一直用NEC的单片机,现在改为用TI 28335,刚开始用;想问一个问题,就是看资料说TIMER 0是给用户用的,那是否定时器中断,只能有一个了?若想多定时中断咋办?… 查看全部问答> |
|
本系统系统以MSP430G2231位核心控制器,核心控制器通过DC-DC降压电路从12V蓄电池取电。通过对光伏太阳能板输出电压与电流进行采样,可以实现最大功率跟踪。通过对铅酸电池的电压及充电电流进行采样,可以实现蓄电池充电的控制。 … 查看全部问答> |
|
邮箱:chinaymj@gmail.com 官网的软件是8.11的我没有找到8.10的版本的,8.11的试用期过了,现在网上还没的破解的。 希望好心人能给我传一个谢谢!… 查看全部问答> |
|
一直用IO口模拟I2C,这两天做msp430用到I2C却遇到问题,特来请教各位高手 以前用IO口模拟I2C一直都没有出现问题,现在正在做的msp430板子却怎么都调试不出来。现将所遇到的情况向各位汇报:1、一开始是向24C04写地址,但是始终没有应答信号,用示波器观察,SDA信号电平在中间位置,所以判断信号为高,无应答 2、于是我怀 ...… 查看全部问答> |




