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

2019-12-26 18:53发布

1、买的STM8 value line discovery板刚到手,从最简单的STM8S003开始吧。
2、下载了STVD/COSMIC。COSMIC_32K坛里有和谐好的,不过要先下载原版安装。
3、争取今晚把LED点亮。
4、其实我很看好STM8L152,之后要测试一下耗电和ADC性能。
5、纯业余玩的,还没想好弄点啥……
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
77条回答
TANK99
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  ********************************

一周热门 更多>