一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 45936|回复: 43
收起左侧

[STM8/STM32] STM8的详细介绍,在一乐推广STM8

  [复制链接]
发表于 2010-10-9 13:57 | 显示全部楼层 |阅读模式
本帖最后由 bluefeel 于 2010-10-10 10:01 编辑

随着STM32越来越深入人心,STM8也渐渐进入人们的视线。
我不算很早就用STM8,但是也希望更多的人用上,因为她相当有优势。

目前对比AVR便宜时候的状况是:STM8S和AVR功能相当的价钱比AVR便宜,价钱相当功能比AVR好很多!
初学者以STM8S入门比较好,STM8S105xx系列价格适合大众。

摘自官网的介绍:
全新STM8微控制器内核
3段流水线哈佛架构,24 MHz时最高处理性能20 MIPS (www.stmicroelectronics.com.cn/stm8)
先进的嵌入式130nm EEPROM技术
ST独有的嵌入式非易失性存储器,EEPROM存储器性能优异,采用高密度CMOS制程,并提供最出色的模拟特性
最先进的外设接口
最基本的外设接口,如高速SPI、I2C、USART、LIN-UART、CAN、IrDa、智能卡、CAN,以及高端16位定时器和快速、精确的模数转换器
成套的功能丰富的开发工具
从提供单线调试接口的入门级配置,到具有跟踪、评估和代码覆盖分析功能的复杂仿真器,各种开发工具应有尽有。第三方编译器集成在综合开发环境(IDE)内
触摸解决方案
针对STM8 电容触摸传感器开放免版税源代码(www.stmicroelectronics.com.cn/touch-sense-sw-lib)
STM8L - 超低功耗微控制器
STM8S - 8位微控制器
STM8A - 车用8位微控制器

关于性能外设什么的我就不多说,可以看数据手册

STM8的开发环境

首先有官方推出的ST Tool,包含了两个组建:STVD和STVP
STVD是汇编编译环境,可以调用第三方C编译器,界面如下图:
1.jpg

STVP是针对STM32、STM8仿真器的下载软件,只能和仿真器一起使用,如ST-Link,界面如下图:
2.jpg

最早的STM8 C编译器是Cosmic for STM8,可以被STVD调用,开发环境界面不怎么行,界面如下图:
3.jpg

前一段时间IAR也推出了IAR For STM8了,相信IAR更容易被人接受,界面如下图:
4.jpg

现在有国人自己开发免费的STM8 C编译器,虽然没有自己的IDE,但是大家可以多多支持
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4263932&bbs_page_no=2&bbs_id=9999

介绍完开发环境就要介绍下载方式,这是在中国推广单片机的重要因素
首先肯定可以用仿真器下载,这是官方推荐的,不但可以下载,还可以仿真。ST在中国推出了便宜的ST-Link仿真器
但是在ST刚开始推广STM32、STM8的时候ST-Link只要99¥,但是现在就要至少180¥了,估计是大部分中国人都不肯接受的
不过还好,STM8可以用串口下载程序,这几乎是零成本了,虽然有点小遗憾,但是相信很多人会接受的

STM8用串口下载程序必须要符合下面其中一个条件:
1、器件是空的(新买的就是空的)
2、optionbyte里的Bootloader是Enable的


optionbyte相当于AVR的熔丝,不过optionbyte可以用单片机程序修改,相当方便

所以新买的器件要不借助仿真器可以无限次串口下载,第一次下载的程序必须要修改optionbyte,使得Bootloader enable,这样以后可以一直用串口下载了。
下面是IAR程序

这是STM8S的程序:
#include "iostm8.h"
void main(void)
{
    FLASH_DUKR = 0xae;
    asm("nop");
    FLASH_DUKR = 0x56;
    asm("nop");
    while(!(FLASH_IAPSR & 0x08));
    asm("nop");
    FLASH_CR2 = 0x80;
    asm("nop");
    FLASH_NCR2 = 0x7f;
    asm("nop");
    *((unsigned char *)0x487e) = 0x55;
    asm("nop");
    *((unsigned char *)0x487f) = 0xaa;
    while(1);
}
STM8S_BL_EN.rar (12.95 KB, 下载次数: 7555)

这是STM8L的程序:
#include "iostm8L152c6.h"
void main(void)
{
    FLASH_DUKR = 0xae;
    asm("nop");
    FLASH_DUKR = 0x56;                  // 解除写保护
    asm("nop");
    while(!(FLASH_IAPSR & 0x08));       // 等待解锁
    asm("nop");
    FLASH_CR2 = 0x80;                   // 对选项字节进行写操作
    asm("nop");
    *((unsigned char *)0x480b) = 0x55;
    asm("nop");
    *((unsigned char *)0x480c) = 0xaa;  // 写入选项字节
    while(1);
}
STM8L_BL_EN.rar (12.86 KB, 下载次数: 7124)

好了,第一次下载记得下载这个程序,下载软件就是官方的Flash Loader Demonstrator,界面如下图:
5.jpg
下载步骤:
第一步:
STM8S是这样
6.jpg
STM8L是这样
7.jpg
打开Flash Loader Demonstrator V2.2.0,如图设置,我是用PL2303HX USB转串口。按下STM8S Mini Kit上的复位按键,松手后马上点击Next。
第二步:
7.jpg
连接成功后会弹出以上警告,确定。因为刚启动软件还没有选择合适器件,下载完毕不关掉软件再重复一次就没有这个警告了。
第三步:
8.jpg
Target选择要下载的单片机的容量,Next。
第四步:
9.jpg
这个界面可以选择擦除、下载、读取操作,我们主要目的是下载。选择好下载文件,擦除(擦除必要页、不擦除、全部擦除)按需选择一项。可以勾选的选项有:跳到用户程序(下载完毕)、优化(去掉某些0xFF)、下载后校检。接着Next。
第五步:
10.jpg
正在下载时的界面,速度比SWIM还快。
第六步:
11.jpg
下载完毕,可以Close关闭软件,也可以Back返回第一步重新下载,这时第二步的警告窗口就没有了,直接到第三步。

串口下载支持的器件:
12.jpg

这是我做的STM8L Mini Kit,STM8S用多了,STM8L的还没用多少
8.jpg
9.jpg
10.jpg
11.jpg
12.jpg
13.jpg
原理图和PCB文件
STM8L Mini Kit.pdf (40.17 KB, 下载次数: 7565)
STM8L Mini Kit.rar (83.06 KB, 下载次数: 7478)









土豆和热水驱动的STM8L
http://pagesadmin.ednchina.com/images/article/77166eb4-14d4-472a-96be-3c4aa4296063/_igp2021-2.jpg

http://pagesadmin.ednchina.com/images/article/77166eb4-14d4-472a-96be-3c4aa4296063/_igp2022-2.jpg

评分

参与人数 1一乐金币 +5 收起 理由
fatzeros + 5 很给力!

查看全部评分

 楼主| 发表于 2010-10-9 13:58 | 显示全部楼层
本帖最后由 bluefeel 于 2010-10-10 09:44 编辑

一些STM8的文档

数据手册
STM8L15x 10-4.pdf (2.07 MB, 下载次数: 5301)
STM8L101 10-6.pdf (1.93 MB, 下载次数: 7912)
以下为中文
STM8S20xx系列数据手册(2009年1月).pdf (5.07 MB, 下载次数: 11979)
STM8S103xx系列数据手册(2009年3月).PDF (1.97 MB, 下载次数: 13923)
STM8S105xx系列数据手册(2009年2月).pdf (2.01 MB, 下载次数: 8728)

函数库
STM8S固件函数库 V1.1.1.zip (6.54 MB, 下载次数: 19563)
STM8L101xx standard peripheral library V1.1.0.zip (3.89 MB, 下载次数: 7949)
STM8L15x standard peripheral library V1.2.0.zip (7.15 MB, 下载次数: 22692)

参考手册
STM8S微控制器参考手册(2009年1月第4版).pdf (5.81 MB, 下载次数: 7907)
STM8L101xx Reference Manual 10-6.pdf (3.26 MB, 下载次数: 4179)
STM8L15x Reference Manual 10-1.pdf (6.43 MB, 下载次数: 6342)

其它资料
STM8单片机快速入门_V2.0.pdf (2.3 MB, 下载次数: 22855)
STM8L产品宣传册(2009年9月).PDF (405.27 KB, 下载次数: 8408)
STM8S选型手册(英文).pdf (707.81 KB, 下载次数: 8951)
STM8L快速选型
[flash]https://www.yleee.com.cn/forum.php?mod=attachment&aid=MTgzODd8NWIyY2Y1YzZiMGI2OTJkM2JkZjRiNWViMzY3OWFhOTR8MTcxNTU0OTUzNA%3D%3D&request=yes&_f=.swf[/flash]
STM8S快速选型
[flash]https://www.yleee.com.cn/forum.php?mod=attachment&aid=MTgzODh8YzkyMjkzMjg2NzQ4NDEzZjY4NTRiMmIwNjIxNzk3MTN8MTcxNTU0OTUzNA%3D%3D&request=yes&_f=.swf[/flash]

以上资料如果是英文翻译,务必以英文原版为准,因为中文翻译资料有相当多错误!

软件
绿色版的STVP和Flash loader demonstrator
STVP.rar (4.89 MB, 下载次数: 7465)
Flash loader demonstrator V2.20.rar (2.81 MB, 下载次数: 8101)
国人开发的免费C编译器
stm8cc.rar (360.32 KB, 下载次数: 7760)

不是免费的软件我就不上传了,大家自己搜索,ST Tool有52M大小,我也不上传了
Cosmic for STM8有32K免费版,不过要到Cosmic官方去申请32K license
 楼主| 发表于 2010-10-9 13:58 | 显示全部楼层
本帖最后由 bluefeel 于 2010-10-10 09:46 编辑

这是我在IAR环境下写的一个程序,以官方推出的199¥的三合一板为基础

程序包含了:读取唯一ID,时钟切换,串口通信,AD采样转换,定时器定时,片内外设中断,外部中断。

#include "iostm8s207sb.h"
unsigned char i, j;
unsigned long k;
unsigned int l;
unsigned char Unique_ID[12];
const unsigned char str1[] = "The unique ID is : ";
const unsigned char str2[] = "The AD value is : ";
void Delay(unsigned int ms)
{
    unsigned int i;
    for (; ms>0; ms--)
        for (i=0; i<4000; i++);
}
void CLK_Switch(void)
{
    CLK_SWCR = 0x02;            // 使能自动切换时钟
    CLK_SWR = 0xb4;             // HSE为主时钟源
    while(!(CLK_SWCR & 0x08));  // 等待切换完成
    CLK_SWCR = 0;
}
void Read_ID(void)
{
    Unique_ID[ 0] = *((unsigned char *)0x48CD);  // 读取MCU序列号
    Unique_ID[ 1] = *((unsigned char *)0x48CE);
    Unique_ID[ 2] = *((unsigned char *)0x48CF);
    Unique_ID[ 3] = *((unsigned char *)0x48D0);
    Unique_ID[ 4] = *((unsigned char *)0x48D1);
    Unique_ID[ 5] = *((unsigned char *)0x48D2);
    Unique_ID[ 6] = *((unsigned char *)0x48D3);
    Unique_ID[ 7] = *((unsigned char *)0x48D4);
    Unique_ID[ 8] = *((unsigned char *)0x48D5);
    Unique_ID[ 9] = *((unsigned char *)0x48D6);
    Unique_ID[10] = *((unsigned char *)0x48D7);
    Unique_ID[11] = *((unsigned char *)0x48D8);
}
void UART3_init(void)
{
    UART3_BRR2 = 0x01;  // 设置波特率9600
    UART3_BRR1 = 0x34;  // 8M/9600 = 0x341
    UART3_CR2 = 0x2c;   // 允许接收中断,允许发送
}
void ADC_init(void)
{
    ADC_CSR |= 0x03;  // 选择通道3
    ADC_CR1 |= 0x40;  // ADC时钟 = 主时钟 / 8
    asm("nop");
    ADC_CR1 |= 0x01;  // ADC上电
}
void Time1_init(void)
{
    TIM1_PSCRH = 0x1f;
    TIM1_PSCRL = 0x3f;  // 分频系数7999+1,8M时钟时1ms增1
    TIM1_ARRH = 0x03;
    TIM1_ARRL = 0xe7;   // 计数到999后溢出,1s中断一次
    TIM1_IER = 0x01;    // 允许更新中断
    TIM1_CR1 = 0x01;    // 启动定时器1
}
#pragma vector = TIM1_OVR_UIF_vector
__interrupt void Time1_handler(void)
{
    TIM1_SR1 = 0;    // 清除中断标志
    PD_ODR ^= 0x01;
}
#pragma vector = UART3_R_RXNE_vector
__interrupt void UART_ReceInt(void)
{
    while(!(UART3_SR & 0x20));
    i = UART3_DR;
    if(i == 0x30)
    {
        for (i=0; i<19; i++)
        {
            while(!(UART3_SR & 0x80));
            UART3_DR = str1;
            asm("nop");
        }
        for (i=0; i<12; i++)
        {
            while(!(UART3_SR & 0x80));
            j = Unique_ID & 0x0f;
            if(j < 10)
                UART3_DR = j + 0x30;
            else
                UART3_DR = j + 0x37;
            asm("nop");
            while(!(UART3_SR & 0x80));
            j = (Unique_ID >> 4) & 0x0f;
            if(j < 10)
                UART3_DR = j + 0x30;
            else
                UART3_DR = j + 0x37;
            asm("nop");
        }
        while(!(UART3_SR & 0x80));
        UART3_DR = '.';
        asm("nop");
        while(!(UART3_SR & 0x80));
        UART3_DR = 0x0d;
        asm("nop");
        while(!(UART3_SR & 0x80));
        UART3_DR = 0x0a;
        asm("nop");
        ADC_CR1 |= 0x01;  // 启动一次AD转换
        while(!(ADC_CSR & 0x80));  // 等待转换完成
        ADC_CSR &= 0x7f;
        k = ADC_DRH;
        k <<= 2;
        k += ADC_DRL;
        k = k * 3317 / 1023;
        l = k;
        for (i=0; i<18; i++)
        {
            while(!(UART3_SR & 0x80));
            UART3_DR = str2;
            asm("nop");
        }
        while(!(UART3_SR & 0x80));
        UART3_DR = l / 1000 + 0x30;
        asm("nop");
        l %= 1000;
        while(!(UART3_SR & 0x80));
        UART3_DR = '.';
        asm("nop");
        while(!(UART3_SR & 0x80));
        UART3_DR = l / 100 + 0x30;
        asm("nop");
        l %= 100;
        while(!(UART3_SR & 0x80));
        UART3_DR = l / 10 + 0x30;
        asm("nop");
        l %= 10;
        while(!(UART3_SR & 0x80));
        UART3_DR = l + 0x30;
        asm("nop");
        while(!(UART3_SR & 0x80));
        UART3_DR = 'V';
        asm("nop");
        while(!(UART3_SR & 0x80));
        UART3_DR = '.';
        asm("nop");
        while(!(UART3_SR & 0x80));
        UART3_DR = 0x0d;
        asm("nop");
        while(!(UART3_SR & 0x80));
        UART3_DR = 0x0a;
        asm("nop");
    }
}
#pragma vector = 0x02
__interrupt void External_interrupts(void)
{
    PD_CR2 = 0;
    Delay(30);
    if(!(PD_IDR & 0x80))
        PD_ODR ^= 0x04;
    PD_CR2 = 0x80;
}
void main(void)
{
    CLK_Switch();         // 使用外部8M晶振
    Delay(10);
    PD_DDR = 0x05;
    PD_CR1 = 0x05;
    PD_CR2 = 0x80;
    Read_ID();
    asm("RIM");           // 开总中断
    UART3_init();
    ADC_init();
    Time1_init();
    while(1);
}

请不要将STM8S和STM8L的程序互用,因为寄存器地址完全不一样,其它地方也有些差别!

我能力不高只是比大家接触早点,以后STM8上的问题大家可以相互交流。
我做的STM8L Mini Kit PCB可以免费申请,因为数量不多,要水平有目共睹或对论坛有贡献的人才能申请。
以后我还会打样很多开发板评估板,希望大家积极提高水平,为坛子做共享。

下一打样的PCB是类似Silabs的“IrSlider”,很炫的东西,大家可以到官方网站看看效果
http://www.silabs.com/products/opticalsensors/infraredsensors/Pages/IrSliderEK.aspx
Si1120 IRSliderEK.jpg
发表于 2010-10-9 14:03 | 显示全部楼层
容易买到么?
发表于 2010-10-9 14:39 | 显示全部楼层
支持一下
发表于 2010-10-9 14:40 | 显示全部楼层
关注!
发表于 2010-10-9 15:33 | 显示全部楼层
非常感谢Bluefeel的板子和元件,拿到当天就给焊好了,结果洗板的时候发生了杯具,把原本闪闪发光的焊点给洗成了灰色暗淡的焊点,很是郁闷......

正在下载工具,一会试试看下载正常不。
DSC045781.JPG
DSC045791.JPG
DSC045801.JPG
DSC045811.JPG
发表于 2010-10-9 16:18 | 显示全部楼层
建议楼主对 STM8L , STM8S, 以及其他系列做一个概括性的介绍, 以及初学 STM 单片机 应该从 哪个型号开始学习。
发表于 2010-10-9 16:46 | 显示全部楼层
很好  前段时间 才买了个开发板来玩
发表于 2010-10-9 17:05 | 显示全部楼层
烧录协议不公开
接口电平容易出问题
开发工具只能盗版

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-13 05:32 , Processed in 0.078112 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表