STM8问题汇总

STM8S使用常用问题汇总

==================================================================

                              按外设模块 
====================================================================== 
============================== GPIO/AFIO ============================= 

=============================== Beep =================================
1、STM8S提供一个Beep引脚。通过简单的配置即可输出1K、2K、4K三种频率信号驱动外部蜂鸣器。
   由于默认情况下Beep输出引脚PD4为TIM2_CC1功能,为此我们需要打开“Option Bytes”的AFR7选项。
   打开STVP,选择你使用的MCU型号,找到"Option Bytes"标签。将AFR7改为"Port D4 Alternate Function = Beep"。


   菜单栏选择"Program" -> "Current tab",成功后,即可正常使用Beep输出功能。


==================================================================


=============================== Power/RESET =========================
1、STM8S为双电源MCU,外设工作电压为3V~5.5V,内核工作电压为1.8V。因MCU内部已集成1.8V 低功耗电压(LPVR)调节器,MCU工作仅需提供一个供电电源。在电源电路设计时,需要注意芯片VCAP引脚上要提供滤波电容,该电容用于对内部1.8V供电滤波,容值不小于470nF为宜,瓷片和Ta电容均可,尽量选择较低ESR(等效串联电阻值)的型号。



2、MCU芯片自带上电复位(POR)与掉电复位(BOR),工作时供电需注意POR、BOR工作范围。
1)、POR - Power-On Reset 上电复位 
    POR的功能是在VDD电压由低向高上升越过规定的阀值(VIT+)之前,保持芯片复位,当越过这个阀值(VIT+)后的一小段时间后(Reset temporization),结束复位开始取复位向量执行指令。 

2)、BOR - Brown-Out Reset 掉电复位
    BOR的功能是在VDD电压由高向低下降越过规定的阀值(VIT-)后,将在芯片内部产生复位。




3、芯片复位地址指向0x6000(内部Bootloader存放首地址),在检查无Boot操作,PC指向0x8080地址。0x8000~0x807F为中断向量占用。


==================================================================



==================================================================

                            按使用开发环境 
====================================================================== 
==============================   STVD    ============================= 
1、STVD如何输出hex文件
   菜单栏 Project -> Setting 打开“Post_Build”标签,命令框原默认定义:
   chex -o $(OutputPath)$(TargetSName).s19 $(OutputPath)$(TargetSName).sm8
   输出S19格式的目标文件。
   在其中增加或修改为:
   chex -fi -o $(OutputPath)$(TargetSName).hex $(OutputPath)$(TargetSName).sm8 
   即可输出hex格式目标文件。
   生成hex文件被输出到目录 项目“\Debug”目录下。
   如图:
   

  (原文件名:hex.png) 
引用图片


==============================   RIDE    ============================= 




==================================================================



==================================================================

                               按编译器 
====================================================================== 
============================== STM8  ASM =============================



==============================   COSMIC  ============================= 
1、
  @tiny  - Zero Page(0x00~0xFF)  申明  :@tiny char a
    a) .bsct -  在zero page区域的初始化变量
    b) .ubsct- 在zero page里面的未初始化变量
    c) .bit       -  位操作段
    d) .share
  @near   -   Zero page 以外的RAM区域
    a) .bss  -  未初始化变量区域;
    b) .data  -  已初始化变量区域;
    c) .const  -  常量区域
  @far
   .fdata (large variable)
   .fconst  
   .text
  @EEPROM

2、
  Placing Data Objects in Short Range Memory
     @tiny char c;
     #pragma space extern [] @tiny
  Placing Data Objects in Long Range Memory 
     @near char ext;
     #pragma space extern [] @near
  Placing Data Objects in the EEPROM Space
     @eeprom char var;
     #pragma space extern [] @eeprom @near
Note:The @near modifier is necessary because the eeprom is located outside the zero page.

3、
  Memory Models for code smaller than 64K
    Stack Short ( mods0) - Global variables are defaulted to  short range
    Any global object in long range will have to be accessed explicitly with the  @near modifier unless accessed through a pointer.
    Stack Long ( modsl0) - Global variables are defaulted to  long range
    Any object in short range will have to be accessed explicitly with the  @tiny modifier.
  Memory Models for code larger than 64K
    Stack Short ( mods) - Global variables are defaulted to  short range
    Any global object in long range will have to be accessed explicitly with the  @near modifier unless accessed through a pointer.
    Stack Long ( modsl) - Global variables are also defaulted to  long range 
    Any object in short range will have to be accessed explicitly with the  @tiny modifier



4、变量地址的绝对定位:
    char acia @0x20;
    #define acia *(char *)0x20
    struct acia
    {
      char status;
      char data;
     } acia @0x6000

Note :that COSMIC C does support the pointer and #define methods of implementing I/O access.

5、内嵌汇编
   1)、#pragma asm   /    #pragma endasm
   2)、#asm   /   #endasm
   3)、_asm("rim")
  
   #pragma asm                                  Extern char test;
     XREF  asmvar                               void func(void)
   #pragma endasm                               {
                                                  if (test)
                                                  #asm   /* no need for { */
                                                   SCF                ;Set carry bit
                                                   RLC asmvar    ;Access assembler variable
                                                  #endasm
                                                  else
                                                    test = 1;

6、

==================================================================

你可能感兴趣的:(单片机相关)