历史上的今天
返回首页

历史上的今天

今天是:2025年04月13日(星期日)

正在发生

2018年04月13日 | STM8S---选项字节(Option Byte)写操作之IO复用

2018-04-13 来源:eefocus

功能实现目标

  通过对选项字节的写操作来实现TIM2的CH3通道的PWM输出IO复用,可以设置为PA3或者PD2输出。 
通过STVP方式操作链接

选项字节

  选项字节包括芯片硬件特性的配置和存储器的保护信息,这些字节保存在存储器中一个专用的块内。除了ROP(读出保护)字节,每个选项字节必须被保存两次,一个是通常的格式(OPTx)和一个用来备份互补格式的(NOPTx)。选项字节可以通过应用程序在IAP模式下修改,但是ROP选项只能在ICP模式(通过SWIM)下被修改。有关SWIM编程过程的内容可以参考STM8S闪存编程手册(PM0051)和STM8 SWIM通信协议和调试模块用户手册(UM0470)。 
  不同的芯片的选项字节大小不一样,具体的可以参考芯片数据手册。如用STM8S103F3来举例,选项字节如下:

选项字节

  STM8S103F对于20脚封装的产品的复用功能重定义位:

STM8S103F复用功能重定义位

  由此可知我们要将OPT2字节中的AFR1位进行写操作,通过写0,则端口A3复用功能TIM2_CH3,通过写1,端口D2复用功能TIM2_CH3。接下来通过程序实现这个功能,可以修改AFR1的值来看PWM输出是否切换了管脚,如果能,则是实现了写操作。 
  选项字节存放在EEPROM中,所以可以通过读写EEPROM一样的操作方式来修改选项字节。应用程序可以直接向目标地址进行写操作。地址从上面的图中我们已经知道了:0x4803,0x4804。寄存器的配置可以查阅参考手册(RM0016)。 
  相关寄存器操作:

FLASH_CR2

FLASH_NCR2

测试程序实现

  注意:实现程序擦写Option Bytes时,不能运行应用程序,否则会出现错误!不过还是觉得这点麻烦啊,还不如用STVP来擦写,要是能够放在应用程序中共存来擦写就好了,用程序实现复用就这么麻烦吗?希望能探索找到好的方法,最后只找到了个不靠谱的,就是在擦写后加上延时,但是这个时管用时不管用。还是再查阅资料看看是怎么回事?

ST Visual Develop

  但是用STVP擦写时又遇到了这个错误:

Error : Error on Option Bytes (complementary bytes). Reprogram Option Bytes of device
Error : < OPTION BYTE verifying failed.123

  用STVP来擦写Option Bytes了,先将ROP设置为ON,然后再擦写Option Bytes,会出现两个提示框,选择是(Y),再之后又将ROP设置为OFF,再次擦写Option Bytes,则又可以用STVD通过stlink来烧写程序并仿真了。

STVP program option bytes

T1

T2

测试程序:

/* MAIN.C file

Functons    :   操作option byte字节,设置IO复用,来修改TIM2的CH3通道PWM输出管脚PA3 or PD2

Date        :   2015年7月22日

Author      :   yicm

Notes       :   

 */


#include


void CLK_init(void)

{

    CLK_ICKR |= 0X01;           //使能内部高速时钟 HSI

    CLK_CKDIVR = 0x08;          //16M内部RC经2分频后系统时钟为8M

    while(!(CLK_ICKR&0x02));    //HSI准备就绪 

    CLK_SWR=0xe1;               //HSI为主时钟源 

}


void Init_GPIO(void)

{

    /*设置为推挽输出,PD2接了LED灯*/

    PD_DDR |= 0X04;             //设置PD2端口为输出模式

    PD_CR1 |= 0X04;             //设置PD2端口为推挽输出模式

    PD_CR2 &= 0XFD;


    PA_DDR |= 0X08;             //设置PA3端口为输出模式

    PA_CR1 |= 0X08;             //设置PA3端口为推挽输出模式

    PA_CR2 |= 0XF7;

}


void Init_Tim2(void)

{

    TIM2_CCMR3 |=   0X70;   //设置定时器2三通道(PD2)输出比较三模式

    TIM2_CCMR3 |= 0X04;     //输出比较3预装载使能


    TIM2_CCER2 |= 0x03;     //通道3使能,低电平有效,配置为输出


    // 初始化时钟分频器为1,即计数器的时钟频率为Fmaster=8M/64=0.125MHZ

    TIM2_PSCR = 0X07;   

    //初始化自动装载寄存器,决定PWM 方波的频率,Fpwm=0.125M/62500=2HZ

    TIM2_ARRH = 62500/256;

    TIM2_ARRL = 62500%256;

    //初始化比较寄存器,决定PWM 方波的占空比:5000/10000 = 50%

    TIM2_CCR3H = 31250/256;

    TIM2_CCR3L = 31250%256;



    //启动计数;更新中断失能

    TIM2_CR1 |= 0x81;

    //TIM2_IER |= 0x00;        

}


void Write_Option_Byte(void)

{   

    unsigned char opt[6] = {0,0,0x00,0,0,0};


    /*解锁Flash*/

    do

    {

        FLASH_DUKR = 0xAE;

        FLASH_DUKR = 0x56;      

    }

    while(!(FLASH_IAPSR & 0X08));


    /*对选项字节进行写操作使能*/

    FLASH_CR2 = 0X80;

    /*互补控制寄存器*/

    FLASH_NCR2 = 0X7F;

    /*写操作,0x02:PD2。0x00:PA3*/

    *((unsigned char *)0x4800) = opt[0];


    *((unsigned char *)0x4801) = opt[1];

    *((unsigned char *)0x4802) = ~opt[1];


    *((unsigned char *)0x4803) = opt[2];

    *((unsigned char *)0x4804) = ~opt[2];


    *((unsigned char *)0x4805) = opt[3];

    *((unsigned char *)0x4806) = ~opt[3];


    *((unsigned char *)0x4807) = opt[4];

    *((unsigned char *)0x4808) = ~opt[0];


    *((unsigned char *)0x4809) = opt[5];

    *((unsigned char *)0x480A) = ~opt[5];  


    /*等待写结束*/

    while(!(FLASH_IAPSR & 0x04));

}


main()

{

    int i;


    Write_Option_Byte();    //运行程序时,屏蔽  

    for(i=0;i<10000;++i);   //延时效果,有时加上延时,能够使擦写和应用程序同时不屏蔽也能管用


    CLK_init();             //擦写时屏蔽,否则下次stlink仿真时会出错

    Init_GPIO();            //擦写时屏蔽,否则下次stlink仿真时会出错

    Init_Tim2();            //擦写时屏蔽,否则下次stlink仿真时会出错

    while (1);

}



推荐阅读

史海拾趣

Emerson Embedded Power公司的发展小趣事

面对日益严峻的环境问题,Emerson Embedded Power积极响应,将环保理念融入产品设计和生产过程中。该公司致力于开发节能、低碳的电源产品,帮助客户降低能源消耗和碳排放。同时,公司还积极推广绿色制造理念,推动整个电子行业的可持续发展。

Chyao Shiunn Electronic Industrial Ltd公司的发展小趣事

随着市场竞争的加剧,Chyao Shiunn意识到品质管理的重要性。公司开始加强产品质量的控制,从原材料的采购到生产流程的每一个环节都严格把关。同时,公司还加大了品牌宣传力度,通过参加行业展会、举办技术研讨会等方式提升品牌知名度。这些举措不仅提高了公司的市场份额,也增强了客户对公司的信任。

EEMB Co Ltd公司的发展小趣事

随着全球电子行业的快速发展和市场竞争的加剧,EEMB集团开始意识到单纯依靠锂电池产品已经难以满足市场的多元化需求。因此,公司开始积极探索新的业务领域和市场机会。通过收购和兼并等方式,公司逐渐将业务扩展到智能家居、可穿戴设备等领域,并成功推出了多款具有创新性和竞争力的新产品。这些新产品的推出不仅丰富了公司的产品线,也为公司带来了新的增长点。

Golledge Electronics公司的发展小趣事

为了适应公司业务的快速发展和满足市场需求的不断增长,EEMB集团于2017年在汉川市修建了新工厂。新工厂占地面积120亩,使用面积达27000平方米,配备了先进的生产设备和技术。一期工程全面投入生产后,公司的产能得到了显著提升,能够更好地满足客户的订单需求。同时,新工厂的建成也进一步提升了公司的生产效率和产品质量。

Antiference公司的发展小趣事

在追求经济效益的同时,Antiference公司始终不忘履行社会责任。公司积极参与环保事业,推动绿色生产,努力降低生产过程中的能耗和排放。此外,Antiference还积极投身公益事业,支持教育事业和扶贫工作,为社会做出了积极贡献。

Corsair Memory Inc公司的发展小趣事

Corsair Memory Inc公司,由Don Lieberman、John Beekley与Andy Paul于1994年在美国加州佛利蒙创立。起初,公司专注于为英特尔系统生产Cache-On-A-Stick (COAST)模组。然而,随着英特尔将快取内存由主板移至处理器晶体中,Corsair迅速调整战略,将注意力转向电脑内存市场。这一转变不仅使Corsair避开了潜在的市场风险,更为其后续的内存业务奠定了坚实的基础。

问答坊 | AI 解惑

什么叫真正的分享!!

循迹小车的技术报告。 寻求更多的类似报告,先谢了!!!!…

查看全部问答>

求一个有865GV同样功能的上DDR2内存的主板

请问大家一个问题,自认为在eeworld是高手如林的地方! 865GV双通道(注意是865GV双通道)主板能用一条好的DDR内存带一条坏的DDR内存点亮主板,其它大部分主板都不行!请大家解析一下这其中的原因! 现在想求一个有865GV同样功能的上DDR2内存的 ...…

查看全部问答>

DL/T645规约

有没有人编写过DL/T645规约,请问数据标识是怎么定义的?…

查看全部问答>

求救:调试flash读写保护程序,JLINK不能下载程序了?

运行了一段写 flash读保护和写保护 程序后,jLink不能在下载调试(这个预料中). 但当我运行"J-link stm32 unlock"程序去保护,结果提示:"Unlocking flash...ERROR: Flash memory is still read-protected.".  难道不能用此 ...…

查看全部问答>

请教:我的XR16L784发不出数据是怎么回事?

我用2812和XR16L784扩展4个串口.现在通过总线设置访问寄存器都没有问题.可就是发不出来数据,不知道怎么回事? 我的初始化程序很简单: lcr=0x80; dll=0x27; dlm=0x00; lcr=0x03; fcr=0x00; mcr |= (1<<4);//回环自测试模式 ier=0x01; ...…

查看全部问答>

求助!关于集成电路设计和FPGA

大家好,最近打算学习有关集成电路设计方面的知识,现在不知道集成电路设计与FPGA究竟怎么联系起来的,感觉FPGA只是个工具,具体设计的时候,会用到哪些方面的知识?还有就是为了将来能从事IC设计,现在需要的基本技能是什么?谢谢大家!…

查看全部问答>

【MP430共享】基于新型励磁方式的电磁流量计设计

针对现有励磁方式的缺陷, 提出了一种新型的三值正弦矩形波励磁方式, 采用具有 1 6位 A D C采集模块的MS P 4 3 0 F 4 7 9 3单片机作为 MC U, 构建了电磁流量计样机。论文详细地分析了新型励磁方式的特点并介绍了软、 硬件设计。试验结果表明, 新 ...…

查看全部问答>

求推荐,好用的电路模拟软件

常用的电路模拟软件有哪些,哪个比较好用?适合模拟一些简单的高频电路 \0\0\0eeworldpostqq…

查看全部问答>

新人求助!关于CCS开发MSP430F5529单片机 !

      还是前些天开始接触的IAR和MSP430    现在要求用CCS开发5529单片机  那个软件全是英文已超出小弟水平,谁有这方面的教学视频或者资料吗?   最近学着很吃力,能分享小弟在此感激不尽!…

查看全部问答>

请问AT24C02存储时间,在生活中可以作为什么应用?

用51单片机的定时器功能做一个时钟,AT24C02存储时间,掉电后再开电源还可以显断电时的时间。请问可以作为什么应用?…

查看全部问答>