STM8库函数开发资源和基本步骤摘要

2020-03-25来源: eefocus关键字:STM8  库函数  开发资源  基本步骤

1、EWstm8多个版本下载


IAR EWSTM8系列教程01_IAR介绍、下载、安装和注册 - 知乎 https://zhuanlan.zhihu.com/p/42499895

下载地址:https://pan.baidu.com/s/1slF5kYx#list/path=%2F https://pan.baidu.com/s/1slF5kYx#list/path=%2F


2、标准库下载

stm8s标准固件库(STSW-STM8069)下载,http://www.st.com/web/en/catalog/tools/PF258009


3、操作入门

stm8开发环境配置及测试 - 小草光明与嵌入式 - CSDN博客 https://blog.csdn.net/xiaocaoguangming/article/details/9327977


STM8自学笔记-002 STM8初上手和开发环境的建立 - weixin_43572492的博客 - CSDN博客 https://blog.csdn.net/weixin_43572492/article/details/85068875


基于STM8官方标准库建立IAR工程


1.去ST官网或论坛下载STM8的标准外设库

2.解压缩下载的压缩包

3.建立STM8 工程模板文件夹并复制相关文件

  在文件夹下建立四个文件(这个看个人喜好),我喜欢建立一个工程文件夹Project用于存放工程文件,Library文件用于存放库文件,App用于存放用户程序,Doc用于存放说明文档。


  将官方的库文件Libraries文件下STM8S_StdPeriph_Driver这个文件下的内容复制到自己新建的Library文件下,把官方Project文件下Template文件夹下main.c stm8s_conf.h stm8s_it.c 和stm8s_it.h复制到App文件夹下。


4.给工程添加组和文件

  打开IAR 选择Project->Create New Project->ok,将文件保存到Project文件夹下;右击工程选择Add Group,然后依次添加App组,Libraries组。

  在App和Libraries文件中添加文件。在Libraries中添加标准库中src文件夹里所有的*.c文件。


5.工程设置

  选择使用的STM8单片机的具体型号,要注意Code和Data的选项。以STM8S103K为例子。

  设置编译器的路径,该路径是寻找*.h的路径。PROJDIR PROJ_DIRPROJ 

    DIR指的是工程文件workspace的保存路径,即*.eew文件的路径。…指的是上一级路径,即父目录。

  明白上述两点后,将STM8库文件的inc路径包含进去。


//采用相对路径,这样在将程序移到其它电脑时不必重新设置库函数路径

$PROJ_DIR$..

$PROJ_DIR$..App

$PROJ_DIR$..Libraryinc


然后设置Debugger模式为ST-Link。至此设置完成,可以编译工程了。

  然后会看到报错!?

  错误提示是没有在头文件stm8s.h中设置芯片类型。那就去设置——打开stm8s.h做修改,对芯片型号进行定义,我们选择的是stm8s103,这里应根据实际芯片类型进行选择。


  然后再次进行编译。会发现还是会报错!??


  这次的错误提示是无法定义ADC2、CAN等等。为什么会出现这种问题?我们继续看stm8s.h文件,里面有说明。


  这里说我们定义STM8S103以后只会去定义ADC1,不会定义ADC2!?实际上,因为8S103芯片上并没有ADC2外设,所以将ADC2、CAN等等没有定义的.c文件从Libraries组移除就好(添加的是STM8S所有的外设的源文件,但是具体要看目标MCU支持哪些外设)。


  移除以后再次进行编译就不会报错了,可以看到有一个warning,那是ST官方的一个库函数有出口参数却没有return语句。


  到此结束,接下来就可以按照自己的需要进行编程调试了。


4、STM8中GPIO的12种模式


原文:https://blog.csdn.net/weibo1230123/article/details/81204776 


(1)GPIO_Mode_In_FL_No_IT:浮空输入无中断

(2)GPIO_Mode_In_PU_No_IT:上拉输入无中断

(3)GPIO_Mode_In_FL_IT:浮空输入有中断 

(4)GPIO_Mode_In_PU_IT :上拉输入有中断 

(5)GPIO_Mode_Out_OD_Low_Fast :开漏-输出低-高速   Output open-drain, low level, 10MHz   

(6)GPIO_Mode_Out_PP_Low_Fast :推挽-输出低-高速   Output push-pull, low level, 10MHz   

(7)GPIO_Mode_Out_OD_Low_Slow :开漏-输出低-低速   Output open-drain, low level, 2MHz   

(8)GPIO_Mode_Out_PP_Low_Slow :推挽-输出低-低速   Output push-pull, low level, 2MHz   

(9)GPIO_Mode_Out_OD_HiZ_Fast :开漏-输出高阻-高速   Output open-drain, high-impedance level, 10MHz   

(10)GPIO_Mode_Out_PP_High_Fast :推挽-输出高-高速   Output push-pull, high level, 10MHz   

(11)GPIO_Mode_Out_OD_HiZ_Slow :开漏-输出高阻-低速   Output open-drain, high-impedance level, 2MHz   

(12)GPIO_Mode_Out_PP_High_Slow :推挽-输出高-低速   Output push-pull, high level, 2MHz

--------------------- 

stm8的定时器的tim2的通道1,通道2输出pwm,对应的GPIO需要配置吗,如何配置啊?


不需要任何配置的,只需要设置PWM的相关寄存,配置成输下PWM,他自动就输出PWM了


stm8的TIM1和TIM2可以输出PWM,输出管脚是TIM的通道,你可以使用库函数设置

先配置PWM频率,再配置PWM类型,通道,然后再使能定时器,如果需要使用中断,还可以打开中断

/* Time base configuration */

TIM2_TimeBaseInit(TIM2_PRESCALER_1, 999); //2kHz

/* PWM1 Mode configuration: Channel1 */

TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,CCR1_Val, TIM2_OCPOLARITY_HIGH);

TIM2_OC1PreloadConfig(ENABLE);

/* TIM2 enable counter */

TIM2_Cmd(ENABLE);


5、如需输出pwm还需要设置选项字节

 

STM8S---选项字节(Option Byte)写操作之IO复用 - FreeApe - CSDN博客 https://blog.csdn.net/FreeApe/article/details/47008033

/* 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);

}


6、通过IAR修改选项字节

STM8在IAR中Option Byte配置 - STM8 - 论坛-意法半导体STM32/STM8技术社区 http://www.stmcu.org.cn/module/forum/thread-607140-1-1.html


1、在工程Options...选项Debugger中选择你的调试工具,选择好后会在IAR的菜单栏中出现对应的调

[1] [2]
关键字:STM8  库函数  开发资源  基本步骤 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic492546.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM8固件库+IAR 之--CLK
下一篇:STM32固件库详解

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

stm8l低功耗系列
最近干刚做了一个stm8的项目用的是L低功耗系列,其中遇到一个问题。外设寄存器的值怎么都写入不进去。用IAR仿真产看寄存器的值,不论写进去多少,都是初始值。后来把所有寄存器都写了一遍,发现有的能写进去,有的写不进去。比如GPIO的寄存器就能写进去。百思不得姐,偶然查看clock的库函数发现个函数是设置外设时钟的。这个系列,亦或者整个低功耗系列的每个外设是不是都需要在时钟寄存器中单独设置时钟。(以前所使用的芯片都是在外设寄存器中使能或者是禁使能)
发表于 2020-03-09
STM8L+BC26双低功耗,微安
现在在做一个项目需要用到STM8L和BC26。长时间断链后连接下服务器,并且发送一下当前状态,需要用到STM8L和BC26的低功耗。STM8L低功耗,这里用HALT模式,RTC规定时间唤醒。第一步需要关闭所有外设,把所有管脚为设置为输出,并且输出低,管脚根据具体环境设置,需要输出高电平的则输出高电平。在关闭外设的是后是需要先_DeInit,然后在关闭外设始终,有点需要特别主要,要把在进入halt模式的时候需要把所有的中断的标志位清空,否则使用RTC唤醒则会不起作用。第二步就设置低功耗的一些配置。第三步配置完成后进入低功耗。项目中需要用到外部高速始终和BC26通信,所以在进入和退出halt模式的时候需要重新初始化active模式下的
发表于 2020-03-09
stm8l151低功耗程序架构,调试心得
最近帮医院做了一款体温记录仪,整个硬件方案资源是:stm8L151 + NTC*2 + EEPROM + 锂电池充电保护电路 + 18mAh纽扣电池;软件逻辑是,每隔一分钟,采样两路温度并保存在EEP里;通过USB转TTL,上位机能够读取,展示温度曲线,最大最小平均值等简单的运算;整个方案很简单,但也走了不少弯路......单片机程序框架之伪代码:void main(void){    CLK_Config();    GPIO_Config();    ADC_Config();    USART_Config();   
发表于 2020-03-09
STM8s外部时钟晶振失效时钟安全系统CSS启动演示
使用的最小系统晶振是8m的。这里说下配置过程:时钟自动切换,开启切换中断在中断里面清除中断标志,使能CSS并开启CSS中断CSS中断发生,清除CSS中断标志,将HSI二分频,即16M/2=8M,与外部晶振相同,这样不会影响串口波特率窗口输出配置信息:用手触碰PA1、PA2引脚使外部晶振失效串口输出CSS中断
发表于 2020-03-09
STM8s外部时钟晶振失效时钟安全系统CSS启动演示
STM8S103之时钟设置
最大时钟(指的是system clock):外部晶振24MHz,内部高速RC16MHz三个时钟源:外部晶振、内部高速RC(上电默认) +内部低速RC几个时钟:master clock(即sytem clock),fcpu,外设时钟、AWU时钟调用库函数中CLK_ClockSwitchConfig,参考库函数clk_clockselection,但是分频还得进一步设置上电默认:内部高速RC,HSIDIV=/8,CPUDIV=/1,外部时钟全使能,查看相关寄存器的Reset value
发表于 2020-03-09
STM8S103之时钟设置
stm8 16M晶振下精确软件延时
void inerDelay_us(unsigned char n) {for(;n>0;n--) { asm("nop"); //在STM8里面,16M晶振,_nop_() 延时了 333nsasm("nop"); asm("nop"); asm("nop"); }}//---- 毫秒级延时程序----------------------- void Delayms(unsigned int time) { unsigned int i; 
发表于 2020-03-08
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved