打印
[STM8]

【转】STM8问题汇总

[复制链接]
615|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
人丑没人疼|  楼主 | 2016-11-3 00:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM8, IO, TE, TI, MCU
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-)后,将在芯片内部产生复位。



沙发
人丑没人疼|  楼主 | 2016-11-3 00:04 | 只看该作者

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、

使用特权

评论回复
板凳
蝙蝠侠| | 2016-11-4 10:08 | 只看该作者
楼主我想问一下 固件库里 GPIO_ReadInputPin(PORT,PIN);这个函数可用吗?   读取某个引脚的电平的。
因为我现在在调单总线通讯,可是一直进不去 if(GPIO_ReadInputPin(PORT,PIN) == 0) 这个函数,我想我不确定是我的延时错误还是这个函数不可用?有这个疑问是因为之前看过一些帖子有这样的质疑。
示波器上看到从设备发过来的电平信号是正常的,证明我通讯是成功的有接受的对方设备发过来的信号。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

97

帖子

0

粉丝