打印
[STM8]

写书计划《无刷直流电机控制应用--基于STM8》现书 特惠见P12

[复制链接]
楼主: uet_cache
手机看帖
扫描二维码
随时随地手机跟帖
81
uet_cache|  楼主 | 2013-3-10 10:34 | 只看该作者 回帖奖励 |倒序浏览
谢谢各位支持。。。
本书的编写绝对是以工程师应用角度出发。要费很多精气神,真是需要很多耐心的。。。。

请多关注,,,,

使用特权

评论回复
82
uet_cache|  楼主 | 2013-3-11 08:56 | 只看该作者
2.3.4 IAR C语言程序设计
IAR开发环境中编写程序同样也包括包括工程建立、工程配置、工程编译和工程调试等多个阶段。
1.工程创建
先创建一个workspace。选择“File->New>Workspace”创建一个新的工程。
选择“Project->Create New Project创建新工程的对话框,如图2-41所示。“Tool chain”默认是STM8 Series。在“Project templates”中选择“Empty project”,点击“OK”。
弹出Save As 对话框后,选择project保存的路径,并输入project 的名字。
2-41  IAR创建Workspace
Workspace 窗口中,显示信息如图2-42所示。有Debug Release两个配置。默认配置为Debug
2-42 Debug配置
在添加文件到工程中之前,先保存workspace。选择”File->Save Workspace”, 指定要保存的路径,并输入workspace的名字。如图2-43所示。
2-43 输入workspace名字
一个workspace 文件的扩展名是eww。此文件列出了添加到workspace 中的所有的project。相关当前会话信息,比如windows的保存路径和断点保存于projects\setttings目录下。
2.文件添加
可选择“Project->Add Files 选择要添加的C文件。找到相应MCU型号的头文件,拷贝到当前的工程目录中。默认地,头文件在IAR安装目录inc下,即“C:\Program Files\IAR Systems\Embedded Workbench 6.0 Kickstart\stm8\inc”。
本例中使用了iostm8s105s6.h文件
编写一个简单的C程序,源码如下:
源文件main.c
/* Includes ------------------------------------*/
#include "iostm8s105s6.h"
/* Global variables ---------------------------*/
unsigned int ms_count;
void CLK_Configuration(void)
{
       CLK_CKDIVR = 0x00;   /* fCPU=fMASTER = 16MHz */
}
void GPIO_Init(void)
{
    PD_DDR |= 0x0D;              /* Output.                  */
    PD_CR1 |= 0x0D;              /* PushPull.                */
    PD_CR2  = 0x00;              /* Output speed up to 2MHz. */
}
void TIM2_Init(void)
{
  TIM2_PSCR = 0x00;              /* Configure TIM2 prescaler =16. */
  TIM2_ARRH  = 0xC1;            /* Configure TIM2 period. */
  TIM2_ARRL  = 0x7F;            /* Configure TIM2 period. */
  TIM2_CNTRH = 0xC1;
  TIM2_CNTRL = 0x7F;
  TIM2_CR1 |= 0x81;              /* Enable TIM2. */
  TIM2_IER |= 0x01;              /* Enable TIM2 OVR interrupt. */              
}
main()
{
  asm("sim");  /* disable interrupts */
  ms_count = 0;
  CLK_Configuration();
  GPIO_Init();
  TIM2_Init();
  asm("rim") ;   /* enable interrupts */
  while (1)
  {
    asm("nop");
    asm("nop");
    asm("nop");  //嵌入汇编语言
  }
}     
声明一个中断向量,说明如下:
#pragma vector=0x02
__interrupt void interrupt_handler(void)
说明:
#pragma vector IAR中断向量指令。
=0x02 : 其数字代表中断向量编号。STM8的地址是从0x00800开始,IAR的中断编号从0开始。中断向量号依次按照中断地址递增。如:
复位向量是0x008000,中断向量号是0x00
TRAP的中断地址是0x008004中断向量号是0x01
SPI中断号是0x0C;详见如图2-44所示。
__interrupt void interrupt_handler(void): 是声明一个中断函数,注意interrupt是两个下划线,interrupt_handler 是中断函数名字,可自己定义。
2-44 中断地址分配图表
一个简单的中断函数stm8s105_interrupt.c 如下:
/* Includes -----------------------------------*/
#include "iostm8s105s6.h"
/* External variables ------------------------------*/
extern unsigned int ms_count;
/* Defines an interrupt handler for TIM2_UPDATE vector. */
#pragma vector=15
__interrupt void TIM2_UPDATE_IRQHandler(void)
{
      TIM2_SR1 &=~(0x01);
  
      ms_count++;
  
      if(ms_count == 500)   /* 0.5秒中断 */
      {
           PD_ODR ^= 0x01;
           ms_count = 0;
      }
}

使用特权

评论回复
83
uet_cache|  楼主 | 2013-3-12 17:22 | 只看该作者
3.工程配置
1)选择“Project->Options”,或者在Workspace窗口,选中project名字,右击选择“Options…”。在Category列项中,选择“General Options”,如图2-45所示。在TargetDevice中,选择相应的MCU型号。其他选择默认。
2-45 MCU型号选择
2)在Category列项中,选择C/C++Compiler,显示compiler选项页,如图2-46所示。
2-46 Compiler选项页
在“List”选项卡中,选择Output list file, 输出列表文件,如图2-47所示。
2-47 输出列表文件
3)在Category中,选择Assembler,显示Assembler选项页,如图2-48所示。
2-48 Assembler选项页
4)在Category中,选择Output Converter,显示Output Converter选项页,如图2-49所示。产生的目标文件,存放在Debug\Exe目录中。IAR默认输出是.out文件。此界面可选择不同的格式目标文件。本例选择Intel extended 格式的目标文件。
2-49 Output Converter选项页
5)在Category中,选择Linker,显示Linker选项页。默认输出文件是:工程名字.out。如图2-50所示。
2-50 Linker选项页
在“List”选项卡中,选中“Generate linker map file”复选框,输出工程的map 文件。如图2-51所示。
2-51 输出工程MAP文件
6)在Category中,选择Debugger,显示Debugger选项页,如图2-52所示。如果使用ST-LINK工具进行仿真调试,可在Driver下拉框中,选择ST-LINKIAR目前还支持软件仿真模拟和STice工具。
2-52 Debugger选项页

使用特权

评论回复
84
uet_cache|  楼主 | 2013-3-14 23:08 | 只看该作者
四章五章的目录有作改动,晚点再更过来。接下来几天要忙一个小项目,下周还要忙孩子的事情。估计要下周四五才有时间更了。

出版社的事情,基本上初定了。最后签了约,再给大家通报。

使用特权

评论回复
85
uet_cache|  楼主 | 2013-3-21 15:22 | 只看该作者
出去一周,元气大伤。要么头疼,要么没胃口。幸好事情都办好了。生活回归正常。。。又可以开始写书了。

使用特权

评论回复
86
uet_cache|  楼主 | 2013-3-21 15:33 | 只看该作者
4.工程编译
通过“Project->Compile 或者 Project->Rebuild All”来编译某个源文件或者全部重新编译。编译创建信息显示窗口如图2-53所示。
2-53 编译输出窗口
IDE将创建List, ObjExe目录。List目录是列表文件的目录。其扩展名为.lstObj目录是目标文件目录;Exe目录是可执行文件目录。
可通过workspace中的output文件夹,来查看所有输出的文件。如图2-54所示。
2-54 Workspace窗口
List文件可查看汇编代码和每个段的二进制代码,还显示变量如何分配。List文件的结尾显示了堆栈,代码和数据存储器的大小。
可选择“Tools->Options”来配置更新改变的文件。如图2-55所示。
2-55 Options配置
若要看代码的大小,可找到工程目录下的 \Debug\List,在list下有.map文件。用记事本打开.map文件,在.map的末尾,可查看程序代码大小。
如本例中的.map文件部分内容如表2-10所示。
2-10 本例中的.map文件
[1] = D:\Tutorial\EWSTM8S\Debug\Obj
[2] = command line
[3] = dbgstm8smd.a
[4] = dlstm8smn.a
  294 bytes of readonly  code memory
  132 bytes of readonly  data memory
  274 bytes of readwrite data memory
Errors: none
Warnings: none
本例的程序代码是:294个字节
5.工程调试
选择“Project->Download and Debug”,进入调试状态。
使用Auto窗口:在调试状态下,选择“View->Auto”打开Auto窗口。Auto窗口自动地显示当前的修改变量。如图2-56所示:
2-56 Auto窗口
观察窗口:选择“View>Watch”,打开观察窗口,如图2-57所示。
2-57 Watch窗口
寄存器窗口:选择“View>Register”,打开寄存器窗口。如图2-58所示。
2-58 Register窗口
6.烧录
IAR在调试时,可直接把代码下载到STM8里。
也可以通过STVP来烧录。在IAR工程当前目录下,有“Debug\Exe”目录,Exe下面有个.hex文件,这个就是目标文件。在STVP中调入HEX文件,配置好OPTION BYTE,即可进行程序的烧录。
使用STVP进行烧录的方法详见2.4.2章节。

使用特权

评论回复
87
grant_jx| | 2013-3-21 15:46 | 只看该作者
打算介绍STM8S官方提供的电机库,怎么不介绍STM8S 的MC LibraryBuilder软件?官方库同时也支持ACIM,没看到有相关章节?

使用特权

评论回复
88
uet_cache|  楼主 | 2013-3-21 16:09 | 只看该作者
谢谢grant_jx指点。那我考虑如何再加上一节MC LibraryBuilder软件的部分。STM8的ACIM库是基于V/F控制的完整代码,是写得非常好,有学习意义。我是想多写一些,但是篇幅有限,真不知怎么取舍才好。

使用特权

评论回复
89
learnxp| | 2013-3-22 10:43 | 只看该作者
写完了没有
有没有电子的分享啊

使用特权

评论回复
90
uet_cache|  楼主 | 2013-3-24 21:45 | 只看该作者
(带了三天孩子,今天 才有时间更新一点点。)

2.4  STM8烧录
STM8芯片的烧录可直接在STVD开发环境下进行,也可以使用专用的STVP编程软件进行烧录。
2.4.1 使用STVD烧录
STVD开发环境下,选择“Tools -> Programmer”,出现如图2-59所示烧录界面。确认烧录的Target Device型号,选择正确的硬件设备。
2-59 Programmer对话框
Settings选项:对于STM8系列单片机,可选择 RLINKST-LINKSTICE等工具进行烧录。若不想使用STVD的编程器,点击“Run STVP”按钮可以直接运行STVP
Memory Areas选项:Memory 可以选择DATA MEMORYPROGRAM MEMORYDATA MEMROYEEPROM 数据;PROGRAM MEMORY:程序。如图2-60所示。
2-60 Memory Areas选项
点击Add…可以添加要烧录的目标文件,如图2-612-62所示。
2-61 选择烧录目标文件
2-62烧录目标文件添加
Option Byte选项:根据应用配置合适的OPTION BYTE选项。如图2-63所示。
2-63 OPTION BYTE选项配置
Program选项:配置完成之后,点击Start 即可可以进行烧录。如图2-64所示。
2-64 烧录窗口

使用特权

评论回复
91
txcy| | 2013-3-24 23:36 | 只看该作者
应该会是一本很不错的书

使用特权

评论回复
92
无冕之王| | 2013-3-24 23:44 | 只看该作者
书现在应该写的差不多了吧

使用特权

评论回复
93
baidudz| | 2013-3-24 23:54 | 只看该作者
要更新了。。。

使用特权

评论回复
94
uet_cache|  楼主 | 2013-3-25 11:02 | 只看该作者
2.4.2 使用STVP烧录
可以运行独立的烧录软件ST Visual Programmer (STVP)进行STM8芯片烧录。运行开始”->ST Toolset->Development Tools -> ST Visual Programmer,运行界面如图2-65所示。
2-65 STVP界面图
烧录软件配置:运行 Configure -> Configure ST Visual Programmer,如图2-66所示。
2-66 烧录工具及芯片选择
Hardware: 烧录工具。
Port: USB
Programming mode: SWIM
Device: 选择要烧录的型号。
打开要烧录的目标文件 File -> Open…”。
DATA MEMORY: EEPROM 数据区。
配置OPTION BYTE选项的界面如图2-67所示。
2-67 配置OPTION BYTE
Value: 可直接在此框内直接输入配置好的OPTION BYTE值,OPTION BYTE内容根据Value 的值自动配置好。
STM8S105S4为例说明OPTION BYTE的配置。如图2-68所示。
2-68 OPTION BYTE配置举例
ROP:读出保护设置。若设置了ON,那么程序是就无法读出。
UBC [7:0]:用户启动代码区。一般用户在做IAP时,需要保护的代码部分设置。
AFR[7:0] 备选功能重映射选项。通过此来设置需要的功能。比如同一个引脚会有不同的功能。可通过此选项来设置需要的功能。
HSITRIM:高速内部时钟调节寄存器大小。
LSI_EN 低速内部时钟使能。
IWDG_HW 独立看门狗。
WWDG_HW 窗口看门狗激活。
WWDG_HALT 当芯片进入停机模式时窗口看门狗的复位动作。
EXT_CLK 外部时钟选择。
CKAWUSEL 自动唤醒单元/时钟。
PRSC[1:0] AWU时钟预分频。
HSECNT[7:0] HSE晶体振荡器稳定时间。
BOOTLOADER ENABLE: 如果用户使用UART来下载程序,可通过此选项位来设置。
更多的信息,可参考STM8S105S4的数据手册。
选择“Program>All tabs(on action sectors if any)”。 此选项可将“PROGRAMM MEMORY,DATA MEMORYOPTION BYTE”一起烧录到STM8里面去。如图2-69所示。
2-69 烧录菜单选择

使用特权

评论回复
95
uet_cache|  楼主 | 2013-3-26 10:12 | 只看该作者
2.5  STM8S固件库
使用STM8固件库进行系统开发,可以省去对寄存器直接操作的麻烦,大大减少STM8单片机的开发难度和开发时间,提高系统开发速度。
2.5.1 固件库简介
STM8固件函数库可在以下网址下载:
如图2-70为在官方网站下载STM8固件库界面图。
2-70 STM8固件函数库下载网
下载文件名为:stsw-stm8069.zip。解压缩文件,浏览其内容。如图2-71所示。
2-71 固件库解压缩文件列表
其中Libaries为固件库所在文件夹,stm8s-a_stdperiph_lib_um.chm为固件使用手册文件。
STM8S/A 标准外设固件库由程序,数据结构和宏组成。该函数库还包括每一个外设的驱动描述和应用实例。通过使用本固件函数库,用户无需深入研究外设特性的细节,也可以轻松应用每一个外设。因此,使用本固件函数库可以大大减少用户的程序编写时间,进而降低开发成本。
STM8S/A 标准外设固件库是一个完整的固件函数包,由STM8S/A系列8位闪存微控制器的所有标准外设驱动组成,而每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用APIapplication programming interface 应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。
因为该固件库是通用的,并且包括了所有外设的功能,所以应用程序代码的大小和执行速度可能不是最优的。对大多数应用程序来说,用户可以直接使用,对于那些在代码大小和执行速度方面有严格要求的应用程序,该固件库驱动程序可以作为如何设置外设的一份参考资料,根据实际需求对其进行调整。
此份固件库用户手册整体架构如图2-72所示。
2-72 固件库用户手册整体架构
此固件库和所有相关文档不受许可协议,如果需要,可以联系当地的意法半导体公司办公室。 此固件仅旨在为客户提供有关信息编码,以便于他们节省产品开发时间。因此,意法半导体将不承担任何因使用这些资料所产生的后果。

使用特权

评论回复
96
uet_cache|  楼主 | 2013-3-27 09:57 | 只看该作者
2.5.2 压缩包描述
固件函数库被压缩在一个ZIP文件中,文件名:stsw-stm8069.zip。解压缩该文件会产生一个文件夹,包含如图2-73所示的文件列表。
2-73 固件库文件列表
文件夹“STM8S_StdPeriph_Examples ”,对应每一个外设,都包含一个子文件夹。这些子文件夹包含了整套文件组成典型的例子,来示范如何使用对应外设。这些文件有:
readme.txt: 每个例子的简单描述和使用说明。
stm8s_conf.h: 该头文件设置了所有使用到的外设,外设的宏定义在不同的头文件中。
stm8s_it.c: 该源文件包含了所有的中断处理程序(如果未使用中断,则所有的函数体都为空)。
stm8s_it.h: 该头文件包含了所有的中断处理程序的函数声明原形。
Main.c: 例程代码。
文件夹Libraries包含了组成固件函数库核心的所有子文件夹和文件。子文件夹INC包含了固件函数库所需的头文件,用户无需修改该文件夹。子文件夹SRC包含了固件函数库所需的源文件,用户无需修改该文件夹。
文件夹Project中的Template文件夹中包含了一个标准的程序项目模板,包括库文件的编译和所有用户可修改的文件。用户也可自己建立新的工程。

使用特权

评论回复
97
uet_cache|  楼主 | 2013-3-28 09:59 | 只看该作者
2.5.3 文档和库规范1.缩写
固件库中所有缩写定义如表2-11   
2-11 固件库缩写定义
缩写
外设/单元
ADC
Analog to digital converter
BEEP
Beeper
CLK
Clock controller
CAN
CAN
EXTI
External interrupt/event controller
FLASH
Flash memory
GPIO
General purpose I/O
I2C
Inter-integrated circuit
ITC
Interrupt controller
IWDG
Independent watchdog
RST
Reset controller
SPI
Serial peripheral interface
TIM1
16-bit advanced control timer
TIM2, TIM3, TIM5, TIM6
16-bit general purpose timers
TIM4
8-bit basic timer
UART
Universal asynchronous receiver transmitter
WWDG
Window watchdog
2.命名规则
标准固件函数库遵从以下命名规则。
PPP表示任一外设缩写,例如:TIM2TIM3。更多缩写参阅表2-11
系统、源程序文件和头文件命名都以“stm8s_”作为开头。
常量仅被应用于一个文件的,定义于该文件中;被应用于多个文件的,在对应头文件中定义。所有常量都由英文字母大写书写。
寄存器作为常量处理。他们的命名都由英文字母大写书。
外设函数的命名以该外设的缩写加下划线为开头。每个单词的第一个字母都由英文字母大写书写。例如:SPI_SendData。在函数名中,只允许存在一个下划线,用以分隔外设缩写和函数名的其它部分。
名为PPP_Init的函数,其功能是根据头文件中指定的参数初始化外设PPP,例如:TIM2_Init
名为PPP_DeInit的函数,其功能为复位外设PPP的所有寄存器至缺省值,例如:TIM2_DeInit
名为PPP_Cmd的函数,其功能为使能或禁止使用外设PPP,例如:SPI_Cmd
名为PPP_ITConfig的函数,其功能为使能或禁止来自外设PPP的某中断源,例如:SPI_ITConfig
用以配置外设功能的函数,总是以字符串“Config”结尾,例如:TIM2_ETRConfig
名为PPP_GetFlagStatus的函数,其功能为检查外设PPP某标志位被设置与否,例如:I2C_GetFlagStatus
名为PPP_ClearFlag的函数,其功能为清除外设PPP标志位,例如:I2C_ClearFlag
名为PPP_GetITStatus的函数,其功能为判断来自外设PPP的中断发生与否,例如:TIM2_GetITStatus
名为PPP_ClearITPendingBit的函数,其功能为清除外设PPP中断待处理标志位,例如:TIM2_ClearITPendingBit
3.编码规则
固件函数库定义的变量,他们的类型和大小都是固定的。这些类型定义在文件stm8s.h中:
#define     __I     volatile const      /*!< defines 'read only' permissions      */
#define     __O     volatile                  /*!< defines 'write only' permissions     */
#define
   __IO    volatile                  /*!< defines 'read / write' permissions   */

/*!< Constant qualifier */
#ifdef _COSMIC_
#define __CONST  const
#else /* _RAISONANCE_*/
#define __CONST  code
#endif /*_COSMIC_*/

/*!< Signed integer types  */
typedef   signed char     int8_t;
typedef   signed short    int16_t;
typedef   signed long     int32_t;

/*!< Unsigned integer types  */
typedef unsigned char     uint8_t;
typedef unsigned short    uint16_t;
typedef unsigned long     uint32_t;
typedef enum {FALSE = 0, TRUE = !FALSE} bool;
typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus, BitStatus, BitAction;
typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;
用户可以通过指向各个外设的指针访问各外设的控制寄存器。每个外设都有它自己的数据结构和指针。所有结构都定义在stm8s.h文件中。
寄存器结构定义,举例:
typedef struct SPI_struct
{
    __IO uint8_t CR1;    /*!<
SPI control register 1 */
    __IO uint8_t CR2;    /*!< SPI control register 2 */
    __IO uint8_t CR3;    /*!< SPI DMA and interrupt control register */
    __IO uint8_t SR;     /*!< SPI status register */
    __IO uint8_t DR;     /*!< SPI data I/O register */
    __IO uint8_t CRCPR;  /*!< SPI CRC polynomial register */
    __IO uint8_t RXCRCR; /*!< SPI Rx CRC register */
    __IO uint8_t TXCRCR; /*!< SPI Tx CRC register */
}
SPI_TypeDef;
外设声明,举例:
#define SPI1_BaseAddress      (uint16_t)0x5200
#define SPI1 ((SPI_TypeDef *) SPI1_BaseAddress)
寄存器访问:SPI1->CR1 = 0x01;
所有外设寄存器的复位值被定义为在stm8s.h文件中。
格式如:PPP_ <register_name> _RESET_VALUE
举例:
#define SPI_CR1_RESET_VALUE    ((uint8_t)0x00) /*!< Control Register 1 reset value */
#define SPI_CR2_RESET_VALUE    ((uint8_t)0x00) /*!< Control Register 2 reset value */
#define SPI_CR3_RESET_VALUE    ((uint8_t)0x00) /*!< DMA and Interrupt Control Register reset value */
#define SPI_SR_RESET_VALUE     ((uint8_t)0x02) /*!< Status Register reset value */
#define SPI_DR_RESET_VALUE     ((uint8_t)0x00) /*!< Data Register reset value */
#define SPI_CRCPR_RESET_VALUE  ((uint8_t)0x07) /*!< Polynomial Register reset value */
#define SPI_RXCRCR_RESET_VALUE ((uint8_t)0x00) /*!< RX CRC Register reset value */
#define SPI_TXCRCR_RESET_VALUE ((uint8_t)0x00) /*!< TX CRC Register reset value */
外设寄存器的所有位被定义为在stm8s.h文件中。
格式如:PPP_<register_name>_<bit_name>
举例:
#define SPI_CR1_LSBFIRST ((uint8_t)0x80) /*!< Frame format mask */
#define SPI_CR1_SPE      ((uint8_t)0x40) /*!<
Enable bits mask */
#define SPI_CR1_BR       ((uint8_t)0x38) /*!< Baud rate control mask */
#define SPI_CR1_MSTR     ((uint8_t)0x04) /*!< Master Selection mask */
#define SPI_CR1_CPOL     ((uint8_t)0x02) /*!< Clock Polarity mask */
#define SPI_CR1_CPHA     ((uint8_t)0x01) /*!< Clock Phase mask */

使用特权

评论回复
98
uet_cache|  楼主 | 2013-3-29 18:47 | 只看该作者
今天 学了一天的车,好累啊。明天还要去学。只有后天更新了。

使用特权

评论回复
99
uet_cache|  楼主 | 2013-3-29 21:06 | 只看该作者
(教练说明天还要去练车,先把第二章传完吧。)
(三四五章目录定下来了,下次把这几章的目录改过来。另外,可能下周签约,初步定北航,等签了合同,再跟大家讲。谢谢关注的朋友。)

(网页上的图都不太清楚,实际WORD文档中很清楚的。)
2.5.4 使用举例
为更好的理解固件库的使用,现详细介绍用STVD实现一个GPIO反转的应用例程。此例程可详见光盘“第二章”文件夹下“第2章例程”。
(1)打开STVD开发环境,按照2.3.2章节的步骤,建立一个新工程,工程名称为TEST。选择芯片为STM8S207RB。建立工程完成后如图2-74所示。
2-74工程建立界面图
(2)点击main.c打开主程序。如图2-75所示。主程序中只有一条while(1)循环语句。
2-75 主程序浏览图
(3)以对PA0口进行延时反转为例。现要对GPIO进行操作,需要将固件库的文件加到工程。将固件库Libraries文件夹拷到工程所在目录下。如图2-76所示。
2-76 Libraries文件夹选择
(4)在STVD环境下的工作窗口区,将要用到的固件库文件加到工程中。添加方法:右击工程名“test”,在菜单中选择“New Folder...”,在新出现的对话框中,输入LIB。右击LIB,在菜单中选择“Add Files to Folder…”,在新出现的对话框中,寻找固件库路径,并选择SCR文件下的“stm8s_gpio.c”文件,并点击“打开”,将固件函数文件加到工程中。如图2-77所示。同样的方法添加“stm8s_gpio.h”和“stm8s_conf.h”文件。
2-77 相关固件库文件添加
(5)选择“Project->Settings”菜单,出现Project Settings对话框。在C Compiler页面的Prerocessor框中输入宏定义内容“STM8S207” ,如图2-78所示.
2-78  Settings对话框配置
(6)修改主程序为如下语句:
/* MAIN.C file
* Copyright (c) 2002-2005 STMicroelectronics
*/
#include "stm8s_gpio.h"
//包含固件库中所用到外设驱动的头文件
main()
{
       u16 i;
       GPIO_Init(GPIOA, GPIO_PIN_0, GPIO_MODE_OUT_PP_HIGH_FAST);   
//PA0初始化为推挽输出模式
       while (1)
              {
                     for(i=0;i<40000;i++);//延时
              GPIO_WriteReverse(GPIOA,GPIO_PIN_0); //PA0口反转
       }
}
#ifdef USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *   where the assert_param error has occurred.
  * @param file: pointer to the source file name
  * @param line: assert_param error line source number
  * @retval : None
  */
void assert_failed(u8* file, u32 line)
{
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* Infinite loop */
  while (1)
  {
  }
}
#endif
(7)编译程序出现如图2-79所示结果,编译结果显示无任何错误和警告。此程序实现PA0口延时反转功能,使用固件库完成寄存器的操作。
2-79 编译结果图

使用特权

评论回复
100
秋天落叶| | 2013-3-29 23:25 | 只看该作者
期待LZ继续更新

使用特权

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

本版积分规则