经不住诱惑,今天开始玩STM8!麻烦过来人进来讲讲心得

2019-12-26 18:53发布

1、买的STM8 value line discovery板刚到手,从最简单的STM8S003开始吧。
2、下载了STVD/COSMIC。COSMIC_32K坛里有和谐好的,不过要先下载原版安装。
3、争取今晚把LED点亮。
4、其实我很看好STM8L152,之后要测试一下耗电和ADC性能。
5、纯业余玩的,还没想好弄点啥……
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
76条回答
TANK99
1楼-- · 2019-12-31 03:39
我来贴一个我的定时器做的Delay吧。好多例程中都是for while的结构。还是我的这个较精确呵。

/*************************************************************************
* Copyright (C) 1993-2009 by  Company_name, Inc.  All Rights Reserved
* Compiler:         ***
* Designed:         TANK99
* Build Date:        2012-4-29
* Version:        1.0
**************************************************************************
文 件:       
功 能:        Delay Function for the System, use Timer3
*************************************************************************/

#include "system.h"
#include "stm8s_tim3.h"

#include "delay.h"

//************************************************************************

#define TIMTICK         (TIM3)

U8 Delay_sta = 0;


/*************************************************************************
功 能:初始化延时定时器
参数表:无
返回值:无
说 明:使用Timer3
*************************************************************************/
void Delay_ms_Init( void )
{
        TIM3->CR1  = B0000_0100;                // URS=1只有溢出才产生更新中断/UDIS=0允许更新事件/CEN=0 关定时器
        TIM3->EGR |= B0000_0001;                // 即时

        TIM3_TimeBaseInit( TIM3_PRESCALER_32, 499 );         // 64分频: 2us Autoreload value: 500次        1ms定时

//        TIM3->PSCR = (uint8_t)(TIM3_PRESCALER_32);        // 32分频: 2us

//        TIM3->ARRH = (uint8_t)(499 >> 8);                // Autoreload value: 500次        1ms定时
//        TIM3->ARRL = (uint8_t)(499);

        TIM3->CNTRH = 0 ;
        TIM3->CNTRL = 0 ;
       
        TIM3->SR1 = 0;                                       // clear overflow flag
          TIM3->CR1 |= B0000_0001;                        // Start timer
       
        Delay_sta = 1;       
}

/*************************************************************************
功 能:毫秒级定时
参数表:INT毫秒数,输入1为1毫秒——
返回值:
说 明:使用Timer3
*************************************************************************/
// void Delay_ms( unsigned int ms )
void Delay( unsigned int ms )
{
        if ( Delay_sta == 0 )
        {
                Delay_ms_Init(  );
        }
        else
        {
                TIM3->CR1 |= B0000_0001;        // Start timer
        }
       
        while ( ms -- )
        {
                while( ( TIM3->SR1 &= TIM3_IT_UPDATE ) == 0 )
                {
                        ;
                }
               
                TIM3->SR1 = 0;                                                                                                                                                               // clear overflow flag
        }
       
        TIM3->CR1 = B0000_0000;                        // Stop timer

}


/*************************************************************************
功 能:微秒级定时
参数表:INT微秒数,输入1为1微秒( 输入输出有较大延时.............. )
返回值:
说 明:使用Timer3       
*************************************************************************/

void Delayus(uint16_t us)
{

        TIM3->CR1 = B0000_0100;                                        // URS=1只有溢出才产生更新中断/UDIS=0允许更新事件/CEN=0 关定时器
       
        TIM3_TimeBaseInit( TIM3_PRESCALER_16, us );                 // 16分频: 1us Autoreload value: N次        N us定时

//        TIM3->PSCR = (uint8_t)(TIM3_PRESCALER_16);                // 16分频: 1us

//        TIM3->ARRH = (uint8_t)(us >> 8);                        // Autoreload value: N次        N us定时
//        TIM3->ARRL = (uint8_t)(us);


        TIM3->CNTRH = 0 ;
        TIM3->CNTRL = 0 ;
       
        TIM3->EGR |= B0000_0001;        // 即时
       
        TIM3->SR1 = 0;                       // clear overflow flag
       
        TIM3->CR1 |= B0000_0001;        // Start timer
       
        Delay_sta = 0;
       
        while( ( TIM3->SR1 &= TIM3_IT_UPDATE ) == 0 )
        {
                ;
       
        }
       
        TIM3->CR1 = B0000_0000;                // Stop timer       
        TIM3->SR1 = 0;                       // clear overflow flag
       
}

//*********************************  END  ********************************
TANK99
2楼-- · 2019-12-31 06:18
代码怎么还没有和楼上几位一样的显示样式啊?

BTW,我用的是内部16M RC,所以用了16和32的分频。
SNOOKER
3楼-- · 2019-12-31 07:05
 精彩回答 2  元偷偷看……
SNOOKER
4楼-- · 2019-12-31 07:55
STM8有一个非常不好的地方是,如果中断里有用到除法运算,就要对中断代码插入一段特殊的指令流,
一般直接写程序是没什么问题,但如果用到OS的话就非常蛋疼了,没法在中断里切换任务除非你用汇编来写
mowin
5楼-- · 2019-12-31 12:10
SNOOKER 发表于 2012-9-10 21:07
STM8有一个非常不好的地方是,如果中断里有用到除法运算,就要对中断代码插入一段特殊的指令流,
一般直接 ...

都上OS啦?从来都裸奔的菜鸟只能飘过。

终于弄清楚怎么在COSMIC里为MCU写中断服务程序: led_blinky_using_tim6.zip (45.94 KB, 下载次数: 14) 2012-9-10 23:13 上传 点击文件名下载附件
由于上面网友说003只保证100次擦写,今天果断把板上MCU换成903。所以就用903的TIMER6来做中断实验,依然是闪灯。没有用库。
kkey
6楼-- · 2019-12-31 12:57
我也买了那块板子,要好好摆弄一下,现在还没有入门

一周热门 更多>